一个提供无缝访问 SigNoz 可观察性数据的 Model Context Protocol (MCP) 服务器,通过 AI 助手和大语言模型实现。此服务器支持对指标、跟踪、日志、警报、仪表板和服务性能数据进行自然语言查询。
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ MCP 客户端 │───▶│ MCP 服务器 │───▶│ SigNoz API │
│ (AI 助手) │ │ (Go) │ │ (可观察性) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ 工具处理器 │
│ (HTTP 客户端) │
└──────────────────┘
使用兼容 MCP 的客户端如 Claude Desktop 和 Cursor 来使用此 mcp-server。
signoz-mcp-server 的二进制路径(例如:.../signoz-mcp-server/bin/signoz-mcp-server)。编辑配置。claude_desktop_config.json 添加如下配置,包含你的 SigNoz URL、API 密钥和指向 signoz-mcp-server 二进制的路径。{
"mcpServers": {
"signoz": {
"command": "/绝对路径/to/signoz-mcp-server/bin/signoz-mcp-server",
"args": [],
"env": {
"SIGNOZ_URL": "https://你的-signoz实例.com",
"SIGNOZ_API_KEY": "你的-api-key-here",
"LOG_LEVEL": "info"
}
}
}
}
signoz 服务器,并且其工具变得可用。注意事项:
command 路径为你实际的二进制位置。选项 A — 图形界面:
+ 新 MCP 服务器选项 B — 项目配置文件:
在项目根目录创建 .cursor/mcp.json:
对于两种选项都使用相同的 JSON 结构
{
"mcpServers": {
"signoz": {
"command": "/绝对路径/to/signoz-mcp-server/bin/signoz-mcp-server",
"args": [],
"env": {
"SIGNOZ_URL": "https://你的-signoz实例.com",
"SIGNOZ_API_KEY": "你的-api-key-here",
"LOG_LEVEL": "info"
}
}
}
}
添加后,重启 Cursor 以使用 SigNoz 工具。
编辑配置。claude_desktop_config.json 添加如下配置,包含你的 SigNoz URL、API 密钥和指向 signoz-mcp-server 二进制的路径。{
"mcpServers": {
"signoz": {
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer 你的-api-key-here"
}
}
}
}
注意:你可以通过以下方式传递 SigNoz API 密钥:
SIGNOZ_API_KEY),或者Authorization 头中传递signoz 服务器,并且其工具变得可用。构建并运行 signoz-mcp-server 使用环境变量 - SIGNOZ_URL=signoz_url SIGNOZ_API_KEY=signoz_apikey TRANSPORT_MODE=http MCP_SERVER_PORT=8000 LOG_LEVEL=log_level ./signoz-mcp-server - 或使用 docker-compose
选项 A — 图形界面:
+ 新 MCP 服务器选项 B — 项目配置文件:
在项目根目录创建 .cursor/mcp.json:
对于两种选项都使用相同的 JSON 结构
{
"mcpServers": {
"signoz": {
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer signoz-api-key-here"
}
}
}
}
注意:你可以通过以下方式传递 SigNoz API 密钥:
SIGNOZ_API_KEY),或者Authorization 头中传递注意:默认情况下,服务器的日志级别设置为 info。如果你需要详细的调试信息,请在环境中设置 LOG_LEVEL=debug。对于生产用途,考虑使用 LOG_LEVEL=warn 以减少日志冗余。
signoz-mcp-server/
├── cmd/server/ # 主应用程序入口点
├── internal/
│ ├── client/ # SigNoz API 客户端
│ ├── config/ # 配置管理
│ ├── handler/tools/ # MCP 工具实现
│ ├── logger/ # 日志记录工具
│ └── mcp-server/ # MCP 服务器核心
├── go.mod # Go 模块依赖
├── Makefile # 构建自动化
└── README.md
# 克隆仓库
git clone https://github.com/SigNoz/signoz-mcp-server.git
cd signoz-mcp-server
# 构建二进制文件
make build
# 或直接使用 Go 构建
go build -o bin/signoz-mcp-server ./cmd/server/
设置以下环境变量:
export SIGNOZ_URL="https://你的-signoz实例.com"
export SIGNOZ_API_KEY="你的-api-key-here"
export LOG_LEVEL="info" # 可选:debug, info, error (默认:info)
在 SigNoz Cloud 中,SIGNOZ_URL 通常是 - https://ingest.<区域>.signoz.cloud
你可以在 SigNoz UI 中通过前往 设置 -> 工作区设置 -> API 密钥 获取 API 密钥
# 运行构建的二进制文件
./bin/signoz-mcp-server
internal/handler/tools/ 中实现internal/client/client.go 中添加方法MCP 服务器提供了可以通过自然语言使用的以下工具:
"显示所有可用指标"
"搜索与 CPU 相关的指标"
"列出所有活动警报"
"获取警报规则 ID abc123 的详细信息"
"显示警报规则 abc123 在过去 6 小时的历史"
"获取与警报 abc456 相关的日志"
"列出所有仪表板"
"显示主机指标仪表板的详细信息"
"列出过去 6 小时的所有服务"
"支付服务的顶级操作是什么?"
"列出所有保存的日志视图"
"显示支付服务在过去一小时的错误日志"
"搜索支付服务日志中的 '连接超时' 错误"
"获取严重程度为 FATAL 的错误日志"
"显示所有可用的跟踪字段"
"搜索苹果服务在过去一小时的跟踪"
"获取跟踪 ID ball123 的详细信息"
"检查随机服务跟踪中的错误模式"
"显示跟踪 xyz789 的跨度层级"
"查找过去 2 小时内带有错误的跟踪"
"给我这个跟踪的流程"
signoz_list_metric_keys列出 SigNoz 中所有可用的指标键。
signoz_search_metric_by_text通过文本搜索指标(使用 SigNoz 聚合属性自动完成)。
searchText(必需)- 要搜索的文本signoz_list_alerts列出 SigNoz 中所有活动的警报。
signoz_get_alert获取特定警报规则的详细信息。
ruleId(必需)- 警报规则 IDsignoz_list_dashboards列出所有仪表板的概要(名称、UUID、描述、标签)。
signoz_get_dashboard获取完整的仪表板配置。
uuid(必需)- 仪表板 UUIDsignoz_list_services列出指定时间范围内的所有服务。
timeRange(可选)- 时间范围,如 '2h'、'6h'、'2d'、'7d'start(可选)- 以纳秒为单位的开始时间(默认为 6 小时前)end(可选)- 以纳秒为单位的结束时间(默认为现在)signoz_get_service_top_operations获取特定服务的顶级操作。
service(必需)- 服务名称timeRange(可选)- 时间范围,如 '2h'、'6h'、'2d'、'7d'start(可选)- 以纳秒为单位的开始时间(默认为 6 小时前)end(可选)- 以纳秒为单位的结束时间(默认为现在)tags(可选)- 标签的 JSON 数组signoz_get_alert_history获取特定规则的警报历史时间线。
ruleId(必需)- 警报规则 IDtimeRange(可选)- 时间范围,如 '2h'、'6h'、'2d'、'7d'start(可选)- 以毫秒为单位的开始时间戳(默认为 6 小时前)end(可选)- 以毫秒为单位的结束时间戳(默认为现在)offset(可选)- 分页偏移量(默认:0)limit(可选)- 结果数量限制(默认:20)order(可选)- 排序顺序:'asc' 或 'desc'(默认:'asc')signoz_list_log_views列出 SigNoz 中所有已保存的日志视图。
signoz_get_log_view根据 ID 获取特定日志视图的完整详细信息。
viewId(必需)- 日志视图 IDsignoz_get_logs_for_alert自动获取与特定警报相关的日志。
alertId(必需)- 警报规则 IDtimeRange(可选)- 警报周围的时长(例如,'1h'、'30m'、'2h')- 默认:'1h'limit(可选)- 返回的最大日志数(默认:100)signoz_get_error_logs获取具有 ERROR 或 FATAL 严重性的日志。
timeRange(可选)- 时间范围,如 '2h'、'6h'、'2d'、'7d'start(可选)- 以毫秒为单位的开始时间(默认为 6 小时前)end(可选)- 以毫秒为单位的结束时间(默认为现在)service(可选)- 用于过滤的服务名称limit(可选)- 返回的最大日志数(默认:100)signoz_search_logs_by_service在特定服务的时间范围内搜索日志。
service(必需)- 要搜索日志的服务名称timeRange(可选)- 时间范围,如 '2h'、'6h'、'2d'、'7d'start(可选)- 以毫秒为单位的开始时间(默认为 6 小时前)end(可选)- 以毫秒为单位的结束时间(默认为现在)severity(可选)- 日志严重性过滤器(DEBUG、INFO、WARN、ERROR、FATAL)searchText(可选)- 要在日志主体中搜索的文本limit(可选)- 返回的最大日志数(默认:100)signoz_get_trace_field_values获取跟踪的可用字段值。
fieldName(必需)- 要获取值的字段名称(例如,'service.name'、'http.method')searchText(可选)- 用于过滤值的搜索文本signoz_search_traces_by_service搜索特定服务的跟踪。
service(必需)- 要搜索跟踪的服务名称timeRange(可选)- 时间范围,如 '2h'、'6h'、'2d'、'7d'start(可选)- 以毫秒为单位的开始时间(默认为 6 小时前)end(可选)- 以毫秒为单位的结束时间(默认为现在)operation(可选)- 用于过滤的操作名称error(可选)- 按错误状态过滤(true/false)minDuration(可选)- 最小持续时间(纳秒)maxDuration(可选)- 最大持续时间(纳秒)limit(可选)- 返回的最大跟踪数(默认:100)signoz_get_trace_details获取跟踪信息,包括所有跨度和元数据。
traceId(必需)- 要获取详细信息的跟踪 IDtimeRange(可选)- 时间范围,如 '2h'、'6h'、'2d'、'7d'start(可选)- 以毫秒为单位的开始时间(默认为 6 小时前)end(可选)- 以毫秒为单位的结束时间(默认为现在)includeSpans(可选)- 包含详细跨度信息(true/false,默认:true)signoz_get_trace_error_analysis分析跟踪中的错误模式。
timeRange