内容
# Humio MCP 服务器
Humio 的模型上下文协议(MCP)服务器实现,使其能够与 Humio 的日志记录和分析平台集成。
## 描述
该项目实现了一个服务器,连接模型上下文协议与 Humio 的日志记录功能。它允许应用程序与 Humio 强大的日志记录和分析功能之间实现无缝集成。
## 前提条件
- Humio token
## 安装
1. 克隆仓库:
```bash
git clone [仓库网址]
cd humio-mcp
```
2. 安装依赖项:
```bash
npm install
```
或
```bash
pnpm install
```
或
```bash
yarn install
```
3. 在根目录中创建 `.env` 文件,包含您的 Humio 配置(仅在开发/测试时有用,因为 MCP 客户端无论如何都会提供环境变量):
```env
HUMIO_API_TOKEN=您的_API_token
HUMIO_REQUEST_TIMEOUT_MS=30000
```
4. 从示例配置文件创建配置
```sh
cp humio-query-config.example.json humio-query-config.json
```
## 使用
构建服务器:
```bash
npm run build
```
或
```bash
pnpm run build
```
或
```bash
yarn run build
```
### 检查
构建完成后,您可以使用 MCP 检查器检查服务器:
```bash
npx @modelcontextprotocol/inspector node dist/index.js
```
连接到客户端。示例配置
```json
"humioMCP": {
"command": "node",
"args": [
"<服务器绝对路径>/humio-mcp/dist/index.js"
],
"type": "stdio",
"env": {
"HUMIO_API_TOKEN": "<HUMIO_API_TOKEN>",
"HUMIO_REQUEST_TIMEOUT_MS": 3000
}
}
```
## 配置文件格式
`humio-query-config.json` 文件定义了服务器可用的查询。数组中的每个条目都应遵循以下结构:
| 字段 | 类型 | 必需 | 描述 |
|-----------------|----------------------------|----------|---------------------------------------------------------------------------------------------|
| 名称 | 字符串 | 是 | 查询配置的唯一名称。 |
| 描述 | 字符串 | 是 | 查询功能的易读描述。 |
| 查询 | 字符串 | 是 | Humio 查询字符串,可以包含模板变量(例如,`{{variableName}}`)。 |
| 字段 | 字符串[] | 是 | 从查询结果中提取的字段列表。 |
| 变量 | 变量[] | 否 | 查询所需的变量列表。参见下面的 `变量` 格式。 |
| 输出模板 | 字符串 | 是 | 格式化每个结果的模板。使用 `{{fieldName}}` 进行插值。 |
| 连接字符串 | 字符串 | 是 | 用于连接多个格式化结果的字符串。 |
### 变量格式
`变量` 数组中的每个项目可以是以下之一:
#### 标量变量
| 字段 | 类型 | 必需 | 描述 |
|-------------|---------------------|----------|---------------------------------------------|
| 名称 | 字符串 | 是 | 变量名称。 |
| 描述 | 字符串 | 是 | 变量描述。 |
| 类型 | '字符串'|'数字'|'布尔值' | 是 | 变量类型。 |
| 必需 | 布尔值 | 是 | 变量是否必需。 |
#### 枚举变量
| 字段 | 类型 | 必需 | 描述 |
|-------------|---------------------|----------|---------------------------------------------|
| 名称 | 字符串 | 是 | 变量名称。 |
| 描述 | 字符串 | 是 | 变量描述。 |
| 类型 | '枚举' | 是 | 变量类型(必须是“枚举”)。 |
| 必需 | 布尔值 | 是 | 变量是否必需。 |
| 枚举选项 | 字符串[] | 是 | 枚举变量的允许值。 |
#### 示例
```json
[
{
"名称": "关键错误",
"描述": "查找香蕉团队的关键错误,按消息和堆栈跟踪分组。",
"查询": "k8s.labels.team = banana | (严重程度 = 关键)| groupBy([消息,堆栈跟踪])",
"字段": ["消息", "堆栈跟踪", "_count"],
"输出模板": "错误\"{{消息}}\"总共发生:{{_count}}次。堆栈跟踪是\n---{{堆栈跟踪}}\n---\n\n",
"连接字符串": "\n"
},
{
"名称": "按状态划分的项目操作",
"描述": "按给定项目在香蕉团队中的状态对操作进行分组。",
"查询": "k8s.labels.team = banana | projectKey=\"{{projectKey}}\" | groupBy([字段.状态])",
"字段": ["字段.状态", "_count"],
"变量": [
{
"名称": "项目密钥",
"描述": "要筛选的项目密钥。",
"类型": "字符串",
"必需": true
}
],
"输出模板": "状态:{{字段.状态}} - {{_count}}操作",
"连接字符串": "\n"
}
]
```
## ⚠️ 危险:敏感信息
**请勿在配置文件的 `字段` 中包含任何敏感信息。**
`字段` 中的内容会返回给客户端,并可能传递给大型语言模型(LLM)。此处包含的任何敏感数据(例如 API 密钥、密码、个人信息或机密业务数据)都可能被暴露。
确保在配置文件中的 `字段` 中仅指定非敏感且安全共享的信息。
## ⚠️ 警告:超时和部分结果
如果在查询期间达到配置的超时时间(`HUMIO_REQUEST_TIMEOUT_MS`),服务器将返回到那时为止收集的事件。这意味着结果可能不完整,可能无法捕获所有相关事件。
为了减少遗漏数据的风险,请根据预期的查询大小和网络状况调整超时值。
## 项目结构
```
humio-mcp/
├── src/
│ ├── humio/ # Humio 特定实现
│ ├── 实用工具/ # 实用工具函数
│ └── index.ts # 主服务器入口点
├── dist/ # 编译后的 JavaScript 文件
├── humio-query-config.json # 可用查询的配置
├── package.json # 项目依赖项和脚本
└── tsconfig.json # TypeScript 配置
```