SLS Query MCP Server
一个基于 MCP (Model Context Protocol) 的阿里云 SLS 日志查询服务器,让 AI 助手能够通过自然语言查询 SLS 日志。
功能特性
- 🔧 多项目支持: 配置多个 SLS 项目,通过别名快速切换
- ⏰ 精确时间控制: 支持分钟级时间范围 (1m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 12h, 1d, 2d, 3d)
- 🎯 自定义时间戳: 支持精确的时间戳范围查询 (AI Agent 推荐功能)
- 🔍 灵活查询: 支持用户自定义 SLS 查询语句或 AI 自动生成
- 📊 智能分页: 自动处理大量日志数据,支持分页查询
- 🤖 AI 集成: 与 Claude Desktop、Cursor 等支持 MCP 的 AI 客户端集成
- 🌐 双传输模式: 支持 stdio 和 HTTP (Streamable HTTP + SSE) 传输协议
- 🔒 安全特性: CORS 保护、会话管理、协议版本验证
- 🛠️ 智能查询处理: 自动修复 SLS 查询语法错误,支持自然语言查询
- 🎓 AI Agent 指导: 提供完整的日志搜索、问题定位、查询编写指导
- 🔄 上下文优化: 智能控制日志数量,避免上下文溢出
- 📈 大规模分析: 支持分析大量日志数据 (最高50,000条),适合深度分析和趋势研究
🚀 快速开始
1. 安装依赖
cd sls-query-local
npm install2. 配置 SLS 项目
cp config.example.json config.json
# 编辑 config.json 添加你的 SLS 项目配置编辑 config.json,添加你的 SLS 项目配置:
[
{
"alias": "neptune-cn-prod",
"accessKeyId": "your-access-key-id",
"accessKeySecret": "your-access-key-secret",
"endpoint": "cn-shanghai.log.aliyuncs.com",
"projectName": "your-project-name",
"logstoreName": "your-logstore-name"
},
{
"alias": "park-sdk-qa",
"accessKeyId": "your-access-key-id",
"accessKeySecret": "your-access-key-secret",
"endpoint": "cn-hanghai.log.aliyuncs.com",
"projectName": "your-qa-project",
"logstoreName": "your-qa-logstore"
}
]3. 配置 MCP 客户端
# 自动配置 MCP 客户端
npm run setup
# 或
node scripts/setup-mcp-config.js update
# 测试连接
npm run test-connection
# 或
node scripts/setup-mcp-config.js test4. 启动服务器
stdio 模式(推荐用于 AI 客户端)
npm start
# 或
node mcp-server.jsHTTP 模式(支持 Web 客户端和 SSE)
npm run start:http
# 或
node mcp-http-server.jsHTTP 服务器将在 http://0.0.0.0:3000 启动,提供以下端点:
POST/GET /mcp- MCP 协议端点GET /health- 健康检查端点
5. 配置 AI 客户端
Claude Desktop (stdio 模式)
在 Claude Desktop 的 MCP 配置文件中添加:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"sls-logs": {
"command": "node",
"args": ["/path/to/sls-query-local/mcp-server.js"],
"env": {}
}
}
}Cursor (stdio 模式)
在 Cursor 的 MCP 配置中添加:
{
"mcpServers": {
"sls-logs": {
"command": "node",
"args": ["/path/to/sls-query-local/mcp-server.js"],
"env": {}
}
}
}HTTP 模式客户端
对于支持 HTTP 传输的客户端,可以使用以下配置:
{
"mcpServers": {
"sls-logs-http": {
"url": "http://127.0.0.1:3000/mcp",
"transport": "http",
"protocolVersion": "2025-06-18"
}
}
}📋 配置完成检查清单
- [ ] ✅ 依赖已安装 (
npm install) - [ ] ✅ SLS 项目已配置 (
config.json) - [ ] ✅ MCP 客户端已配置 (
node setup-mcp-config.js update) - [ ] ✅ 连接测试通过 (
node test-mcp-connection.js) - [ ] ✅ 服务器已启动
📁 项目结构
sls-query-local/
├── 📁 核心文件
│ ├── mcp-server.js # MCP stdio 服务器 (主入口)
│ ├── mcp-http-server.js # MCP HTTP 服务器
│ ├── sls-client.js # SLS 客户端
│ ├── query-utils.js # 查询工具函数
│ └── config.json # SLS 项目配置
│
├── 📁 tools/ # MCP 工具目录
│ ├── tool-manager.js # 工具管理器
│ ├── list-projects-tool.js # 列出可用项目
│ ├── query-logs-tool.js # 查询日志 (已优化)
│ ├── how-to-write-query-tool.js # SLS 查询语法指导
│ ├── how-to-solve-tool.js # 问题定位方法论
│ ├── ignores-tool.js # 日志忽略策略
│ └── log-search-guidance-tool.js # AI Agent 搜索指导
│
├── 📁 human_maintains/ # 人工维护的指导文档 ⭐️
│ ├── README.md # 维护指南
│ ├── how-to-solve.md # 问题定位方法论内容
│ ├── ignores.md # 日志忽略策略内容
│ └── log-search-guidance.md # 搜索指导内容
│
├── 📁 scripts/ # 实用脚本
│ ├── auto-start-http.js # 自动启动 HTTP 服务器
│ ├── get-network-info.js # 获取网络信息
│ ├── setup-mcp-config.js # MCP 配置设置
│ └── start-http-server.sh # 启动 HTTP 服务器脚本
│
├── 📁 examples/ # 配置示例
│ ├── http-config.example.json # HTTP 配置示例
│ └── mcp-client-configs.json # MCP 客户端配置示例
│
├── 📁 docs/ # 文档目录
│ ├── LOG-SEARCH-OPTIMIZATION.md # 日志搜索优化说明
│ ├── REFACTORING-SUMMARY.md # 重构总结
│ └── SLS-QUERY-SYNTAX.md # SLS 查询语法参考
│
└── 📁 transports/ # 传输协议实现
└── http-transport.js # HTTP 传输协议📋 详细的项目结构说明请查看 PROJECT-STRUCTURE.md
🔄 human_maintains 文件夹
这个文件夹包含所有需要人工维护的指导文档。AI agent 工具会动态读取这些文件:
- how-to-solve.md: 日志问题定位方法论,包含完整的问题排查流程
- ignores.md: 日志忽略策略,指导如何过滤噪音日志
- log-search-guidance.md: AI Agent 搜索指导,优化搜索策略避免上下文溢出
维护方式: 直接编辑这些 Markdown 文件,工具会自动加载最新内容。详见 human_maintains/README.md。
📈 大规模日志分析
配置优化
系统已优化支持大规模日志分析:
- 默认日志数量: 从 10 条提升到 100 条
- 最大日志数量: 从 10,000 条提升到 50,000 条
- 分页大小: 从 100 条提升到 500 条
- AI 指导阈值: 从 20 条提升到 200 条
使用场景
快速探索 (10-50 条)
{
"project_alias": "neptune-cn-prod",
"time_range": "1h",
"query": "level:ERROR",
"max_logs": 50
}大规模分析 (1000+ 条)
{
"project_alias": "neptune-cn-prod",
"time_range": "1d",
"query": "level:ERROR",
"max_logs": 2000
}超大规模分析 (5000+ 条)
{
"project_alias": "neptune-cn-prod",
"time_range": "3d",
"query": "level:ERROR",
"max_logs": 10000
}📋 详细的大规模分析指南请查看 LARGE-SCALE-ANALYSIS.md
🎯 使用方法
在 Cursor 中使用
- 重启 Cursor
- 打开聊天面板
- 输入以下命令:
列出所有可用的 SLS 项目查询 neptune-cn-prod 最近 5 分钟的错误日志在 Claude Desktop 中使用
- 重启 Claude Desktop
- 在聊天中输入:
列出所有可用的 SLS 项目查询 neptune-cn-prod 最近 1 小时的日志,返回前 10 条HTTP API 使用
# 健康检查
curl http://127.0.0.1:3000/health
# 获取网络信息
npm run network-info
# 或
node scripts/get-network-info.js
# 自动启动 HTTP 服务器
npm run auto-start-http时间范围格式
- 分钟:
1m,5m,15m,30m - 小时:
1h,2h,4h,6h,12h - 天:
1d,2d,3d(最大 3 天)
查询语句示例
基本查询
*- 所有日志level: ERROR- 错误级别日志http_method: GET- GET 请求status: 200- 状态码 200
复合查询
level: ERROR AND status: 500- 错误且状态码 500content: "timeout"- 包含 "timeout" 的日志http_method: POST | select count(*)- 统计 POST 请求数量
自然语言查询
最近5分钟的错误日志→ 自动转换为"level": "ERROR"状态码 404 的请求→ 自动转换为"status": 404包含 timeout 的日志→ 自动转换为"content": "timeout"POST 方法的请求→ 自动转换为"http_method": "POST"响应时间超过 1000 毫秒的请求→ 自动转换为"response_time": >1000用户 12345 的日志→ 自动转换为"user_id": "12345"应用 app123 的错误日志→ 自动转换为"level": "ERROR" AND "app_id": "app123"
智能查询处理
- 语法修复: 自动修复常见的查询语法错误
- = → : (字段匹配) - =~ → ~ (正则匹配) - | where → | (管道语法) - gte(field, value) → field >= value (比较函数)
- 字段名处理: 自动为常用字段添加引号
- 通配符支持: 正确处理
*和?通配符 - 正则表达式: 支持
/pattern/flags格式 - URL 解码: 自动处理 URL 编码的字符串
工具说明
list-projects
功能: 列出所有可查询的项目
参数: 无
返回: 项目列表,包含别名、项目名、日志库名和端点
query-sls-logs
功能: 查询指定项目的 SLS 日志
参数:
project_alias(必填): 项目别名time_range(必填): 时间范围query(可选): 查询语句,默认为 "*"max_logs(可选): 最大返回日志数,默认 100
查询语句优先级:
- 用户显式输入 - 如果用户明确指定 SLS 查询语句,直接使用
- AI 生成 - 如果用户用自然语言描述,AI 生成合适的查询语句
- 默认查询 - 使用 "*" 查询所有日志
使用场景示例
1. 问题排查
用户: "neptune-cn-prod 最近 10 分钟有什么错误?"
AI: 调用 query-sls-logs
- project_alias: "neptune-cn-prod"
- time_range: "10m"
- query: "level: ERROR"2. 性能监控
用户: "查询 park-sdk-qa 最近 1 小时响应时间超过 5 秒的请求"
AI: 调用 query-sls-logs
- project_alias: "park-sdk-qa"
- time_range: "1h"
- query: "response_time > 5000"3. 自定义分析
用户: "用这个查询分析 neptune-cn-prod 的 API 调用:http_method: POST | select count(*) as count, avg(response_time) as avg_time group by status"
AI: 直接使用用户提供的查询语句🔧 故障排除
常见问题
- 服务器启动失败
# 检查端口占用
lsof -i :3000
# 使用不同端口
PORT=3001 npm run start:http- MCP 客户端连接失败
- 检查配置文件路径 - 确保 Node.js 已安装 - 重启客户端应用
- SLS 查询失败
- 检查 config.json 中的认证信息 - 确认项目别名正确 - 查看服务器日志
- 项目未找到
Error: Project 'xxx' not found. Use list-projects to see available projects.解决: 检查 config.json 中的项目别名配置
- 时间格式错误
Error: Invalid time_range format. Use: 1m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 12h, 1d, 2d, 3d解决: 使用支持的时间格式
- 认证失败
Error: InvalidAccessKeyId解决: 检查 config.json 中的 Access Key 配置
获取帮助
# 查看配置
node setup-mcp-config.js show
# 查看测试说明
node setup-mcp-config.js test
# 查看网络访问地址
node get-network-info.js开发说明
项目结构
sls-query-local/
├── README.md # 主文档
├── SLS-QUERY-SYNTAX.md # SLS 查询语法参考
├── mcp-server.js # MCP stdio 服务器
├── mcp-http-server.js # MCP HTTP 服务器
├── sls-client.js # SLS 客户端封装
├── query-utils.js # 智能查询处理工具
├── config.json # 项目配置(JSON 数组)
├── config.example.json # 配置示例
├── http-config.example.json # HTTP 配置示例
├── package.json # 项目配置
├── tools/ # 工具目录
│ ├── tool-manager.js # 工具管理器
│ ├── list-projects-tool.js # 列出项目工具
│ └── query-logs-tool.js # 查询日志工具
├── transports/ # 传输层实现
│ └── http-transport.js # HTTP 传输层
└── 辅助脚本文件...启动服务器
stdio 模式
npm start
# 或
node mcp-server.jsHTTP 模式
npm run start:http
# 或
node mcp-http-server.js🎉 完成!
现在你可以在 Cursor 或 Claude Desktop 中使用 SLS 日志查询功能了!
尝试输入:列出所有可用的 SLS 项目 来开始使用。
参考文档
- SLS 查询语法参考 - 详细的阿里云 SLS 查询语法和函数说明
- 时间戳功能使用示例 - 自定义时间戳功能的使用指南和最佳实践
许可证
MIT License
