跳到内容
sigiro
Esc
↑↓导航↵打开⌘J预览
本页内容

与 Jaeger 并行试用 sigiro

不修改应用的目标地址,把 Jaeger v2 的 OTLP 链路追踪同时发送给 sigiro。

这是仅针对链路追踪的评估,不是迁移。应用继续向 Jaeger v2 现有的 OTLP 接收器(4317/4318)发送数据。保留 Jaeger 原有存储 exporter 和其他管道,只在 traces 管道增加第二个 exporter。Jaeger 不接收日志或指标。如果 Jaeger 前面另有 OpenTelemetry Collector,就修改那个 Collector 的 traces 管道,并保留原有 Jaeger 输出。

1. 在不同的宿主机端口启动 sigiro

在与 Jaeger 相同的宿主机上,确认 14317、14318、9999 空闲:

docker run -d --name sigiro-trial --restart unless-stopped \
  -p 127.0.0.1:14317:4317 \
  -p 127.0.0.1:14318:4318 \
  -p 127.0.0.1:9999:9999 \
  -v sigiro-trial-data:/var/lib/sigiro \
  ghcr.io/sigiroai/sigiro
curl --fail http://127.0.0.1:9999/health

14317 是重映射的 gRPC 端口;本文只使用 HTTP 14318。如果 9999 已被占用,也将其宿主机侧改成例如 19999,并在下文检查中使用新端口。健康检查失败时查看 docker logs sigiro-trial。不要修改应用的 exporter 地址。

**安全边界:**这里的 127.0.0.1 只适用于 Collector 可以访问宿主机环回地址的情况。另一个容器或主机不能用这个地址访问宿主机;应使用可达的私有网络路径并配置 TLS/认证。不要为了连通而把 Docker 绑定改成 0.0.0.0。自托管 sigiro 的 OTLP 和查询接口不进行认证,不得直接暴露在不可信网络上;也不要默认信任本机所有进程。

2. 在原有 traces 管道增加镜像输出

先备份原始 YAML。以下是需要合并的片段,不是完整配置。保留原有接收器、处理器、exporter、Jaeger 存储、其他管道及其顺序。此示例使用 Jaeger 2.0.0 的组件名 otlphttp。较新的 Collector 使用 otlp_http,旧名是已弃用的别名。以实际运行的二进制文件验证,并确保定义和列表使用同一名称。

exporters:
  otlphttp/sigiro:
    endpoint: http://127.0.0.1:14318
    sending_queue:
      enabled: true
      queue_size: 1000
    retry_on_failure:
      enabled: true
      initial_interval: 5s
      max_interval: 30s
      max_elapsed_time: 300s
service:
  pipelines:
    traces:
      # 保留实际配置中的接收器和处理器。
      receivers: [otlp]
      processors: [batch]
      exporters: [jaeger_storage_exporter, otlphttp/sigiro]

endpoint 是基础 URL;OTLP HTTP exporter 会追加 /v1/traces,不要重复写入路径。明文 HTTP 仅用于同机环回地址;跨主机时配置 TLS 和认证。内存队列最多容纳 1000 个请求,不是 1000 个 span。单批重试在五分钟后结束。队列满、重试到期或 Collector 重启都可能丢失镜像数据,不保证无损。监控 Collector 队列大小/容量、发送及入队失败指标和 Jaeger 接收错误;异常增加时回滚。不要把这个 exporter 加进 Jaeger 的 logs 或 metrics 管道。

3. 在重启现有服务前验证

用相同版本的 Jaeger v2/Collector 可执行文件对编辑后的文件执行 validate --config=<编辑后的文件>。这只检查配置,不证明网络可达或数据已送达。再用编辑后的副本启动独立的试验实例:将副本中所有监听端口改为空闲端口,包括 OTLP 4317/4318、查询界面 16686、Prometheus 8888(如有 8889)、健康检查 13133,以及所有其他扩展、接收器、查询监听端口。隔离试验存储,禁止试验实例写入生产存储。确认试验 trace 到达两个试验目标后,才按照正常变更流程重启现有实例。仅修改 Docker 的 -p 无法防止共享网络命名空间中的监听或存储冲突。如果无法隔离,不要把生产重启当成首次配置检查。

4. 验证两个后端

通过原有应用或 OTLP 地址产生一个新的、易识别的 span,记录 trace ID、服务名和时间。在 Jaeger UI(通常是 16686)查找该 ID;在 sigiro 执行 curl --fail http://127.0.0.1:9999/v1/services 查看服务,再查询同一 ID。请将起止 UTC 时间替换为覆盖测试 span 的实际值;now() 会妨碍 DuckLake 文件裁剪,也不符合有界时间查询策略:

curl --fail -X POST http://127.0.0.1:9999/v1/query \
  --data "SELECT trace_id, span_name, timestamp FROM sigiro_spans
          WHERE trace_id = '<your-trace-id>'
            AND timestamp >= TIMESTAMP '<start-utc:YYYY-MM-DD HH:MM:SS>'
            AND timestamp < TIMESTAMP '<end-utc:YYYY-MM-DD HH:MM:SS>'"

如果任一后端缺少 span,检查 Jaeger/Collector 日志、队列和发送失败指标、sigiro 日志、网络命名空间及目标地址。对比实际 trace ID 而非总量,并考虑上游采样与过滤。

回滚

恢复备份的 YAML(从 traces.exporters 列表和 exporters 映射中删除 otlphttp/sigiro),验证后按正常流程重启,并确认新的 trace 仍可在 Jaeger 中查询。然后移除试验容器:

docker rm -f sigiro-trial
# 仅当确认要丢弃试验数据时执行(不可恢复):
docker volume rm sigiro-trial-data

要保留数据则省略最后一条命令。无需停用 Jaeger 或修改应用配置。

配置依据:Collector 配置及验证、OTLP HTTP exporter、队列及重试、故障排查、Jaeger v2 API。

这个页面有帮助吗?