Skip to content
sigiro

发送 OpenTelemetry,用 SQL 查询。

sigiro 存储你的链路、日志、指标和性能剖析数据。通过一个 HTTP API 用 SQL 查询:智能体走 CLI 和 MCP,人看仪表盘。

factory loop · five stages
检测, step 1 of 5

检测 · sigiro

$ curl -sS -X POST localhost:9999/v1/query --data-binary \

"SELECT count(*) AS failed_spans FROM sigiro_spans

WHERE service_name = 'checkout' AND status_code = 2

AND timestamp > CURRENT_TIMESTAMP - INTERVAL '30 minutes'"

[{ "failed_spans": 246 }]

诊断 · sigiro

$ curl -sS -X POST localhost:9999/v1/query --data-binary \

"SELECT span_name, count(*) AS failures FROM sigiro_spans

WHERE service_name = 'checkout' AND status_code = 2

AND timestamp > CURRENT_TIMESTAMP - INTERVAL '30 minutes'

GROUP BY span_name ORDER BY failures DESC LIMIT 5"

[{ "span_name": "POST /api/orders", "failures": 246 }]

修复 · 你的智能体

$ claude "checkout times out since 9f2c1ab"

read src/orders/upstream.ts

edit src/orders/upstream.ts +4 −1

test 42 passed

push fix: bound the orders upstream call at 5s

验证 · 你的流水线,用我们的证据

$ curl -sS -X POST localhost:9999/v1/query --data-binary \

"SELECT count(*) AS errors_last_5m FROM sigiro_spans

WHERE service_name = 'checkout' AND status_code = 2

AND timestamp > CURRENT_TIMESTAMP - INTERVAL '5 minutes'"

[{ "errors_last_5m": 0 }]

沉淀 · 你的记忆库

$ cat playbooks/checkout-upstream-timeout.md

## checkout · upstream timeout

observed 246 failed checkout spans in a 30-minute window

cause unbounded upstream call, shipped in 9f2c1ab

fix 5s deadline on the orders client

watch the same shape on any service calling orders

部署在你自己的服务器上就免费,sigiro 不会把任何数据发给我们。注册则使用托管测试版,遥测数据存放在我们运行的服务器上。

怎么用

四个步骤。 你依次完成接入、提问、关联和深入排查。

把 OpenTelemetry 导出器指向 sigiro,然后用 SQL 提问。下面每一步都是一次终端会话。

接入, step 1 of 4
接入1 of 4
$ curl -fsSL https://sigiro.com/install | sh
installed ~/.local/bin/sigiro
$ sigiro serve &
[1] 41802
listening on 4317, 4318, 9999
$ export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
$ export OTEL_SERVICE_NAME=checkout
$ npm start &
[1] 41823
checkout listening on :3000
$ sigiro status
ready · OTLP 4317 and 4318 · service checkout · 18,402 spans in 5 min
$

sigiro 使用标准 OTLP,监听标准端口。

$ curl -fsSL https://sigiro.com/install | sh
installed ~/.local/bin/sigiro

$ sigiro serve &
[1] 41802
listening on 4317, 4318, 9999

$ export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
$ export OTEL_SERVICE_NAME=checkout
$ npm start &
[1] 41823
checkout listening on :3000

$ sigiro status
ready · OTLP 4317 and 4318 · service checkout · 18,402 spans in 5 min

$ curl -sS -X POST localhost:9999/v1/query --data-binary \
    "SELECT span_name, count(*) AS calls FROM sigiro_spans
     WHERE service_name = 'checkout'
       AND timestamp > CURRENT_TIMESTAMP - INTERVAL '30 minutes'
     GROUP BY span_name ORDER BY calls DESC LIMIT 5"
[
  { "span_name": "POST /api/orders", "calls": 1284 },
  { "span_name": "GET /api/cart", "calls": 342 }
]

$ cat models.sql
SELECT s.span_attributes ->> 'gen_ai.request.model' AS model,
       count(DISTINCT s.span_id) AS calls, max(s.duration) AS slowest
FROM sigiro_spans s JOIN sigiro_logs l USING (trace_id)
WHERE s.service_name = 'checkout' AND l.severity_number >= 17
  AND s.timestamp > now() - INTERVAL '30 minutes'
GROUP BY model ORDER BY slowest DESC

$ curl -sS -X POST localhost:9999/v1/query \
    --data-binary "$(cat models.sql)"
MODEL           CALLS  SLOWEST
gpt-5.2-mini      246    30.0s
claude-haiku-4.6   31     2.1s

$ curl -sS -X POST localhost:9999/v1/query --data-binary \
    "SELECT trace_id, duration, status_message FROM sigiro_spans
     WHERE service_name = 'checkout' AND status_code = 2
       AND timestamp > CURRENT_TIMESTAMP - INTERVAL '30 minutes'
     ORDER BY timestamp DESC LIMIT 3"
[
  { "trace_id": "9f2c1ab4e77d", "duration": 30012,
    "status_message": "context deadline exceeded" },
  { "trace_id": "3b81fe0a2c56", "duration": 30004,
    "status_message": "context deadline exceeded" }
]

Start

install the CLI
curl -fsSL https://sigiro.com/install | sh

Installs a single binary to ~/.local/bin/sigiro. Reads the script first if you would rather: sigiro.com/install.

or give this to your agent
Install and run sigiro, the observability data layer, on this machine. Run: curl -fsSL https://sigiro.com/install | sh — then start it with: sigiro serve. It listens on 4317 and 4318 for OTLP and on 9999 for its HTTP API. Point this project’s OpenTelemetry exporter at http://localhost:4318. Then register `sigiro mcp` as a stdio MCP server (for Claude Code: claude mcp add sigiro -- sigiro mcp) so you can query the telemetry directly with its list_services and run_query tools.

Paste into Claude Code, Codex, Cursor or any MCP-capable agent. It installs sigiro, starts it, and registers sigiro mcp as an MCP server.

自动发现。 你的智能体不用人帮忙就能读懂 API 描述。

一份公开文档描述了全部接口。

GET /openapi.json · 公开,无需密钥
[
  "/v1/query",
  "/v1/services",
  "/v1/traces/{trace_id}"
]

你能得到什么

不用迁移。 sigiro 能对接你正在用的工具。

从这些地方发送遥测数据

  • OpenTelemetry
  • Node.js
  • Python
  • Go
  • Java
  • .NET
  • Ruby
  • Rust
  • Claude Code
  • Codex
  • Vercel AI SDK
  • LangChain
  • Ollama

在这些平台上运行

  • Docker
  • Kubernetes
  • Fly.io
  • Railway
  • Render
  • Cloudflare

这些工具可以读取

  • Claude Code
  • Cursor
  • Codex
  • 任何会说 SQL 的工具
答案可以重跑
每个答案都是一条 SQL 查询。你、你的智能体或同事都可以再跑一遍。
所有信号在一处
链路、日志、指标和性能剖析都是表,一条查询就能关联起来。
五分钟装好
一条命令,两个环境变量。代码一行都不用改。
自己部署就免费
不按主机、席位或数据量收费。托管测试版尚未公布价格,欢迎来聊。
数据留在你手里
你把 sigiro 装在自己的服务器上。sigiro 不会把任何数据发给我们。托管测试版例外:遥测数据存放在我们这里。
sigiro 监控 sigiro
sigiro 把自己的遥测数据发给 sigiro。我们就是这样发现自己的故障的。