Log Diagnosis MCP Server
by suxiao1228
README.md
# Log Diagnosis MCP Server
> 通用日志诊断 MCP 服务器 —— 让 AI 自动完成「查日志 → 还原调用链 → 扫描代码 → 定位 BUG 根因」的完整闭环。
## 💡 解决什么问题
后端开发者排查线上 BUG 的传统流程:
```
登录日志平台 → 拼查询条件 → 翻页找日志 → 手动还原调用链 → 看代码找根因
```
**痛点**:步骤繁琐、耗时 30 分钟~数小时、容易遗漏关键日志。
**本工具**:通过 MCP 协议将日志查询能力暴露给 AI,让 AI 自动完成整个诊断闭环,**将排查时间缩短到几分钟**。
## ✨ 核心特性
| 特性 | 说明 |
|------|------|
| 🔌 **通用对接** | 支持 Elasticsearch、Grafana Loki、自定义 REST API 三种日志平台 |
| 🔍 **TraceId 链路追踪** | 自动计算时间范围、分页拉取全量日志、还原完整调用链 |
| 🔐 **灵活鉴权** | 支持 API Key、Bearer Token、SecretKey 换 Token 多种方式 |
| 🌍 **多环境切换** | 支持 T1(测试)/ PRE(预发)/ PRD(生产)环境一键切换 |
| 📄 **上下文关联** | 获取可疑日志的前后文,帮助 AI 理解完整场景 |
| 🔗 **双传输模式** | 同时支持 SSE 和 STDIO 两种 MCP 连接方式 |
## 📦 快速开始
### 1. 安装依赖
```bash
git clone https://github.com/your-username/log-diagnosis-server.git
cd log-diagnosis-server
pip install -r requirements.txt
```
### 2. 配置日志平台
**方式一:环境变量(推荐)**
```bash
export LOG_PLATFORM_TYPE=elasticsearch # elasticsearch / loki / custom
export LOG_PRD_URL=http://your-es-host:9200
export LOG_PRE_URL=http://your-es-pre:9200 # 可选
export LOG_T1_URL=http://your-es-test:9200 # 可选
export LOG_DEFAULT_ENV=PRD
```
**方式二:配置文件**
```bash
cp config.example.json config.json
# 编辑 config.json 填入实际地址
export LOG_DIAG_CONFIG=./config.json
```
### 3. 启动服务
```bash
# STDIO 模式(本地开发推荐)
python server.py
# SSE 模式(远程部署)
MCP_TRANSPORT=sse MCP_PORT=8080 python server.py
```
## 🔌 接入 CodeBuddy
### STDIO 模式
在 CodeBuddy 中添加 `mcp.json`:
```json
{
"mcpServers": {
"log-diagnosis-server": {
"command": "python3",
"args": ["/path/to/log-diagnosis-server/server.py"],
"env": {
"LOG_PLATFORM_TYPE": "elasticsearch",
"LOG_PRD_URL": "http://your-es-host:9200"
},
"timeout": 60
}
}
}
```
### SSE 模式
先启动服务,然后在 CodeBuddy 中配置:
```json
{
"mcpServers": {
"log-diagnosis-server": {
"url": "http://your-server:8080/sse",
"timeout": 60
}
}
}
```
## 🛠️ 提供的工具 (Tools)
| # | 工具名 | 功能 | 典型场景 |
|---|--------|------|----------|
| 1 | `get_access_token` | 鉴权获取 Token | 首次连接日志平台 |
| 2 | `query_logs` | 通用日志查询 | 按条件搜索日志 |
| 3 | `count_logs` | 日志计数 | 评估数据量、决定分页 |
| 4 | `query_logs_by_trace_id` | TraceId 全链路查询 | **核心** — 一键拉取完整调用链 |
| 5 | `get_log_context` | 日志上下文 | 查看可疑日志前后发生了什么 |
### 查询语法
工具使用统一的查询语法(会自动转换为目标平台语法):
```
# 精确匹配
service=order-service
# 模糊匹配
message~NullPointerException
# 逻辑组合
service=order-service AND level=ERROR
service=order-service AND message~timeout AND NOT level=DEBUG
```
## 🚀 使用示例
在 CodeBuddy 的 Craft Agent 中直接描述需求:
**示例 1 — TraceId 链路诊断:**
```
帮我查一下这个 TraceId 的完整调用链路:a1b2c3d4e5f67890a1b2c3d4e5f67890
环境是预发(PRE),看看哪里出了问题
```
**示例 2 — 错误日志排查:**
```
order-service 在过去 1 小时内有大量 ERROR 日志,帮我分析根因
```
**示例 3 — SQL 问题定位:**
```
有个查询结果为空的 BUG,TraceId 是 abc123...,帮我看看 SQL 是否有问题
```
AI 会自动调用工具完成:鉴权 → 查询日志 → 分析调用链 → 定位根因 → 给出修复建议
## ⚙️ 配置参数说明
| 参数 | 必填 | 说明 | 示例值 |
|------|------|------|--------|
| `LOG_PLATFORM_TYPE` | 是 | 日志平台类型 | `elasticsearch` / `loki` / `custom` |
| `LOG_PRD_URL` | 是 | 生产环境日志平台地址 | `http://your-es-host:9200` |
| `LOG_PRE_URL` | 否 | 预发环境日志平台地址 | `http://your-es-pre:9200` |
| `LOG_T1_URL` | 否 | 测试环境日志平台地址 | `http://your-es-test:9200` |
| `LOG_DEFAULT_ENV` | 否 | 默认环境,默认 PRD | `PRD` / `PRE` / `T1` |
| `LOG_REQUEST_TIMEOUT` | 否 | 请求超时时间(秒),默认 30 | `30` |
| `LOG_DIAG_CONFIG` | 否 | 配置文件路径(优先级高于环境变量) | `./config.json` |
## 📊 效率对比
| 步骤 | 传统方式 | 使用本工具 |
|------|---------|-----------|
| 登录日志平台 | 1-2 分钟 | ✅ AI 自动鉴权 |
| 拼查询条件 | 3-5 分钟 | ✅ AI 自动生成 |
| 翻页找日志 | 5-15 分钟 | ✅ 自动分页全量拉取 |
| 还原调用链 | 10-30 分钟 | ✅ 自动按时间排序分析 |
| 看代码定位根因 | 10-60 分钟 | ✅ AI 扫描代码关联 |
| **总计** | **30 分钟 ~ 数小时** | **几分钟** |
## 🔧 支持的日志平台
| 平台 | 配置值 | 说明 |
|------|--------|------|
| Elasticsearch | `elasticsearch` / `es` | 支持 ES 7.x / 8.x / OpenSearch |
| Grafana Loki | `loki` | 通过 LogQL 查询 |
| 自定义 REST API | `custom` | 对接任意实现标准接口的日志平台 |
### 自定义平台接口协议
如果你的日志平台不是 ES/Loki,只需实现以下 REST API:
| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/auth/token` | POST | 鉴权,请求体 `{"secretKey": "..."}` |
| `/api/logs/query` | POST | 查询日志 |
| `/api/logs/count` | POST | 计数 |
| `/api/logs/context/{id}` | POST | 获取上下文 |
## 📁 项目结构
```
log-diagnosis-server/
├── server.py # MCP Server 主入口(5 个工具定义)
├── config.py # 配置管理(环境变量 / 配置文件)
├── adapters/
│ ├── __init__.py # 适配器工厂
│ ├── base.py # 适配器基类 + 通用查询语法解析
│ ├── elasticsearch_adapter.py # Elasticsearch 适配器
│ ├── loki_adapter.py # Grafana Loki 适配器
│ └── custom_adapter.py # 自定义 REST API 适配器
├── config.example.json # 配置文件示例
├── requirements.txt # Python 依赖
├── LICENSE # MIT 开源协议
├── .gitignore # Git 忽略规则
└── README.md # 本文件
```
## 📄 License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues