关于 SigNoz MCP Server
SigNoz MCP Server 将 AI 助手和大模型连接到 SigNoz 可观测性数据。它提供指标、追踪、日志、告警、仪表板和服务查询,并支持云端托管连接或自托管部署。
主要功能
- 01查询指标、追踪和日志
- 02访问告警与仪表板
- 03检查服务
- 04连接托管云端服务
- 05自托管 stdio 或 HTTP 模式
适用场景
- 01向 AI 助手查询服务指标
- 02调查追踪记录和日志
- 03通过 MCP 客户端查看告警与仪表板
MCP 相关
该服务通过工具向 MCP 客户端提供 SigNoz 可观测性数据,支持 stdio 或 HTTP。它可连接托管的 SigNoz Cloud 或自托管实例。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
SigNoz MCP 服务
一个 Model Context Protocol(MCP)服务,可通过 AI 助手和大模型无缝访问 SigNoz 可观测性数据。使用自然语言查询指标、追踪、日志、告警、仪表板和服务。
目录
连接到 SigNoz Cloud
将你的 AI 工具连接到 SigNoz Cloud 托管的 MCP 服务。无需安装;只需添加托管 MCP URL 并完成身份验证。
https://mcp.<region>.signoz.cloud/mcp
请确保选择与 SigNoz Cloud 账户相匹配的区域。使用错误的区域会导致身份验证失败。
可在 SigNoz 的 Settings → Ingestion 中查看区域,或参阅 SigNoz Cloud 区域参考。
一键安装链接
GitHub 在 README 渲染时无法可靠地将 cursor:// 和 vscode: 这类自定义协议链接显示为可点击链接。
请使用文档页面中的一键安装按钮:
你也可以使用本 README 中下方的手动配置示例。
Cursor
手动配置
将此配置添加到 .cursor/mcp.json:
{
"mcpServers": {
"signoz": {
"url": "https://mcp.<region>.signoz.cloud/mcp"
}
}
}
需要帮助?请参阅 Cursor MCP 文档。
VS Code / GitHub Copilot
手动配置
将此配置添加到 .vscode/mcp.json:
{
"servers": {
"signoz": {
"type": "http",
"url": "https://mcp.<region>.signoz.cloud/mcp"
}
}
}
需要帮助?请参阅 VS Code MCP 文档。
Claude Desktop
在 Claude Desktop 中将 SigNoz Cloud 添加为自定义连接器:
- 打开 Claude Desktop。
- 前往 Settings → Developer(或 Features,具体取决于你的版本)。
- 点击 Add Custom Connector 或 Add Remote MCP Server。
- 输入你的 SigNoz MCP URL:
https://mcp.<region>.signoz.cloud/mcp
出现提示时,完成身份验证流程。
Claude Code
运行此命令以添加托管的 SigNoz MCP 服务:
claude mcp add --scope user --transport http signoz https://mcp.<region>.signoz.cloud/mcp
配置 MCP 服务后,在终端中进行身份验证:
claude /mcp
选择 signoz 服务并完成身份验证流程。
OpenAI Codex
运行此命令以添加托管的 SigNoz MCP 服务:
codex mcp add signoz --url https://mcp.<region>.signoz.cloud/mcp
也可以将此配置添加到 config.toml:
[mcp_servers.signoz]
url = "https://mcp.<region>.signoz.cloud/mcp"
添加服务后,进行身份验证:
codex mcp login signoz
然后在 Codex 中运行 /mcp 以验证连接。
Grok Build
运行以下命令,添加托管的 SigNoz MCP 服务:
grok mcp add -t http signoz https://mcp.<region>.signoz.cloud/mcp
或者将此配置添加到 ~/.grok/config.toml:
[mcp_servers.signoz]
url = "https://mcp.<region>.signoz.cloud/mcp"
enabled = true
添加服务并不会完成身份验证。启动 Grok Build,运行 /mcps,选择 signoz 服务,然后在浏览器中完成 OAuth 流程:
grok
/mcps
配置文件中不会存储 API 密钥;OAuth 流程完成后,凭据会单独保存。
在 add 命令中使用 -s project,即可改为写入 ./.grok/config.toml,让该目录下的所有协作者共用此服务。
使用以下命令验证连接:
grok mcp list
grok mcp doctor
SigNoz Cloud 身份验证
将托管的 MCP URL 添加到客户端后,客户端会发起身份验证流程。系统会提示你输入:
- 你的 SigNoz 实例 URL(例如,
your-instance.signoz.cloud)。可以使用不带协议的 URL;路径、查询参数和片段会被忽略。 - 你的 API 密钥
在 SigNoz 的 设置 → API 密钥 中创建 API 密钥。只有 管理员 用户可以创建 API 密钥。
自托管安装
下载二进制文件(推荐)
从 GitHub Releases 下载最新的二进制文件:
# macOS (Apple Silicon)
curl -L https://github.com/SigNoz/signoz-mcp-server/releases/latest/download/signoz-mcp-server_darwin_arm64.tar.gz | tar xz
# macOS (Intel)
curl -L https://github.com/SigNoz/signoz-mcp-server/releases/latest/download/signoz-mcp-server_darwin_amd64.tar.gz | tar xz
# Linux (amd64)
curl -L https://github.com/SigNoz/signoz-mcp-server/releases/latest/download/signoz-mcp-server_linux_amd64.tar.gz | tar xz
这会在当前目录中解压出 signoz-mcp-server 二进制文件。将它移动到 PATH 中的某个位置,或记下它的绝对路径,以便填写下方的配置。
Go 安装
go install github.com/SigNoz/signoz-mcp-server/cmd/server@latest
二进制文件会以 server 的名称安装到 $GOPATH/bin/(默认为 $HOME/go/bin/server)。你可能需要重命名它:
mv "$(go env GOPATH)/bin/server" "$(go env GOPATH)/bin/signoz-mcp-server"
Docker
可从 Docker Hub 获取 Docker 镜像:
docker pull signoz/signoz-mcp-server:latest
以 HTTP 模式运行:
docker run -p 8000:8000 \
-e TRANSPORT_MODE=http \
-e MCP_SERVER_PORT=8000 \
-e SIGNOZ_URL=https://your-signoz-instance.com \
-e SIGNOZ_API_KEY=your-api-key \
signoz/signoz-mcp-server:latest
对于固定版本的部署,请使用特定版本标签(例如 v0.1.0),而不是 latest。
从源代码构建
git clone https://github.com/SigNoz/signoz-mcp-server.git
cd signoz-mcp-server
make build
二进制文件位于 ./bin/signoz-mcp-server。
连接到自托管的 SigNoz
前提条件
- 一个运行最新版本的 SigNoz 实例。每个服务版本都针对最新的 SigNoz 版本,不会针对旧版本进行测试;如有不兼容变更,请参阅 CHANGELOG.md。
- 一个 SigNoz API 密钥(在 SigNoz UI 中的“设置 → API 密钥”下)
signoz-mcp-server二进制文件(请参阅自托管安装)
Stdio 模式(Claude Desktop / Cursor / 任意 MCP 客户端)
将以下内容添加到 MCP 客户端配置(claude_desktop_config.json、.cursor/mcp.json 等)中。将 command 路径替换为 signoz-mcp-server 二进制文件的绝对路径:
{
"mcpServers": {
"signoz": {
"command": "/absolute/path/to/signoz-mcp-server",
"args": [],
"env": {
"SIGNOZ_URL": "https://your-signoz-instance.com",
"SIGNOZ_API_KEY": "your-api-key-here",
"LOG_LEVEL": "info"
}
}
}
}
HTTP 模式
HTTP 模式默认监听所有接口。当服务只应接受环回连接时,请设置 MCP_SERVER_HOST=127.0.0.1。
内存占用
服务器会将 SigNoz 文档搜索索引保留在内存中。对标题和标题层级启用词干提取,并使用一个标准分析的正文栏位后,在八次本地 Go 1.26 整包测试运行中,内嵌的 746 页索引占用了 28 至 36 MiB 的常驻堆内存。使用 64 页批次时,构建峰值比构建前的堆基线高出 97 至 134 MiB。这些是索引测量值,并非整个进程的 RSS 或容器内存保证;请求处理和刷新工作也会增加内存占用。
| 时机 | 索引内存行为 |
|---|---|
| 从内嵌语料构建启动索引(746 页) | 在测量运行中,最多比构建前的堆基线高出 134 MiB |
| 定时全量重建 | 构建新索引时旧索引仍在提供服务;尚未使用此配置重新测量合并峰值 |
| 定时刷新时有少量页面发生变化 | 将变更页面作为一个原子批次应用到实时索引;峰值取决于变更内容,尚未使用此配置重新测量 |
| 定时刷新时未发现页面变化 | 不执行索引操作;使用 If-None-Match 重新验证页面,未变化页面的请求会返回 304 |
定时刷新(默认每 6h 一次)会先将实时站点地图与已提供的站点地图进行比较;如果没有变化,则到此为止。否则,刷新会使用 If-None-Match 重新验证每个页面,并且只有至少一个页面的内容发生变化时才会更新索引。变更集涵盖的页面不超过总页数的四分之一时,会原地应用到实时索引;如果变更集更大、同一索引上的原地更新达到第 25 次,或强制刷新(默认每 24h 一次)发现内容变化,则会从头重建索引,同时压缩原地更新遗留的分段。全量重建使用 64 页批次。原地更新使用一个原子批次,大小受页面总数四分之一的阈值限制,而非全量构建的批次大小。
容器化 HTTP 部署建议:
- 将内存限制设为至少
512Mi,并在刷新和并发请求期间监控内存。测得的索引构建峰值最高比基线高出 134 MiB,常驻索引占用 28 至 36 MiB;重建时还会保留正在提供服务的索引。设置 Go 的GOMEMLIMIT是可选的:它可以更早回收垃圾,但无法缩小索引批次中的存活数据。 - 如果希望直接提供随版本发布的文档快照,而不执行任何刷新,请将
SIGNOZ_DOCS_REFRESH_INTERVAL=0和SIGNOZ_DOCS_FULL_REFRESH_INTERVAL=0都设为0。新的文档页面会在下次服务器升级时更新。只设置前者仍会保留每日强制刷新。 - 每次刷新都会记录
docs refresh starting,并以完成或失败日志结束,例如docs refresh no-op; sitemap unchanged、docs refresh found no page changes; index kept、docs refresh applied delta、docs refresh rebuilt index,或docs refresh failed/docs full refresh failed警告。刷新通常会在几分钟内完成。如果容器最后一条文档日志是docs refresh starting、docs refresh fetching pages或docs refresh rebuilding index,随后又重启,则很可能是在刷新过程中退出。
使用 OAuth(多租户 / 云端)
启动服务器:
TRANSPORT_MODE=http \
MCP_SERVER_PORT=8000 \
OAUTH_ENABLED=true \
OAUTH_TOKEN_SECRET=$(openssl rand -base64 32) \
OAUTH_ISSUER_URL=https://your-public-mcp-url.com \
./signoz-mcp-server
客户端配置只需提供 URL,无需密钥:
{
"mcpServers": {
"signoz": {
"url": "https://your-public-mcp-url.com/mcp"
}
}
}
客户端会自动发现 OAuth 端点,打开浏览器以获取凭据,并处理令牌交换。
不使用 OAuth(简单配置)
API 密钥和 SigNoz URL 只需在一个位置提供:服务器端或客户端。
选项 A — 在服务器端配置凭据(客户端配置更简单):
SIGNOZ_URL=https://your-signoz-instance.com \
SIGNOZ_API_KEY=your-api-key \
TRANSPORT_MODE=http \
MCP_SERVER_PORT=8000 \
./signoz-mcp-server
{
"mcpServers": {
"signoz": {
"url": "http://localhost:8000/mcp"
}
}
}
选项 B — 在客户端配置 API 密钥(服务器保存 URL,客户端发送密钥):
SIGNOZ_URL=https://your-signoz-instance.com \
TRANSPORT_MODE=http \
MCP_SERVER_PORT=8000 \
./signoz-mcp-server
{
"mcpServers": {
"signoz": {
"url": "http://localhost:8000/mcp",
"headers": {
"SIGNOZ-API-KEY": "your-api-key-here"
}
}
}
}
MCP 协议兼容性
SigNoz 使用官方 MCP Go SDK v1.8.0,并支持通过 HTTP 和 stdio 使用当前的两种生命周期模型:
| 协议时期 | 生命周期 |
|---|---|
2025-11-25 | 旧版客户端先调用 initialize,然后发送 notifications/initialized,再发送普通请求。 |
2026-07-28 | 客户端可以调用 server/discover,然后直接发送请求,并在每个请求的 _meta 中携带协议和客户端能力;无需 initialize 握手。 |
HTTP /mcp 端点无状态且无会话。MCP 消息使用 JSON POST 请求,成功响应使用 application/json;服务端不会发送或要求 Mcp-Session-Id。GET /mcp 和 DELETE /mcp 会返回 405 Method Not Allowed,因此部署无需粘性路由,也不需要旧版 GET 监听器或心跳检测。现有客户端配置无需更改。
stdio 输入的帧大小上限为 16 MiB。较大的请求应拆分为多个较小的调用。MCP_MAX_REQUEST_BYTES 仅控制 HTTP 请求体。
服务端有意不声明已弃用的日志记录能力。发现结果的排序不属于兼容性保证。对于未知工具、资源和提示词,服务端采用官方 SDK 的标准无效参数处理方式,而不是旧版实现特有的措辞或错误代码。
HTTP 探测端点
HTTP 模式提供无需身份验证的探测端点。新的 Kubernetes 部署应使用 /livez 作为 livenessProbe,使用 /readyz 作为 readinessProbe。
| 端点 | 用途 |
|---|---|
/livez | 浅层存活探测。当服务端进程能够响应 HTTP 请求时返回 200 OK。不会检查依赖项。 |
/readyz | 就绪探测。仅当 Pod 已准备好接收流量时返回 200 OK;目前要求文档索引已就绪。否则返回 503。 |
/healthz | 为保持向后兼容而保留的旧版/通用健康检查。它遵循与 /readyz 相同的严格状态;浅层存活探测请使用 /livez。 |
可以用它做什么?
"Show me all available metrics"
"What's the p99 latency for http_request_duration_seconds?"
"List all active alerts"
"Show me error logs for the paymentservice from the last hour"
"How many errors per service in the last hour?"
"Search traces for the checkout service from the last hour"
"Get details for trace ID abc123"
"Create a dashboard with CPU and memory widgets"
"How do I send Docker logs to SigNoz?"
可用工具
工具元数据: 每个工具都接受
searchContext。请原封不动地复制用户的完整原始请求,包括预检或确认上下文;该内容用于 MCP 可观测性,不会转发给 SigNoz API。
输入验证: 调用不会因架构不匹配而被拒绝。参数会根据每个工具声明的架构进行验证;即使调用不匹配,仍会尽力执行,成功结果中会附加确定性的
Input validation notice:,并在能够安全地从声明的架构推导时指出受影响的顶层参数。仅根节点的复杂不匹配会使用通用回退提示。不匹配也会计入mcp.tool.validation.mismatches指标。
上游错误: 上游 SigNoz 的 401 和 403 工具失败会携带稳定的结构化
code(UNAUTHORIZED或PERMISSION_DENIED)以及数值型status。可识别的 SigNoz 错误信封还可能包含有界的upstreamURL、upstreamSuggestions、upstreamDetails([{message, suggestions}])和upstreamRetry(以纳秒表示的{delay});相同的恢复指导也会出现在 Agent 可读文本中。对于无法识别的响应正文,会使用基于本地状态派生的带代码回退信息,而不是原始透传;授权失败仍会指出失败的工具和直接的恢复操作。这项仅针对错误的附加内容不会更改工具名称、架构或说明、成功载荷、资源或模板,也不会更改提示词。 | 工具 | 描述 | |------|-------------| |signoz_get_org_overview| 获取 SigNoz 部署的当前状态和整体情况,提供类型化投影,以及包含所有已报告统计字段的sourceStats| |signoz_list_metrics| 发现活跃指标名称和目录元数据 | |signoz_query_metrics| 查询已知指标的值、趋势、细分数据或公式 | |signoz_get_top_metrics| 返回按摄取样本量排名的前 100 个指标,并提供预计算百分比,用于成本和用量分析 | |signoz_check_metric_usage| 给定指标名称列表(每次调用最多 50 个),返回各指标被哪些仪表板和告警引用 | |signoz_check_metric_cardinality| 返回单个指标的标签/属性键、基数计数和样本值,并按基数从高到低排序 | |signoz_get_field_keys| 发现指标、追踪或日志的可用字段键 | |signoz_get_field_values| 获取某个字段键的可能值 | |signoz_list_alerts| 列出正在触发/已静默/已抑制的 Alertmanager 告警实例(不是规则定义) | |signoz_list_alert_rules| 列出已配置的告警规则摘要,包括未触发/正常和已禁用的规则 | |signoz_get_alert| 按id获取一条告警规则的完整定义 | |signoz_get_alert_history| 获取一条规则的触发历史或状态转换历史 | |signoz_create_alert| 创建 v2 直接路由/策略路由告警,或直接路由的 v1 异常告警 | |signoz_update_alert| 按id完整替换现有告警规则 | |signoz_delete_alert| 按 UUIDv7id永久删除已确认的告警规则 | |signoz_list_dashboards| 列出租户仪表板摘要并发现 UUID | |signoz_get_dashboard| 获取一个仪表板的完整布局、变量、面板和查询 | |signoz_create_dashboard| 创建自定义多面板仪表板 | |signoz_update_dashboard| 完整替换已获取的仪表板,同时保留未请求的字段 | |signoz_patch_dashboard| 应用部分 RFC 6902 JSON Patch,无需重新发送整个仪表板 | |signoz_delete_dashboard| 按id永久删除已确认的仪表板 | |signoz_import_dashboard| 从已知的精选模板路径创建仪表板 | |signoz_list_dashboard_templates| 搜索精选模板并发现导入路径 | |signoz_list_services| 列出指定时间范围内有追踪活动的 APM 服务 | |signoz_get_service_top_operations| 获取某个被追踪服务的操作排名 | |signoz_list_views| 列出已保存的 Explorer 视图(适用于追踪/日志/指标/Cost Meter)并发现 UUID | |signoz_get_view| 按id获取一个已保存 Explorer 视图的完整定义 | |signoz_search_docs| 未选定确切页面时,查找排名靠前的官方文档匹配项 | |signoz_fetch_doc| 以 Markdown 格式获取一个已知的官方文档页面或标题 | |signoz_create_view| 保存一份可重复使用的 Explorer 查询规范 | |signoz_update_view| 完整替换已获取的已保存视图,同时保留未请求的字段 | |signoz_delete_view| 按id永久删除已确认的已保存视图 | |signoz_aggregate_logs| 汇总日志统计数据,并按分组或前 N 项进行细分 | |signoz_search_logs| 返回符合筛选条件的单条日志记录 | |signoz_aggregate_traces| 汇总跨度统计数据,并按分组或前 N 项进行细分 | |signoz_search_traces| 返回单条跨度行或发现追踪 ID | |signoz_get_trace_details| 获取一个已知追踪的所有跨度和层级结构 | |signoz_execute_builder_query| 执行专用工具无法表达的 Query Builder v5 请求 | |signoz_list_notification_channels| 列出通道 ID、名称和显示名称,不包含提供方设置 | |signoz_get_notification_channel| 按 ID 获取某个通道的所有提供方专属设置 | |signoz_create_notification_channel| 创建通知通道 | |signoz_update_notification_channel| 完整替换已获取通道的配置 | |signoz_delete_notification_channel| 按 ID 永久删除已确认的通道 | 有关详细用法和示例,请参阅完整文档。
**资源深层链接:**资源读取工具(
signoz_list_dashboards、signoz_get_dashboard、signoz_list_alerts、signoz_list_alert_rules、signoz_get_alert、signoz_list_services、signoz_search_traces、signoz_get_trace_details)和仪表板写入工具(signoz_create_dashboard、signoz_update_dashboard、signoz_patch_dashboard、signoz_import_dashboard)会在请求携带 SigNoz 实例 URL 时包含webUrl字段,其中提供指向 SigNoz Web UI 中相应资源的绝对深层链接(对于signoz_search_traces,每个结果行都会提供)。MCP 服务会从每个 SigNoz 后端的global.external_url中获取浏览器基址。API 请求仍使用请求中的后端 URL。请参阅自托管 SigNoz 的浏览器链接。
Agent 路由指南
如果尚未选定确切的文档页面,请使用 signoz_search_docs 按主题查找,然后使用 signoz_fetch_doc 获取选定的页面或标题。对于租户遥测数据、告警状态、仪表板、已保存视图和通知渠道,请使用实时数据工具。
文档工具与其他 MCP 工具使用相同的身份验证路径。
可用资源
| 资源 | 在以下情况下读取 |
|---|---|
signoz://alert/instructions | 告警架构、字段、阈值、评估和通知工作流 |
signoz://alert/examples | SigNoz OpenAPI 规范中的告警负载(阈值、公式、PromQL、异常、分层路由、通知设置),以及 Cost Meter 预算示例 |
signoz://dashboard/instructions | 仪表板字段、变量、链接和布局 |
signoz://dashboard/widgets-instructions | 面板选项和特定查询指南 |
signoz://dashboard/widgets-examples | 面板示例和验证模式 |
signoz://dashboard/list-filter-guide | signoz_list_dashboards 过滤器 DSL:语法、各键运算符和示例 |
signoz://dashboard/patch-instructions | signoz_patch_dashboard JSON Patch 配方和精确路径(添加/编辑/移动/移除面板、查询、变量) |
signoz://dashboard/examples | SigNoz OpenAPI 规范中的仪表板负载:创建请求体、完整替换内容和 JSON Patch 数组 |
signoz://dashboard/query-builder-example | 仪表板 Query Builder 聚合、过滤器、图例和函数 |
signoz://promql/instructions | PromQL 小组件或告警,尤其是带点号的 OTel 指标名称 |
signoz://dashboard/clickhouse-schema-for-logs | 用于仪表板 SQL 的捆绑日志架构快照 |
signoz://dashboard/clickhouse-logs-example | 原始 ClickHouse 日志小组件模式 |
signoz://dashboard/clickhouse-schema-for-metrics | 用于仪表板 SQL 的捆绑指标架构快照 |
signoz://dashboard/clickhouse-metrics-example | 原始 ClickHouse 指标小组件模式 |
signoz://dashboard/clickhouse-schema-for-traces | 用于仪表板 SQL 的捆绑追踪架构快照 |
signoz://dashboard/clickhouse-traces-example | 原始 ClickHouse 追踪小组件模式 |
signoz://logs/query-builder-guide | Logs Query Builder v5 JSON 或不熟悉的日志字段 |
signoz://traces/query-builder-guide | Traces Query Builder v5 JSON 或不熟悉的追踪字段 |
signoz://metrics-aggregation-guide | 指标聚合、公式、分组、限制和 Cost Meter 查询 |
signoz://query-builder/examples | SigNoz OpenAPI 规范中 signoz_execute_builder_query 各查询类型和请求类型对应的 query_range 请求 |
signoz://notification-channel/examples | 每种通知渠道类型、其 config.spec 字段,以及每种类型的完整负载示例 |
signoz://view/instructions | 已保存视图字段、v2 类型化规范以及先读取再替换的工作流 |
signoz://view/examples | SigNoz OpenAPI 规范中的已保存视图负载,涵盖日志、追踪、指标和 Cost Meter,以及替换请求体 |
signoz://docs/sitemap | 已索引的官方文档目录和页面 URL |
资源模板迁移
实时的 signoz://dashboard/{id}/summary 和 signoz://alert/{id}/summary
资源模板已停用。resources/templates/list 现在会返回空目录。获取仪表板定义时,请使用
signoz_get_dashboard。要获取原先的告警摘要,请调用 signoz_get_alert,然后调用
signoz_get_alert_history;不指定时间范围即可使用相同的六小时窗口,并设置
limit: 10 和 order: "desc",以获取最接近的历史结果。
参数参考
#### `signoz_get_org_overview`在深入查看具体资源之前,获取 SigNoz 部署的当前状态和整体情况。data.sourceStats 是权威且完整的扁平数据集合,包含部署统计端点报告的所有键和值,包括当前字段和未来字段。类型化便捷投影涵盖遥测数据的新鲜度和数量、基础设施状况、仪表板、告警规则和运行时、通知渠道、已保存视图、日志管道、云集成、用户、身份验证、服务账号、角色、许可和配置。
- 参数:无任务参数;与每个工具一样,它接受非必需的
searchContext,用于 MCP 可观测性。 - 权威数据源:
sourceStats会保留从上游data对象成功解码的每个条目及其原始点分隔键。可使用分组字段便于解读;需要精确了解后端覆盖范围或查询新引入的字段时,则使用sourceStats。计数是部署范围的汇总;如需精确清单,请使用signoz_list_dashboards、signoz_list_alert_rules、signoz_list_notification_channels或signoz_list_views;查询指标名称请使用signoz_list_metrics;查询当前告警实例请使用signoz_list_alerts;查询时间范围内或按服务划分的数据,请使用signoz_search_logs、signoz_search_traces或signoz_query_metrics。 - 缺失字段:
sourceStats中不存在的键表示上游采集器未报告该字段,不得将其解读为零。如果某个采集器失败,端点可能会返回部分数据,但 HTTP 状态码仍为 200。在类型化投影中,分组总数缺失时会产生available: false;报告值为零时则会产生available: true。预期字段缺失或无效时,会设置metadata.projectionPartial,并在incompleteGroups中添加条目,其中包含受影响的输出路径、原因、后续操作,以及适用时的精确回退工具。无效的投影值仍会原样保留在sourceStats中,并列入invalidProjectionFields。 - 云集成的完整性:
cloudIntegrations.sourceAvailability会报告当前 AWS/Azure 提供商计数是否均已报告。每个提供商都有各自的dataAvailable;缺失的提供商计数绝不会被转换为零。如果两个提供商均未报告,源数据可用性为unavailable,但不会设置整体metadata.projectionPartial;这可能意味着云集成不受支持或受版本限制,也可能是两个提供商的查询均失败,因此不要将其解读为“未配置云集成”。如果仅报告一个提供商,源数据可用性为partial,并会为缺失的提供商提供非递归恢复指引。connectedAccounts表示未移除、具有账号 ID 且至少收到过一次 Agent 报告的账号,并不代表近期有签到记录,也不能证明集成服务已启用。 - 投影元数据:
reportedStatCount是sourceStats中权威条目的数量;projectedStatCount统计也由类型化分组表示的条目;unprojectedStatCount统计仅在sourceStats中可用的条目,包括未来字段。projectionPartial、incompleteGroups和invalidProjectionFields仅描述类型化投影的缺失情况;它们不表示sourceStats中的数据已被删除,也不代表整个端点数据完整。
signoz_list_metrics
发现指标名称和目录元数据,例如类型、暂时性、单位和单调性。查询数值或趋势请使用 signoz_query_metrics。此列表有数量上限,但不支持偏移分页。
- 参数:
searchText(可选)- 按名称子字符串筛选指标(例如,'cpu'、'memory')limit(可选)- 返回的指标数量上限(默认值:50)timeRange(可选)- 相对时间范围:30m、1h、6h、24h、7d(默认值:1h;同时提供start和end时会忽略)start/end(可选)- Unix 毫秒时间戳。同时提供两者时,会覆盖timeRange。source(可选)- 数据源筛选条件。使用"meter"列出 Cost Meter 指标,即 SigNoz 计量的用量/计费指标(目前为遥测数据摄取量);省略则使用默认指标存储- 完整性说明:响应会附加一条说明,报告
hasMore(根据returnedRows == limit推断),避免将被limit截断的列表误认为完整列表;可使用searchText缩小范围以获得更具体的结果
signoz_query_metrics
查询已知指标的数值、趋势、细分数据或公式。此工具会应用适合指标的默认值,并自动获取省略的元数据;已知 metricName 时可直接调用。只有在发现名称或查看目录元数据时,才使用 signoz_list_metrics。
- 参数:
metricName(必需)- 要查询的指标名称metricType(可选)- gauge、sum、histogram、exponential_histogram(缺省时自动获取)isMonotonic(可选)- 布尔值(或字符串"true"/"false");缺省时自动获取。无效值会被拒绝,不会被静默视为 falsetemporality(可选)- cumulative、delta、unspecified(缺省时自动获取)timeAggregation(可选)- 时间聚合(根据类型自动设置默认值)spaceAggregation(可选)- 跨维度聚合(根据类型自动设置默认值)groupBy(可选)- 以逗号分隔的字段名称或数组。对于k8s.*、container.*、host.*、cloud.*、deployment.*、process.*、service.*、telemetry.*和os.*,会推断为资源上下文;其他名称使用属性上下文filter(可选)- 筛选表达式timeRange(可选)- 相对时间范围<number><unit>,其中单位为m/h/d(例如,'30m'、'1h'、'6h'、'7d';默认值:'1h';同时提供start和end时会忽略)start/end(可选)- Unix 毫秒时间戳。同时提供两者时,会覆盖timeRange。stepInterval(可选)- 步长,单位为秒(省略时自动计算)requestType(可选)- 响应格式。枚举值:time_series(默认值)、scalar。不支持的值会被拒绝。reduceTo(可选)- 用于标量:sum、count、avg、min、max、last、medianformula(可选)- 对命名查询执行的表达式(例如,"A / B * 100")formulaQueries(可选)- 公式所需的其他命名指标查询数组或 JSON 编码的数组字符串。每个对象支持name、metricName、metricType、isMonotonic、temporality、timeAggregation、spaceAggregation、groupBy和filter;name和metricName为必需项。source(可选)- 数据源筛选条件。使用"meter"查询 Cost Meter 数据;省略则使用默认指标存储- 结果上限:独立生成的指标查询和公式结果使用
limit: 100,并按__result desc排序。由于组件数量上限会在公式计算前应用,因此每个供公式使用的查询都采用limit: 10000,避免相互独立的前 100 条输入遗漏高比率分组。响应中的决策说明会报告这两种上限。若公式输入的基数可能超过 10000,请缩小筛选或分组范围。 - 未找到键的错误:筛选条件引用了工作区指标元数据中不存在的键时会失败;错误文本会提供恢复指导,结构化错误内容中还会包含机器可读的
missingKeys数组。
signoz_get_top_metrics
按摄取的样本量排名,返回排名前 100 的指标及预先计算的百分比。使用此工具可以识别哪些指标带来了最多的摄取量和成本。封装了 POST /api/v2/metrics/treemap。响应字段:metricName、percentage(占总样本量的比例)、totalValue(样本绝对数量)。
- 参数:
timeRange(可选)- 相对时间范围<number><unit>,其中单位为m/h/d(例如 '1h'、'24h'、'3d'、'7d'、'30d';默认值:'7d';如果同时提供start和end,则忽略此参数)。从 7d 开始;如果查询超时,则依次使用 3d、24h 重试start/end(可选)- Unix 毫秒时间戳。如果同时提供,则覆盖timeRange- 完整性说明:按摄取样本量固定返回排名前 100 的结果;响应会附加一条说明标记列表是否已达到上限并被截断(
hasMore)
signoz_check_metric_usage
给定一组指标名称,返回引用了每个指标的仪表板和告警。针对每个指标封装 /api/v3/metrics/dashboards?metricName=... 和 /api/v2/metrics/alerts?metricName=...。
- 参数:
metricNames(必填)- 要检查的指标名称字符串数组(每次调用最多 50 个)。示例:["system.disk.io", "k8s.node.condition"]。若列表更长,请拆分为每批 50 个并合并结果。
- 响应:针对每个指标,
dashboards(引用该指标的仪表板名称列表)、alerts(引用该指标的告警名称列表)、error(非空表示查询失败;此时不要将该指标视为未使用) - 限制:每次调用最多 50 个指标;整体超时为 30 秒(超时后返回部分结果)
signoz_check_metric_cardinality
返回单个指标的标签/属性键及其基数计数和样本值,并按基数从高到低排序。样本有助于区分 UUID 等无界值和状态代码等有界维度。此工具不会显示该指标是否正在使用;建议移除前请先调用 signoz_check_metric_usage。
- 参数:
metricName(必填)- 要检查的指标名称。示例:k8s.container.memory_limittimeRange(可选)- 相对时间范围<number><unit>,其中单位为m/h/d(例如 '30m'、'1h'、'6h'、'24h'、'3d'、'7d';默认值:'7d';如果同时提供start和end,则忽略此参数)start/end(可选)- Unix 毫秒时间戳。如果同时提供,则覆盖timeRange
signoz_list_alerts
列出 Alertmanager 中当前正在触发/已静默/已抑制的告警实例,而非规则定义。要查看已配置的规则,请使用 signoz_list_alert_rules;要查看某条完整规则定义,请使用带有 id 的 signoz_get_alert;要查看状态时间线,请使用 signoz_get_alert_history。
- 参数:
limit(可选)- 每页告警的最大数量(默认值:50)offset(可选)- 分页时跳过的结果数量(默认值:0)active/silenced/inhibited(可选)- 三态筛选条件。接受布尔值(或字符串"true"/"false")。省略时采用后端默认值(包含所有状态)。无效值会被拒绝,而非静默丢弃filter(可选)- 以逗号分隔的告警标签比较条件,支持=、!=、=~(正则表达式)或!~(负向正则表达式),例如alertname="HighCPU",severity="critical"receiver(可选)- 用于按接收器名称筛选告警的正则表达式
signoz_list_alert_rules
列出来自 GET /api/v2/rules 的已配置告警规则摘要,包括未触发/状态为 OK 的规则和已禁用的规则。要查看某条完整定义,请使用 signoz_get_alert;要查看当前 Alertmanager 实例,请使用 signoz_list_alerts。
- 参数:
limit(可选)- 每页返回的规则最大数量(默认值:50,最大值:1000;超出时会限制为最大值)offset(可选)- 分页时跳过的规则数量(默认值:0)
signoz_get_alert
获取一条告警规则的完整定义(GET /api/v2/rules/{id})。使用 signoz_list_alert_rules 查找 ID。调用 signoz_update_alert 前,仅当当前操作尚未获得完整的现行定义时才调用此工具;如果已有仍然有效的结果,请重复使用并保留未更改的字段。
- 参数:
id(必填)——告警规则 ID(支持 v2 的服务上为 UUIDv7)。 - 注意:响应结构取决于 SigNoz 服务版本。#10997 之后的服务会返回规范的
Rule类型,其中包含createdAt/updatedAt/createdBy/updatedBy;较早版本会返回GettableRule,其中包含createAt/updateAt/createBy/updateBy(不带「d」)。
signoz_list_dashboards
列出分页的租户仪表板摘要(名称、UUID、描述、标签、时间戳)。使用 signoz_get_dashboard 获取面板和查询定义;在确认某个仪表板不存在之前,请逐页将 offset 增加 limit,直到覆盖 total。
- 参数:
limit(默认值为 50)、offset(默认值为 0)——基于偏移量的分页filter(可选)——针对仪表板元数据(名称、描述、标签、创建者、时间戳、锁定状态)的服务端过滤 DSLsort(可选)——updated_at(默认值)、created_at或nameorder(可选)——asc或desc(默认值)
只有 source: user 的仪表板才能更新、打补丁或删除。source 不是服务端列表过滤列;需要时,请在多页结果中本地过滤返回的行。
filter DSL 是由 AND/OR/NOT 和括号连接的 key operator value 布尔表达式,也可以包含独立的自由文本词语(例如 name CONTAINS 'overview' AND locked = true)。完整语法、可过滤键及其运算符、值格式和示例请参阅 signoz://dashboard/list-filter-guide;列表响应还会在 reservedKeywords 中回显权威的保留键集合。
signoz_get_dashboard
获取一个已知租户仪表板的完整布局、变量、面板和查询。使用 signoz_list_dashboards 查找 UUID。
- 参数:
id(必填)——仪表板 UUID
signoz_create_dashboard
创建一个自定义多面板仪表板。适合使用精选模板时,请使用 signoz_import_dashboard;要保存一条 Explorer 查询,请使用 signoz_create_view。构建负载前,请阅读 signoz://dashboard/instructions、signoz://dashboard/widgets-instructions 和 signoz://dashboard/widgets-examples。
- 参数:
schemaVersion(必填)——必须为"v6"name(DNS-1123 标签),或使用generateName: true从spec.display.name推导名称tags(必填)——键值标签数组(可以为空)spec(必填)——Perses spec:display、variables(数组)、panels(以面板 ID 为键的映射)、layouts(数组)
静态 Markdown 面板使用 signoz/TextPanel,并设置 queries: [],同时提供
plugin.spec.mode: "markdown"、text、presentation 和 headerOptions。
请包含该面板的布局引用。包含查询的面板仍需一个查询;Text 面板不需要执行查询试运行。组件示例和补丁说明涵盖这两种面板。面积图使用 signoz/AreaChartPanel 和一个 time_series 查询;visualization.stack(none、normal 或
percent)用于堆叠分组序列,chartAppearance.fillMode 可设为 solid 或
gradient。仪表板输入使用规范的 id;已更改的仪表板工具不接受旧版 uuid 输入。
signoz_import_dashboard
从 SigNoz/dashboards 仓库(main 分支)中托管的精选模板创建仪表板。服务会获取模板 JSON,并通过一次调用创建仪表板。
如果不知道相对模板路径,请先调用 signoz_list_dashboard_templates。请传入其返回的 path,而不是 URL 或绝对路径。
- 参数:
path(必填)——SigNoz/dashboards 仓库中的模板路径,例如hostmetrics/hostmetrics.json
signoz_list_dashboard_templates
搜索 SigNoz 内置的精选仪表板模板目录,并以 {"templates": [...], "total": N} 的形式返回匹配项,其中每个条目都包含 id、标题、路径、描述、类别和关键词。此工具不会列出租户中已创建的仪表板;如需列出,请使用 signoz_list_dashboards。
- 参数:
searchText(可选)– 与每个模板的 id、标题、路径、类别、描述和关键词进行不区分大小写的匹配;模板必须匹配所有单词,例如postgres或kubernetes pod。最多 2048 个字符。不填写则返回完整目录。
signoz_update_dashboard
完全替换现有仪表板。使用 signoz_get_dashboard 获取仪表板,从响应中取出 data 对象,仅将请求的更改合并到该对象中,然后在顶层发送该对象的字段,并保留所有其他字段。{status, data} 响应封装不能作为输入。对于已保存的 Explorer 查询,请使用 signoz_update_view。
- 参数:
id(必填)– 仪表板 id(也接受旧版uuid键)schemaVersion、name、tags、spec– 更新后的完整状态(请参阅该工具的 JSON Schema)
signoz_patch_dashboard
对仪表板应用 RFC 6902 JSON Patch:无需重新发送整个仪表板即可进行部分更新。对于有针对性的编辑(重命名、添加或编辑一个面板或查询、微调变量),优先使用此工具,而非 signoz_update_dashboard。请阅读 signoz://dashboard/patch-instructions,了解示例操作步骤和准确路径;特别是,添加面板需要两项操作(面板和网格项),否则面板不会显示。
- 参数:
id(必填)– 仪表板 id(也接受旧版uuid键)patch(必填)–{op, path, value}操作数组;路径是指向仪表板可提交结构的 JSON Pointer,例如/spec/display/name、/spec/panels/<panelId>、/spec/layouts/0/spec/items/-、/tags/-
signoz_list_services
列出指定时间范围内有跟踪活动的分页 APM 服务。未列出表示该时间段内没有跟踪活动,并不表示相同的 service.name 从未出现在日志中;如需获取日志值,请使用 signoz_get_field_values 并设置 signal="logs"。
- 参数:
timeRange(可选)- 相对时间范围<number><unit>,其中单位为m/h/d(例如 '30m'、'1h'、'6h'、'7d';默认最近 6 小时;如果同时提供start和end,则忽略此参数)start(可选)- 开始时间,单位为 unix 毫秒(默认 6 小时前)。end(可选)- 结束时间,单位为 unix 毫秒(默认当前时间)limit(可选)- 每页最多返回的服务数(默认:50,最大:1000;更高的值会被限制)offset(可选)- 分页时跳过的结果数量(默认:0)
signoz_get_service_top_operations
获取一个有跟踪记录的服务的内置操作表,按 p99 延迟排序,并列出每项操作的 p50、p95、p99、调用次数和错误次数。对于自定义聚合、分组、时间序列、跨服务比较或任意跟踪筛选,请使用 signoz_aggregate_traces。
- 参数:
service(必填)- 精确的跟踪服务名称,通常来自signoz_list_servicestimeRange(可选)- 相对时间范围<number><unit>,其中单位为m/h/d(例如 '30m'、'1h'、'6h'、'7d';默认最近 6 小时;如果同时提供start和end,则忽略此参数)start(可选)- 开始时间,单位为 unix 毫秒(默认 6 小时前)。end(可选)- 结束时间,单位为 unix 毫秒(默认当前时间)tags(可选)- 以字符串形式传递的 JSON 编码TagQueryParam数组,例如[{"key":"http.method","tagType":"SpanAttribute","operator":"In","stringValues":["GET"]}];不填写则不进行标签筛选
signoz_get_alert_history
获取某条已配置规则的触发或状态转换历史记录。默认查询最近 6 小时。使用 state 和 filter 缩小结果范围。获取下一页时,将 data.nextCursor 作为 cursor 传入,并重复使用原始筛选条件、时间范围和排序方式。
响应为 { "status": "success", "data": { "items": [...], "total": <n>, "nextCursor": "<opaque>" } };最后一页会省略 nextCursor。
- 参数:
id(必填)— 来自signoz_list_alert_rules的告警规则 IDtimeRange(可选)— 相对时间范围,格式为<number><unit>,其中单位为m/h/d(例如 '30m'、'1h'、'6h'、'7d';默认查询最近 6 小时;若同时提供start和end,则忽略此参数)start(可选)— Unix 毫秒时间戳的起始时间(默认为 6 小时前)。end(可选)— Unix 毫秒时间戳的结束时间(默认为当前时间)state(可选)— 按告警状态筛选:inactive、pending、recovering、firing、nodata或disabled(省略则包含所有状态转换)filter(可选)— 对时间线标签使用的 SigNoz 查询构建器表达式。使用AND、OR和括号组合条件;字符串使用单引号。示例:severity = 'critical' AND (team = 'payments' OR service.name = 'checkout')。要查找键,先不带筛选条件调用并检查data.items[].labels[].key.name。为保持兼容性,仍接受后端格式的filterExpression别名,但标准参数为filter。cursor(可选)— 不透明的续页游标。获取下一页时,重复使用原始时间范围、状态、筛选条件和排序方式。获取第一页时省略cursor。limit(可选)— 每页行数。默认值:20;最大值:10000(超过上限的值会被截断)。order(可选)— 排序顺序。枚举值:asc、desc(默认值:'asc')- 旧版
offset:不再支持;请改用返回的游标。 - 完整性说明:响应会追加一条说明,根据
data.nextCursor报告hasMore,并给出下一页的游标名称。
signoz_list_views
列出已保存的 Explorer 视图,或查找 Logs、Traces、Metrics 或 Cost Meter 页面中的某个视图 UUID。一个视图保存一份可重复使用的 Explorer 查询规范;它不是多面板仪表板。分页前先应用名称筛选,并在 pagination.hasMore 为 true 时继续使用 pagination.nextOffset。
- 参数:
source(可选)— 要筛选的 Explorer,例如traces、logs、metrics或meter(Cost Meter 是独立的 Explorer 页面);SigNoz 会验证该值。省略则列出所有 Explorer 中的视图name(可选)— 按视图名称进行部分匹配筛选(服务端执行)limit(可选)— 每页大小(默认值:50,最大值:1000;超过上限的值会被截断)offset(可选)— 要跳过的结果数量(默认值:0)
signoz_get_view
按 UUID 获取某个已保存 Explorer 视图的完整定义。调用 signoz_update_view 前先调用此工具;signoz_update_view 会完整替换该视图。
- 参数:
id(必填)— 已保存视图的 UUID
signoz_search_docs
搜索 SigNoz 官方文档,并根据产品、设置、插桩、配置、API、部署或故障排除问题,返回按相关性排序的页面、URL 和摘要。针对一个主题发送 2 到 6 个关键词,并保留用户原样输入的产品和技术名称;将包含多个意图的问题拆分为单独的调用。如果排名靠前的结果不相关,请用更少或不同的词重试。不要用于查询实时租户数据;如需所选结果的完整内容或指定的文档 URL,请使用 signoz_fetch_doc。
- 参数:
searchText(必填)- 针对一个主题的 2 到 6 个关键词,例如“Kubernetes pod logs”。保留用户原样输入的产品和技术名称。limit(可选)- 要返回的最大结果数,以字符串形式提供(默认值:10,最大值:25;也接受数值)。25 的上限是有意设置的:每个结果都会从进程内的文档索引中载入文档文本,因此更大的上限会增加此服务的常驻内存。section_slug(可选)- 精确的顶级文档分区筛选条件,例如setup、logs-management、apm-distributed-tracing、metrics、alerts、dashboards、signoz-apis、querying或collection-agents。缩小搜索范围时,可复用先前结果中的section_slug;未知的 slug 会返回零个结果。searchContext- 用户的原始问题
文档搜索遥测会通过 signoz_docs_searches_total 统计已执行的搜索,并记录
outcome=ok|error。只有成功的搜索才会有 result_count_bucket(0、1-4、
5-9 或 10+)。signoz_docs_search_top_score 仅会在成功且有结果的搜索中记录排名第一的命中结果的原始 Bleve 分数。
分数未经校准,并取决于查询词、权重和分析器设置;它们不是相关性概率或阈值。
搜索 span 会记录 mcp.docs.search_text(已执行的查询,截断至 256 个 Unicode
码位)、mcp.docs.section_slug 和 mcp.docs.result_count。成功且有结果的搜索
还会记录 mcp.docs.top_score。这些 span 属性会区分客户端的关键词查询与用户在 mcp.search_context 中的原始请求;查询文本不是指标属性。如果查询不符合 Bleve 查询字符串语法,搜索会丢弃该子句、继续进行文本匹配,并记录 mcp.docs.query_string_dropped=true。空查询或仅包含空格的查询仍会导致验证错误。
signoz_fetch_doc
获取一个已知的 SigNoz 官方文档页面的完整 Markdown 内容或指定标题。请先使用 signoz_search_docs 查找页面;可接受的输入为 https://signoz.io/docs/... URL 或 /docs/... 路径。
- 参数:
url(必填)- 文档页面的 URL 或路径heading(可选)- 标题锚点 ID 或标题文本searchContext- 用户的原始问题
signoz_create_view
保存一个可复用的 Explorer 查询规范。多面板仪表板请使用 signoz_create_dashboard。Cost Meter 视图使用 source="meter"、signal="metrics" 和 builder-spec source="meter"。
- 参数(v2 类型化结构):
name(可选)- 视图名称(DNS-1123 标签)。除非generateName为 true,否则必填generateName(可选)- 为 true 时,服务会根据spec.displayName生成name,且name必须为空source(必填)- 此视图所属的 Explorer,例如traces、logs、metrics或meter;SigNoz 会验证该值spec(必填)- 类型化视图内容:displayName、panelType、requestType、queries、selectedFields、displayschemaVersion(可选)- 始终为v2;省略时使用默认值
- 必需:编写任何负载前,请阅读两个 MCP 资源
signoz://view/instructions和signoz://view/examples。
signoz_update_view
完全替换现有的已保存 Explorer 视图。使用 signoz_get_view 获取视图,修改其返回的 data 对象,保留所有未要求更改的字段,并将完整对象作为 view 传入。上游在更新时会保持 name 不变;显示标签位于 spec.displayName 中。
- 参数:
id(必需)- 要替换的视图的 UUIDview(必需)- 完整的source/spec对(必需);移除name和服务器填充的字段
- 迁移:已弃用的扁平结构(
source和spec与id并列)会返回带代码的VALIDATION_FAILED错误,并指出view包装对象;请传入{"id": "<uuid>", "view": {"source": ..., "spec": ...}}。 - 资源规则:更改
source或spec时,请读取signoz://view/instructions和signoz://view/examples。如果原样传递获取到的正文,则跳过。先调用signoz_get_view;不完整的正文会清除未指定的字段。
signoz_delete_view
按 UUID 永久删除已确认的已保存 Explorer 视图。使用 signoz_list_views 查找 ID;删除仪表板请使用 signoz_delete_dashboard。
- 参数:
id(必需)- 已保存视图的 UUID
signoz_aggregate_logs
返回日志聚合统计信息(计数、速率、平均值、百分位数或分组/前 N 项明细),而非单条记录。查询日志行并检查消息时,请使用 signoz_search_logs。
- 参数:
aggregation(必需)- 聚合函数:count、count_distinct、avg、sum、min、max、p50、p75、p90、p95、p99、rateaggregateOn(可选)- 要聚合的字段(除 count 和 rate 外均必需)groupBy(可选)- 用于分组的逗号分隔字段(例如:'service.name, severity_text')filter(可选)- 使用 SigNoz 搜索语法的筛选表达式。使用 AND、OR 和括号组合条件。未知键会导致硬错误;有歧义的键默认归入资源上下文。日志键因工作区而异;只有在日志管道设置了service.name时,该字段才会存在。参见signoz://logs/query-builder-guideservice(可选)- 服务名称的快捷筛选器(添加service.name = '<value>';如果工作区的日志缺少该属性,则会报错key service.name not found)severity(可选)- 精确的severity_text;DEBUG、INFO、WARN、ERROR 和 FATAL 是常见示例,并非完整枚举。使用signoz_get_field_values(signal="logs", name="severity_text", fieldContext="log")发现可用值orderBy(可选)- 排序表达式和方向(例如:'count() desc')limit(可选)- 返回的最大分组数(默认值:100,最大值:10000;更高的值会被截断,以限制服务器内存使用)timeRange(可选)- 相对时间范围<number><unit>,其中单位为m/h/d(例如:'30m'、'1h'、'6h'、'24h'、'7d';默认值:'1h';若同时提供start和end,则忽略此参数)start/end(可选)- 开始/结束时间,单位为 Unix 毫秒。如果两者均已提供,则优先于timeRange。requestType(可选)-scalar(默认值;整个时间范围内的一个聚合值)或time_series(每个时间桶一个值)。不接受未知值。stepInterval(可选)-time_series模式下的时间桶大小,单位为秒。可接受数字或数字字符串(省略时由后端自动选择)- 时间序列排序说明:
limit会选择整个请求时间窗口内排名靠前的分组,而非分别按每个时间桶选择。如果短时序列可能因此被隐藏,请缩短时间窗口或调整limit。 - 未找到键的错误:筛选器引用了此工作区日志元数据中不存在的键时,错误文本会提供恢复指导,结构化错误内容中还会包含机器可读的
missingKeys数组。
signoz_search_logs
返回符合文本、服务、严重性或字段筛选条件的单条分页日志记录。对于计数、趋势或分组细分,请使用 signoz_aggregate_logs。
仅使用 searchText、service、severity、时间或分页参数的调用无需读取指南。只有在使用不熟悉的工作区字段编写 filter 之前,才需要读取 signoz://logs/query-builder-guide。
- 参数:
filter(可选)- 使用 SigNoz 搜索语法的筛选表达式。使用 AND、OR 和括号组合条件(例如,"(severity_text = 'ERROR' OR body CONTAINS 'panic') AND service.name = 'payment-svc'")。日志键因工作区而异;只有在日志流水线设置了service.name时,日志中才会包含该字段。请参阅signoz://logs/query-builder-guideservice(可选)- 要筛选的服务名称(添加service.name = '<value>';如果工作区的日志中没有该属性,则会报错key service.name not found)severity(可选)- 精确的severity_text;DEBUG、INFO、WARN、ERROR 和 FATAL 是常见示例,并非完整枚举值。使用signoz_get_field_values(signal="logs", name="severity_text", fieldContext="log")发现可用值searchText(可选)- 要查找的字面文本;会自动转义,并与filter通过 AND 组合searchScope(可选)-searchText的匹配范围:body(默认值,body CONTAINS)、attribute或resource(键和值),或all(不限定范围的search(),在较宽的时间范围内速度较慢)timeRange(可选)- 相对时间范围<number><unit>,其中单位为m/h/d(例如 '30m'、'1h'、'6h'、'24h'、'7d';默认值:'1h';如果同时提供start和end,则忽略此参数)start/end(可选)- 以 Unix 毫秒表示的开始/结束时间。如果同时提供两者,则会覆盖timeRange。limit(可选)- 返回的最大日志数(默认值:100,最大值:10000;超出上限的值会被截断;使用offset分页)offset(可选)- 分页偏移量(默认值:0)- 排序:生成的原始日志查询使用
timestamp desc,然后使用id desc,因此当多行具有相同时间戳时,偏移分页结果仍具有确定性。 - 完整性说明:响应会附加一条说明,报告
hasMore(根据returnedRows == limit推断)以及要获取的nextOffset,因此不会将被截断的页面误认为完整结果集 - 键不存在错误:如果筛选条件引用了此工作区日志元数据中不存在的键,错误文本会提供恢复指导,结构化错误内容中还会包含机器可读的
missingKeys数组
字段未知时,使用 filter: "search('timeout')"。
使用 search('checkout', body) 限定搜索范围,或通过 AND/OR/NOT 将该函数与字段
谓词组合。范围包括 body、attribute、resource 和 log。字段确定后,优先使用字段谓词。searchText 配合
searchScope 会为你构建这些谓词。表达式字面值中的反斜杠和撇号需要转义;显式筛选条件会直接传递,不会被改写。
相同的表达式也适用于日志聚合和已保存查询规范。
signoz_get_field_keys
发现可用于筛选或分组指标、追踪或日志的字段名称。此工具返回的是键,而非已观测到的值;选定键后,请使用 signoz_get_field_values。data.complete 为 false 表示 SigNoz 截断了键列表;请通过 searchText 或 fieldContext 缩小范围。
- 参数:
signal(必填)- 信号类型。枚举:metrics、traces、logssearchText(可选)- 按名称子字符串筛选字段键metricName(可选)- 按指标名称筛选(适用于metrics信号)fieldContext(可选)- 限定字段上下文。枚举:resource、attribute、scope、log/span/metric(固有列)、body(JSON 日志正文)。请使用attribute,不要使用旧版 Query Builder 上下文tag,SigNoz 在此处会忽略它。fieldDataType(可选)- 限定数据类型:string、bool、int64、float64、number。像[]string这样的数组形式会按其元素类型处理。source(可选)- 对于指标,使用meter获取 Cost Meter 字段;默认指标存储则省略
signoz_get_field_values
获取已知字段键的观测值。若键未知,请使用 signoz_get_field_keys;并确保 signal 和 fieldContext 与将使用该值的查询一致。data.complete 为 false 表示 SigNoz 截断了值列表;请通过 searchText 缩小范围。
- 参数:
signal(必填)- 信号类型。枚举:metrics、traces、logsname(必填)- 要获取值的字段键名称(例如,service.name、http.method)searchText(可选)- 按子字符串筛选值metricName(可选)- 按指标名称筛选(适用于metrics信号)fieldContext(可选)- 当同一键名存在于多个上下文时,限定查找的字段上下文(resource、attribute、scope、log/span/metric、body)。请使用attribute,不要使用旧版 Query Builder 上下文tag;对于tag,SigNoz 不会返回任何值。source(可选)- 对于指标,使用meter获取 Cost Meter 值;默认指标存储则省略
signoz_search_traces
返回与服务、操作、错误、耗时或字段筛选条件匹配的单条分页 span 行,并使用它们发现 trace ID。统计数据请使用 signoz_aggregate_traces;查询一个已知 trace 的详情请使用 signoz_get_trace_details。
- 参数:
filter(可选)- 使用 SigNoz 搜索语法的筛选表达式。使用 AND、OR 和括号组合条件(例如:"service.name = 'payment-svc' AND (has_error = true OR attribute.http.response.status_code >= 500)")。为保持向后兼容,仍接受旧版query,但规范参数为filter。请参阅signoz://traces/query-builder-guideservice(可选)- 用于筛选的服务名称operation(可选)- 用于筛选的操作/span 名称error(可选)- 按错误状态筛选。值为布尔值(或字符串"true"/"false")。无效值会被拒绝,而不会被静默忽略minDuration/maxDuration(可选)- span 耗时的最小值/最大值,单位为纳秒(例如,500000000表示 500 毫秒)timeRange(可选)- 相对时间范围,格式为<number><unit>,其中 unit 为m/h/d(例如,30m、1h、6h、24h、7d;默认值:1h;若同时提供start和end,则忽略此参数)start/end(可选)- 起始/结束时间,单位为 Unix 毫秒。若同时提供,则会覆盖timeRange。limit(可选)- 返回的 span 行数上限(默认值:100,最大值:10000;超过上限的值会被截断;使用offset分页)offset(可选)- 要跳过的 span 行数(默认值:0)selectFields(可选)- 每行需返回的额外字段,添加到默认字段中。接受字段名数组或逗号分隔的字符串,最多 50 个。字段名可以是 span 列(db_name)、资源属性(k8s.pod.name)或 span 属性(http.route);resource.、attribute.或span.前缀用于指定上下文。使用signoz_get_field_keys(signal="traces")发现字段名称- 默认字段:每行包含
timestamp、trace_id、span_id、parent_span_id、name、service.name、kind_string、duration_nano、has_error、status_code_string、status_message、response_status_code和http_method,以及任何selectFields。所有字段都是扁平行键;某字段未出现在某行中,表示该字段未被选中 - 排序:生成的原始 trace 查询使用
timestamp desc。 - 完整性说明:响应会附加一条说明,报告
hasMore(根据returnedRows == limit推断)以及下一次抓取所用的nextOffset,因此不会将截断的页面误认为完整结果集 - 输出说明:原始结果行键采用规范的 Query Builder 字段名称(例如
trace_id、span_id、duration_nano、has_error)。旧版调用方提供的筛选条件(如hasError)仍会传递给后端别名层,但新的响应解析器应读取规范的 snake_case 键。 - 键未找到错误:若筛选条件引用的键不存在于此工作区的 traces 元数据中,将返回错误;错误文本中包含恢复指导,结构化错误内容中还包含机器可读的
missingKeys数组
signoz_aggregate_traces
返回跨度的自定义聚合统计信息(计数、比率、延迟百分位数、分组/前 N 项明细或时间序列),而不是单独的行或完整的跟踪层级结构。若要查看某个跟踪服务按 p99 排名的内置操作表,请使用 signoz_get_service_top_operations。调用此工具前,请先阅读 signoz://traces/query-builder-guide。
- 参数:
aggregation(必填)- 聚合函数:count、count_distinct、avg、sum、min、max、p50、p75、p90、p95、p99、rateaggregateOn(可选)- 要聚合的字段(例如,'duration_nano')。除 count 和 rate 外,其他聚合均必填groupBy(可选)- 用逗号分隔的分组字段(例如,'service.name, name')filter(可选)- 使用 SigNoz 搜索语法的筛选表达式。使用 AND、OR 和括号组合条件。未知键会导致硬错误;有歧义的键默认采用资源上下文。请参阅signoz://traces/query-builder-guideservice(可选)- 服务名称的快捷筛选条件operation(可选)- 跨度/操作名称的快捷筛选条件error(可选)- 错误跨度的快捷筛选条件。接受布尔值(或字符串"true"/"false")。无效值会被拒绝,不会静默丢弃orderBy(可选)- 排序表达式和方向(例如,'avg(duration_nano) desc')limit(可选)- 返回的最大分组数(默认值:100,最大值:10000;超出时会截断,以限制服务端内存占用)timeRange(可选)- 相对时间范围<number><unit>,其中单位为m/h/d(例如,'30m'、'1h'、'6h'、'24h'、'7d';默认值:'1h';同时提供start和end时会忽略此参数)start/end(可选)- 开始/结束时间,单位为 Unix 毫秒。同时提供两者时,它们会覆盖timeRange。requestType(可选)-scalar(默认值;整个范围内的一个聚合值)或time_series(每个时间桶一个值)。不接受未知值。stepInterval(可选)-time_series模式下的时间桶大小,单位为秒。接受数字或数字字符串(省略时由后端自动选择)- 时间序列排名说明:limit 会选取整个请求时间窗口内的前 N 个分组,而不是独立选取每个时间桶的前 N 个分组。如果短暂出现的序列可能因此被隐藏,请缩小时间窗口或调整 limit。
- 未找到键时的错误:如果筛选条件引用的键不存在于此工作区的跟踪元数据中,错误文本会提供恢复指导,结构化错误内容中还会包含机器可读的
missingKeys数组
signoz_get_trace_details
对于已知的跟踪 ID,返回其跨度、元数据和层级结构。如果 ID 未知,请先使用 signoz_search_traces,并选择包含该跟踪的时间窗口;默认的最近 6 小时范围可能无法涵盖较早的跟踪。
- 参数:
traceId(必填)- 已知的跟踪 ID,通常通过signoz_search_traces查得timeRange(可选)- 相对时间范围<number><unit>,其中单位为m/h/d(例如,'30m'、'1h'、'6h'、'7d';默认为最近 6 小时;同时提供start和end时会忽略此参数)start(可选)- 开始时间,单位为 Unix 毫秒(默认为 6 小时前)。end(可选)- 结束时间,单位为 Unix 毫秒(默认为现在)includeSpans(可选)- 是否包含详细的跨度信息。接受布尔值(或字符串"true"/"false"),默认值:true
signoz_create_alert
通过 POST /api/v2/rules 在 SigNoz 中创建新的告警规则。
- 参数:符合 SigNoz 告警规则架构的 JSON 负载。
- 架构因
ruleType而异:threshold_rule/promql_rule→ v2alpha1(结构化的condition.thresholds、evaluation、notificationSettings)。anomaly_rule→ v1,仅限指标:顶层evalWindow/frequency、条件中的异常字段,以及直接位于顶层的preferredChannels。省略thresholds、evaluation、notificationSettings和schemaVersion;不支持策略路由。
- 通知路由:对于直接路由,仅当结果来自同一仍有效的已准备操作时,才复用完整分页的
signoz_list_notification_channels结果;否则调用该工具,并且仅在状态可能已更改时刷新。v2 的每个层级都需要一个与返回的displayName完全匹配的名称:SigNoz 会拒绝没有渠道的层级,也会拒绝名称不存在的渠道,并且顶层preferredChannels不参与 v2 路由。v1 异常规则使用直接位于顶层的preferredChannels。如果没有合适的渠道,询问用户,或提供signoz_create_notification_channel,并使用用户提供的配置;绝不要自动创建。已确认的 v2 策略路由可以省略层级渠道。 - 提示:仅当告警资源已在同一已准备操作中读取时才复用;否则读取
signoz://alert/instructions和signoz://alert/examples。必要时,为 PromQL 读取signoz://promql/instructions。
signoz_update_alert
通过 PUT /api/v2/rules/{id} 更新现有告警规则。这会完整替换规则:仅当结果来自同一仍有效的已准备操作时,才复用 signoz_get_alert、signoz://alert/instructions、signoz://alert/examples 和完整分页的 signoz_list_notification_channels 结果;否则读取或调用它们,并且仅在状态可能已更改时刷新,然后保留未更改的字段。直接 v2 路由的每个层级都需要一个与已列出的 displayName 完全匹配的名称;已确认的 v2 策略路由可以省略这些名称。v1 异常规则使用直接位于顶层的 preferredChannels,且不能使用策略路由。
- 参数:
id(必填)——要更新规则的 UUIDv7(从signoz_list_alert_rules/signoz_get_alert获取)。- 以及告警规则架构中的所有字段(结构与
signoz_create_alert相同)。
signoz_delete_alert
通过 DELETE /api/v2/rules/{id} 删除告警规则。此操作不可撤销:使用 signoz_list_alert_rules 查找 ID,并先确认确切的规则。如果这两个步骤都已完成,则直接调用删除工具,无需重复进行删除前的列表查询或获取操作。
- 参数:
id(必填)——要删除规则的 UUIDv7。服务器会对非 UUIDv7 值返回invalid_input。
signoz_delete_dashboard
按 ID 永久删除已确认的租户仪表盘。删除操作不可撤销;使用 signoz_list_dashboards 查找 UUID。对于已保存的 Explorer 视图,请使用 signoz_delete_view。
- 参数:
id(必填)——要删除的仪表盘 UUID
signoz_list_notification_channels
列出分页的 v2 渠道摘要(id、name、displayName、kind、时间戳)。
告警路由使用 displayName;name 是不可变的机器标识符。
结果不包含提供商设置和凭据。使用 signoz_get_notification_channel
获取完整配置,并遍历所有页面后再确认某个渠道不存在。
- 参数:
query搜索显示名称;kind按提供商类型筛选;sort为updated_at、created_at或name;order为asc或desc。limit默认为 20,上限为 200;offset默认为 0。 - 默认值:按更新时间从新到旧排序。响应包含筛选后的总数
和明确的分页元数据。当
pagination.hasMore为 true 时,继续使用pagination.nextOffset;pagination.limit表示实际生效的上限。
signoz_create_notification_channel
根据 config: {kind, spec} 创建通知渠道。创建渠道前先检查现有的
显示名称。
- 参数:必需提供
config。提供符合 DNS1123 规范的name,或使用generateName: true和displayName。如果未提供displayName,SigNoz 会将 显式提供的name设为默认值。创建后,这两个名称都不可更改。 警报路由引用的是displayName,而不是name。 - 提供方类型:
signoz://notification-channel/examples列出了固定 SigNoz 版本接受的所有类型、每种类型的config.spec字段,以及对应的示例载荷;该列表 由 SigNoz OpenAPI 规范通过make gen生成。SigNoz 会验证类型,拒绝时会列出 可接受的类型。对于未知或缺失的config.spec字段,SigNoz 也会拒绝并提供 准确的要求;对于重复名称,会返回already-exists。 - 解析通知:省略
config.spec.sendResolved时,会使用提供方的默认值。 Get 会返回其生效值;更新时请保留该值。 - 测试发送:
test默认为false。仅在确实需要发送测试通知时才设置test: true。测试失败不会撤销已创建的渠道;重试前请检查返回的状态。 写入后发生的授权错误会包含mutationCommitted: true和已知 ID,以便调用方进行 身份验证并检查现有渠道,而无需再次创建。
不发送测试通知的示例:
{
"name": "checkout-oncall",
"displayName": "Checkout on-call",
"config": {
"kind": "webhook",
"spec": {"url": "https://alerts.example.com/signoz", "sendResolved": true}
},
"test": false
}
signoz_update_notification_channel
使用 id 和完整的规范 config: {kind, spec} 对象,完整替换一个渠道的
config。先获取渠道,复制其 config,仅修改请求的字段,然后提交完整对象。
名称不可更改。保留所有未修改的设置和凭据,但不要回显机密。获取的 config
可直接写回;要取消设置可选字段,请将其省略,因为对于标题和消息等由模板支持的
字段,SigNoz 会拒绝空字符串。
test 默认为 false;显式设置为 true 会在更新后发送测试通知。
测试失败不会撤销更新。不要自动重放结果不确定的写入,也不要自动执行选择加入的测试。
signoz_get_notification_channel
获取一个渠道的规范 id、机器可读的 name、displayName、时间戳
和完整 config。config.spec 可能包含明文凭据;更新时可以使用,但不要显示或
记录机密。参数:id。
signoz_delete_notification_channel
通过 id 永久删除已确认的渠道。先解析并确认确切的渠道;如果这些步骤已完成,
则直接调用。若路由策略引用了该渠道,后端可能会拒绝删除。请传递该依赖错误,
并在重试前解除相关引用。
signoz_execute_builder_query
运行专用工具无法表达的 SigNoz Query Builder v5 请求,包括多查询请求、公式、PromQL 和 ClickHouse SQL。查询行数据时,优先使用 signoz_search_logs / signoz_search_traces;查询分组结果时,优先使用 signoz_aggregate_logs / signoz_aggregate_traces;查询常规指标时,优先使用 signoz_query_metrics。
- 参数:
query(必填)——完整的query_range请求。输入架构会使用 SigNoz OpenAPI 规范中的描述说明顶层字段(start、end、requestType、compositeQuery、variables、formatOptions、noCache);compositeQuery.queries中的查询封装对象则为开放对象,相关说明见指南和signoz://query-builder/examples。 - 查询类型:每个封装对象的
compositeQuery.queries[i].type用于选择规范形状:builder_query:特定信号的规范(日志/追踪/指标),包含过滤器、聚合、分组等。builder_formula:引用其他查询名称的公式表达式(例如A / B * 100)。promql:{name, query, disabled, step?, legend?}。OTel 指标的 PromQL 必须使用 Prometheus 3.x UTF-8 带引号选择器格式{"metric.name.with.dots"};详情请阅读signoz://promql/instructions资源。clickhouse_sql:{name, query, disabled, legend?}。
- Builder 结果边界:为确保编写的查询结果可预测,请在每个
builder_query和builder_formula中明确提供正数spec.limit和非空的 v5spec.order(不是仪表板/编辑器的orderBy)。如果省略、设为 null 或设为零,独立查询和公式结果的默认限制为100;被公式引用的 builder 查询默认限制为10000,因为基础查询的限制会在公式计算前应用。原始日志按timestamp desc, id desc排序;原始追踪按timestamp desc排序;指标标量/时间序列查询和公式按__result desc排序;日志/追踪标量/时间序列查询按主聚合降序排列。调用方提供的值会原样转发。插入默认值时,响应会附加一条决策说明。 - 验证:除插入的边界值外,请求会原样传递给 SigNoz,由 SigNoz 进行验证。
requestType没有默认值(raw、trace、time_series或scalar);start和end必须是 Unix 毫秒时间戳。 - 指南路由:日志请阅读
signoz://logs/query-builder-guide,追踪请阅读signoz://traces/query-builder-guide,指标/公式请阅读signoz://metrics-aggregation-guide,PromQL 请阅读signoz://promql/instructions。 - 时间序列排名注意事项:Top-N 分组按整个请求时间窗口进行排名。即使某个短暂峰值在一个时间桶中占主导地位,也可能被省略;遇到这种情况时,请缩短时间窗口或调整限制。
- 后端警告:后端返回的非致命警告(例如,存在歧义的键解析)会与原始响应一同作为说明呈现,并记录为 WARN 日志,这与搜索/聚合/query_metrics 工具的处理方式一致(此前会原样返回响应正文并丢弃警告)。
- 未找到键的错误:如果过滤器引用的键不在工作区中所查询信号的元数据内,操作会失败;错误文本会提供恢复指导,结构化错误内容中还会包含机器可读的
missingKeys数组。 - 文档:请参阅 SigNoz Query Builder v5 文档
环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
SIGNOZ_URL | SigNoz 实例 URL | 是(stdio);可选(使用 OAuth 的 http) |
SIGNOZ_API_KEY | SigNoz API 密钥(在 SigNoz UI 的 Settings → API Keys 中获取) | 是(stdio);可选(使用 OAuth 的 http) |
LOG_LEVEL | 日志级别:info(默认)、debug、warn、error | 否 |
TRANSPORT_MODE | MCP 传输模式:stdio(默认)或 http | 否 |
MCP_SERVER_HOST | HTTP 传输模式的主机/接口(默认:空,表示监听所有接口)。设置为 127.0.0.1 可仅允许环回访问。 | 否 |
MCP_SERVER_PORT | HTTP 传输模式的端口(默认:8000) | 否 |
MCP_MAX_REQUEST_BYTES | MCP HTTP 入站请求正文的最大字节数(默认:4194304 / 4 MiB)。限制单个超大请求占用的内存。 | 否 |
CLIENT_CACHE_SIZE | 多租户 HTTP 模式下缓存的租户客户端最大数量(默认:256) | 否 |
CLIENT_CACHE_TTL_MINUTES | 租户客户端缓存的有效时间(分钟,默认:30) | 否 |
SIGNOZ_DOCS_REFRESH_INTERVAL | 文档的计划增量刷新间隔(Go 时长,默认:6h)。设置为 0(或 off)可禁用。若要停止所有计划刷新并保持内嵌文档索引不变,还需将 SIGNOZ_DOCS_FULL_REFRESH_INTERVAL=0。参见 内存占用。 | 否 |
SIGNOZ_DOCS_FULL_REFRESH_INTERVAL | 文档的计划强制全量刷新间隔(Go 时长,默认:24h)。设置为 0(或 off)可仅禁用强制全量刷新。 | 否 |
OAUTH_ENABLED | 启用 OAuth 2.1 身份验证流程(true/false) | 否(默认:false) |
OAUTH_TOKEN_SECRET | OAuth 令牌的加密密钥(至少 32 字节,例如 openssl rand -base64 32) | OAUTH_ENABLED=true 时必填 |
OAUTH_ISSUER_URL | 此 MCP 服务的公开 URL(用于 OAuth 元数据发现) | OAUTH_ENABLED=true 时必填 |
OAUTH_ACCESS_TOKEN_TTL_MINUTES | 访问令牌有效时间(分钟,默认:60) | 否 |
OAUTH_REFRESH_TOKEN_TTL_MINUTES | 刷新令牌有效时间(分钟,默认:43200 / 30d) | 否 |
OAUTH_AUTH_CODE_TTL_SECONDS | 授权码有效时间(秒,默认:600 / 10min) | 否 |
SIGNOZ_CUSTOM_HEADERS | 添加到每个 API 请求的额外 HTTP 标头;当 SigNoz 位于需要身份验证的反向代理之后时很有用(例如 CF-Access-Client-Id:id.access,CF-Access-Client-Secret:secret)。格式:Key1:Value1,Key2:Value2 | 否 |
SIGNOZ_INSTANCE_URL_ALLOWLIST | 仅适用于多租户(http):以逗号分隔的允许列表,列出服务可代理到的 SigNoz 后端主机。条目可以是精确主机(signoz.example.com)或通配符(*.us.signoz.cloud,匹配以 .us.signoz.cloud 结尾的任何子域名);若条目中意外包含协议/端口/路径,会予以容忍并缩减为裸主机。设置后,不匹配的 SigNoz 实例 URL 会在每个入口处遭到拒绝:OAuth 设置表单和 X-SigNoz-URL 标头返回 HTTP 403,OAuth 令牌端点(包括现有刷新令牌)返回 invalid_grant,通过 OAuth 令牌发起的 /mcp 请求返回 403。所有这些情况都会递增带有 disallowed_signoz_url 标签的失败指标以供告警(不会按请求记录日志,以避免配置错误或循环请求的客户端造成噪声),拒绝消息会引导 SigNoz Cloud 用户前往其所在区域的 MCP URL(mcp.<region>.signoz.cloud),并附上文档链接。未设置或为空时允许任何主机。运维人员自己的 SIGNOZ_URL 不受此限制。 | 否 |
ANALYTICS_ENABLED | 启用产品分析(true/false;默认:false) | 否 |
SEGMENT_KEY | 仅在启用分析时使用的 Segment 写入密钥 | 否 |
OTEL_EXPORTER_OTLP_ENDPOINT | MCP 服务自身的跟踪和指标所用的 OTLP gRPC 端点。未配置 OTLP 端点/导出器时,内部遥测导出会被禁用。对于明文收集器,请使用 http://localhost:4317 这类 http:// 端点。 | 否 |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT | 跟踪专用的 OTLP gRPC 端点;对跟踪数据而言,会覆盖 OTEL_EXPORTER_OTLP_ENDPOINT。 | 否 |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT | 指标专用的 OTLP gRPC 端点;对指标而言,会覆盖 OTEL_EXPORTER_OTLP_ENDPOINT。 | 否 |
OTEL_TRACES_EXPORTER | 设置为 none,可在已配置 OTLP 端点时仍禁用内部跟踪导出。 | 否 |
OTEL_METRICS_EXPORTER | 设置为 none,可在已配置 OTLP 端点时仍禁用内部指标导出和运行时指标。 | 否 |
MCP 服务不会运行 OTLP 日志导出器;日志会以 JSON 格式写入 stderr。因此不会使用 OTEL_LOGS_EXPORTER。 |
自托管 SigNoz 的浏览器链接
注意: 在 SigNoz 服务上设置
global.external_url,使其指向用户在浏览器中打开的 URL。MCP 服务会从GET /api/v1/global/config读取此值,因此只需在一处配置实例 URL。
例如,将此环境变量添加到 SigNoz 部署中,然后重启 SigNoz:
SIGNOZ_GLOBAL_EXTERNAL__URL=https://observe.example.com
URL 前面有两个下划线。等效的 SigNoz YAML 配置如下:
global:
external_url: https://observe.example.com
将 MCP 服务上的 SIGNOZ_URL 设置为其可访问的 API 地址,例如 http://signoz:8080。如果部署使用了路径前缀,请根据 SigNoz 和代理路由的要求,将其包含在 API 地址中。在 SIGNOZ_URL 中配置后端路径:目前,通过 OAuth 或 X-SigNoz-URL 提供的每请求 URL 仅支持来源地址。
浏览器链接使用发现的 URL(包括已配置的基础路径),而 API 请求保留其目标地址和凭据。每个租户客户端会缓存发现结果 15 分钟。如果未设置外部 URL,则使用请求的 API URL;如果全局配置不可用或无效,则会记录警告,并在一分钟后重试发现。身份验证和权限错误会返回给客户端。
Claude Desktop 扩展
构建安装包
需要 Node.js。详情请参阅 Anthropic MCPB。
make bundle
安装
- 打开 Claude Desktop → 设置 → 开发者 → 编辑配置 → 添加 bundle.mcpb
- 选择
./bundle/bundle.mcpb - 输入
SIGNOZ_URL、SIGNOZ_API_KEY,以及可选的LOG_LEVEL - 重启 Claude Desktop
如需使用浏览器链接,请配置 SigNoz 的全局外部 URL。
端到端测试
tests/ 下的端到端测试套件会使用工作树构建的服务,针对由 foundry 配置的真实 SigNoz 实例运行,并通过 MCP HTTP 传输与其交互:
make test-e2e # cast SigNoz, run the suites, tear down
make test-e2e-reuse # rerun against the cached environment
需要 Docker、foundryctl、Go 和 uv。完整工作流请参阅 tests/README.md。
架构
有关请求流、组件交互和设计决策的详细概述,请参阅 docs/architecture.md。
贡献
有关开发工作流、MCP 变更所需的文档/清单同步以及 PR 检查清单,请参阅 CONTRIBUTING.md。
为可观测性社区倾情打造 ❤️
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。