mcpField
S
Spoor

Spoor

本地服务
telespoor.com数据与分析06 天前更新

关于 Spoor

Spoor 是面向 AI Agent 的开源 MCP 服务和 CLI,用于分析可观测性后端中的指标、日志与追踪变化,并归纳故障起点。它通过确定性分析返回排序后的简短发现,标注原因与连带症状,并附带证据链接。

主要功能

  1. 01跨指标、日志与追踪分析变化
  2. 02排序故障发现并归因起点
  3. 03区分故障原因与连带症状
  4. 04提供查询证据链接
  5. 05限制输出令牌预算
  6. 06脱敏文本并只读查询

适用场景

  1. 01调查微服务错误率突然升高
  2. 02定位分布式追踪中的故障起点
  3. 03区分新日志错误与既有错误
  4. 04汇总指定时间窗口的服务变化

MCP 相关

Spoor 向 MCP 客户端提供变化摘要、新错误、追踪差异和服务列表等工具。它连接 VictoriaMetrics、Prometheus、Loki、Tempo 或 New Relic 等可观测性后端,并支持通过 streamable HTTP 提供 MCP 服务。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"asinha07-spoor": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SPOOR_METRICS_TYPE",
"-e",
"SPOOR_LOGS_TYPE",
"-e",
"SPOOR_TRACES_TYPE",
"-e",
"SPOOR_METRICS_URL",
"-e",
"SPOOR_LOGS_URL",
"-e",
"SPOOR_TRACES_URL",
"-e",
"SPOOR_METRICS_TOKEN",
"-e",
"SPOOR_LOGS_TOKEN",
"-e",
"SPOOR_TRACES_TOKEN",
"-e",
"NEW_RELIC_ACCOUNT_ID",
"-e",
"NEW_RELIC_API_KEY",
"ghcr.io/asinha07/spoor:0.3.1"
],
"env": {
"SPOOR_METRICS_TYPE": "<SPOOR_METRICS_TYPE>",
"SPOOR_LOGS_TYPE": "<SPOOR_LOGS_TYPE>",
"SPOOR_TRACES_TYPE": "<SPOOR_TRACES_TYPE>",
"SPOOR_METRICS_URL": "<SPOOR_METRICS_URL>",
"SPOOR_LOGS_URL": "<SPOOR_LOGS_URL>",
"SPOOR_TRACES_URL": "<SPOOR_TRACES_URL>",
"SPOOR_METRICS_TOKEN": "<SPOOR_METRICS_TOKEN>",
"SPOOR_LOGS_TOKEN": "<SPOOR_LOGS_TOKEN>",
"SPOOR_TRACES_TOKEN": "<SPOOR_TRACES_TOKEN>",
"NEW_RELIC_ACCOUNT_ID": "<NEW_RELIC_ACCOUNT_ID>",
"NEW_RELIC_API_KEY": "<NEW_RELIC_API_KEY>"
}
}
}
}
启动命令docker run -i --rm -e SPOOR_METRICS_TYPE -e SPOOR_LOGS_TYPE -e SPOOR_TRACES_TYPE -e SPOOR_METRICS_URL -e SPOOR_LOGS_URL -e SPOOR_TRACES_URL -e SPOOR_METRICS_TOKEN -e SPOOR_LOGS_TOKEN -e SPOOR_TRACES_TOKEN -e NEW_RELIC_ACCOUNT_ID -e NEW_RELIC_API_KEY ghcr.io/asinha07/spoor:0.3.1
需要配置的环境变量
SPOOR_METRICS_TYPEBackend for metrics: victoriametrics (default), prometheus or newrelic
SPOOR_LOGS_TYPEBackend for logs: victorialogs (default), loki or newrelic
SPOOR_TRACES_TYPEBackend for traces: victoriatraces (default), tempo or newrelic
SPOOR_METRICS_URLMetrics backend URL (VictoriaMetrics or Prometheus) as seen from the container, e.g. http://host.docker.internal:8428
SPOOR_LOGS_URLLogs backend URL (VictoriaLogs or Loki) as seen from the container, e.g. http://host.docker.internal:9428
SPOOR_TRACES_URLTraces backend URL (VictoriaTraces or Tempo) as seen from the container, e.g. http://host.docker.internal:10428
SPOOR_METRICS_TOKEN密钥Bearer token for the metrics backend, if it requires one
SPOOR_LOGS_TOKEN密钥Bearer token for the logs backend, if it requires one
SPOOR_TRACES_TOKEN密钥Bearer token for the traces backend, if it requires one
NEW_RELIC_ACCOUNT_IDNew Relic account ID, for signals of type newrelic
NEW_RELIC_API_KEY密钥New Relic User API key (NRAK-...), for signals of type newrelic

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/asinha07/spoor:0.3.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Spoor

Spoor 用几百个 token 告诉 AI Agent,你的服务发生了什么变化,以及变化从哪里开始。

CI License asinha07/spoor MCP server

网站:telespoor.com

Spoor 是面向可观测性后端的开源 MCP 服务和命令行工具,支持 VictoriaMetrics 技术栈、Prometheus、Loki、Tempo 和 New Relic。出现故障时,Agent 会询问 Spoor:“过去 30 分钟发生了什么变化?” 随后会收到一份简短的排序结果,涵盖指标、日志和追踪,并将故障起始服务排在首位,同时标明其在其他服务中引发的连带影响。

Spoor(名词):动物留下的足迹或踪迹。Spoor 沿着故障在遥测数据中留下的踪迹,追溯到它的起点。

$ spoor what-changed --since 30m
{
  "summary": "11 change(s) in 3 services. Strongest: payment — Failures start here, in \"POST /charge\" (100% of 100 failed traces). Also: payment — Span \"POST /charge\" errors 0.2% → 43.7% (229 spans). … Errors not significantly up (not new) in: product-catalog, recommendation, ad.",
  "findings": [
    {"service": "payment",  "signal": "traces",  "kind": "error_origin",    "score": 0.99, "title": "Failures start here, in \"POST /charge\" (100% of 100 failed traces)"},
    {"service": "payment",  "signal": "logs",    "kind": "new_log_pattern", "score": 0.94, "title": "New error log pattern: \"charge failed: card processor returned <N> for order <N>\""},
    {"service": "payment",  "signal": "metrics", "kind": "error_rate_up",   "score": 0.92, "title": "Error rate up: 0.2% → 40.5%", "onset": "2026-10-16T09:50:00Z"},
    {"service": "checkout", "signal": "logs",    "kind": "spiking_log_pattern", "score": 0.74, "title": "Error log pattern spiking: \"call to payment.Charge failed with status <N>\" — originates in payment"}
  ],
  "coverage": {"metrics": "ok", "logs": "ok", "traces": "ok"}
}

发现结果会附带其背后查询的证据链接(token 预算允许时),方便人工一键核查 Agent 的工作。

为什么使用它

在微服务故障中,出问题的服务及其所有调用方都会亮起告警。只有原始查询工具的 Agent 必须自行决定查询什么、对照“正常”情况、翻阅结果,并判断哪个服务是原因、哪些只是受到连带影响。这会消耗工具调用和 token,而且往往会误判最显眼的症状,或将一直存在的错误归咎于故障。

Spoor 使用简单、确定性的 Go 代码完成这些工作,并将结论的依据交给 Agent:

  • 跨信号: 请求率、错误率、延迟、CPU、内存和消费者滞后;日志中的新增错误、激增错误及错误量;同一时间窗口内、相对于同一基线的每个跨度错误和延迟。
  • 专为真实日志打造: 仅 ID、数值、堆栈追踪或日志前缀不同的消息会被视为同一种错误;JSON 错误会根据其 message 和 code 字段解析;服务可以使用不同的级别字段,或将级别写在文本中;spoor doctor 会查找你的字段并写入配置。
  • 原因与连带影响: 追踪树会显示故障从何处开始,以及延迟增加的位置。仅受影响的调用方会被降级排序,并标记为 — originates in payment。
  • 明确指出持续存在的错误: 已经存在的错误会列在 steady_errors 中,并标注“不是新问题”,避免 Agent 将其误认为故障原因。
  • 限制输出: 每个工具都接受 budget_tokens(默认值为 800)。
  • 如实报告缺失数据: coverage 会说明后端是否故障或无数据、基线是否为空、错误筛选条件是否未匹配任何内容,或日志行是否缺少服务或级别字段。“没有变化”绝不会被用来代替“无法查看”。
  • 不使用内部大模型、只读、脱敏: 相同输入会产生相同输出;只会调用查询端点;所有文本字段在输出前都会清除电子邮件地址、令牌、IP 地址和生成的 ID。
评测结果

基准测试 会以无头模式运行 Claude Code,针对六个事件(五个故障和一个无故障对照)各测试五次:一次仅使用官方 VictoriaMetrics MCP 服务,另一次则额外加入 Spoor。 在 Claude Haiku 上,共进行了 60 次相互隔离的会话:

官方 Victoria MCP 服务+ Spoor
故障场景中正确定位根因19/2525/25
所有场景中答案正确(包括“没有问题”)23/3030/30
每次调查的工具调用数中位数2410
耗时中位数55 秒23 秒
总成本$0.60$0.19(−68%)

这些是合成事件,且只使用了一个小型模型,因此请将其视为第一项数据。

在真实生产日志上(约 25 个服务,格式混合,只读回放):摘要比其取代的原始证据缩小了 99.8%,候选项为 0 个,而 v0.1.1 有 4 个;摘要中的基线计数与独立查询结果完全一致。它并不比四条手写查询更快(28 秒 vs 26 秒),真实事件中的准确率尚未测量。

测试方法、各场景结果、生产回放和注意事项:docs/benchmark.md。

快速开始

需要 Go 1.25+、Docker 和 jq。约需五分钟。

git clone https://github.com/asinha07/spoor && cd spoor
make it-up          # empty VictoriaMetrics, VictoriaLogs, VictoriaTraces in Docker
make demo-data      # six synthetic incidents; ground truth in scenarios/out/
make build

T=scenarios/out/payment-failure.truth.json
./bin/spoor what-changed --since $(jq -r .since $T) --until $(jq -r .until $T) --pretty

将其连接到 Claude Code:

claude mcp add spoor \
  -e SPOOR_METRICS_URL=http://localhost:8428 \
  -e SPOOR_LOGS_URL=http://localhost:9428 \
  -e SPOOR_TRACES_URL=http://localhost:10428 \
  -- "$PWD/bin/spoor" serve

在 spoor 目录中运行(或添加 -s user 以在所有位置注册),然后询问 Claude:“商店里有东西出故障了。发生了什么变化?问题最初出现在哪里?”

在你自己的后端上,先运行 spoor doctor --since 15m:它会检查 Spoor 能看到什么,并提供配置建议。 其他客户端、仅使用 Grafana 的访问方式等内容:入门指南。

后端

每种信号通过 type: 选择后端,也可以混合使用:

指标日志追踪
VictoriaMetrics 技术栈VictoriaMetricsVictoriaLogsVictoriaTraces
Grafana 技术栈Prometheus、Mimir、ThanosLokiTempo
New Relic事务事件(NRQL)日志事件Span 事件
metrics: {type: prometheus, url: http://prometheus:9090}
logs:    {type: loki, url: http://loki:3100}
traces:  {type: tempo, url: http://tempo:3200}

设置方法及各后端的差异(Tempo 统计数据经过采样;New Relic 的 Span 变化需要与服务指标一致):后端。

工具

工具返回内容
what_changed汇总所有信号中的变化并排序,标注原因/回声归因;可查询单个服务或全部服务。建议从这里开始。
new_errors新出现或激增的错误日志模式,包含计数、首次出现时间和已脱敏示例。
trace_diff变慢或开始失败的 Span 名称,以及示例追踪 ID。
list_services时间窗口内的服务,以及每个服务有哪些信号数据。

输入:service、since、until、baseline(previous、1d、7d)、budget_tokens。 完整参考:docs/tools.md。

工作原理

flowchart LR
    Agent[AI agent / CLI] -->|MCP| S[Spoor]
    S -->|"PromQL / NRQL"| M[(VictoriaMetrics, Prometheus, New Relic)]
    S -->|"LogsQL / LogQL / NRQL"| L[(VictoriaLogs, Loki, New Relic)]
    S -->|"LogsQL / TraceQL / NRQL"| T[(VictoriaTraces, Tempo, New Relic)]
    S -->|"ranked digest ≤ budget"| Agent

对于一个时间窗口和基线(默认使用该窗口之前的六个窗口),Spoor 会使用稳健 z 分数为每个指标评分,使用 Poisson 检验比较错误日志模式,比较 Span 错误率和 p95,沿失败追踪遍历到每次故障开始的 Span,提高得到多个信号确认的变化的权重,并将结果裁剪到令牌预算以内。详情:架构 · 评分与归因。

为团队运行

spoor serve --http :8080 --auth-token … 会通过支持流式传输的 HTTP 提供 MCP,并使用 bearer-token 身份验证,同时提供 /healthz 和 Prometheus /metrics。可直接使用的加固版清单:

安全性、容量规划、监控和升级:生产环境指南。

在 OpenTelemetry Demo 上验证

在 OpenTelemetry Demo v3.1.0(约 20 个真实服务)上,50% 的支付失败被诊断为“payment:故障始于 charge”,checkout 和 frontend 错误被标记为“源自 payment”(732 个 token);adHighCpu 故障则被诊断为单一问题:“ad:CPU 从 0.07 升至 3.97 核”(192 个 token)。复现方法:deploy/demo/。

文档

快速入门安装、试用、连接 Agent
生产环境Kubernetes、Docker、systemd、安全、监控
后端VictoriaMetrics 技术栈、Prometheus、Loki、Tempo、New Relic
配置所有选项以及常见设置方案
工具输入和响应格式
架构 · 工作原理设计和评分
基准测试 · 对比为什么使用它,以及还有哪些选择
故障排除 · 常见问题遇到异常时的处理方法

状态和局限

早期版本(1.0 之前)。工具输出字段在次要版本间仍可能变化;请参阅变更日志。

  • 评分是在 VictoriaMetrics 技术栈上开发并进行基准测试的。Prometheus、Loki 和 Tempo 已通过针对真实容器的相同场景测试;New Relic 已在一个真实账户上检查。Tempo 统计数据采用抽样方式,只有在服务指标一致时才会报告 New Relic 的 span 变化;请参阅后端。
  • 归因故障原因及关联现象需要 traces;没有 traces 时,Spoor 仍会对指标和日志变化进行排序。
  • 每次读取的归因最多处理 50,000 行 span;在非常繁忙的系统中,trace 可能会被截断。
  • 基准测试使用作者编写的合成故障和一个模型;请将其视为初步数据点,并在依赖它之前,使用 bench/replay.py 重放你自己的历史故障。
  • 指标和 traces 按服务查询;对于大型系统,请在已知服务时传入 service。

更多信息请参阅 how-it-works.md。

路线图

后续工作:提高对带标签真实故障的准确度,支持“自上次部署以来”的时间窗口,添加 Datadog 和 Elasticsearch 后端,以及通过 TraceQL 指标获取精确的 Tempo 统计数据。完整清单以及明确不在范围内的内容: docs/roadmap.md。

参与贡献

欢迎提交问题和拉取请求。make test 只需要 Go;请参阅 CONTRIBUTING.md。 安全问题请参阅:SECURITY.md。

许可证

Apache-2.0。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。