搬瓦工部署 Grafana Tempo 分布式追踪系统教程

Grafana Tempo 是一款高性价比的分布式追踪后端,专注于大规模追踪数据的存储和查询。与 Jaeger 和 Zipkin 不同,Tempo 不需要索引,仅依赖对象存储或本地文件系统,极大地降低了运维成本和资源消耗。Tempo 与 Grafana 深度集成,支持 TraceQL 查询语言,是 Grafana 可观测性栈的重要组成部分。本文将介绍如何在搬瓦工 VPS 上部署 Tempo。部署前请确保已安装 Docker 和 Docker Compose

一、Tempo 核心优势

  • 无需索引:只存储追踪 ID 到数据块的映射,存储成本极低。
  • 多协议支持:同时接收 Jaeger、Zipkin、OpenTelemetry 和 OpenCensus 格式的数据。
  • TraceQL:强大的查询语言,支持按 Span 属性搜索追踪数据。
  • Grafana 集成:在 Grafana 中直接查看追踪瀑布图,关联日志和指标。
  • 低资源消耗:单体模式下资源需求很低,适合中小规模场景。

二、系统要求

  • 操作系统:Ubuntu 20.04+ 或 Debian 11+。
  • 内存:至少 1GB,推荐 2GB。
  • 磁盘:至少 10GB 可用空间。
  • Docker:已安装 Docker 和 Docker Compose。

搬瓦工 VPS 方案推荐参考 全部方案,购买时使用优惠码 NODESEEK2026 可享 6.77% 折扣,购买入口:bwh81.net

三、创建项目目录

mkdir -p /opt/tempo/{config,data} && cd /opt/tempo

四、编写 Tempo 配置文件

cat > /opt/tempo/config/tempo.yaml <<'EOF'
server:
  http_listen_port: 3200

distributor:
  receivers:
    jaeger:
      protocols:
        thrift_http:
          endpoint: "0.0.0.0:14268"
        grpc:
          endpoint: "0.0.0.0:14250"
    zipkin:
      endpoint: "0.0.0.0:9411"
    otlp:
      protocols:
        grpc:
          endpoint: "0.0.0.0:4317"
        http:
          endpoint: "0.0.0.0:4318"

ingester:
  trace_idle_period: 10s
  max_block_bytes: 1048576
  max_block_duration: 5m

compactor:
  compaction:
    block_retention: 48h

storage:
  trace:
    backend: local
    wal:
      path: /var/tempo/wal
    local:
      path: /var/tempo/blocks

metrics_generator:
  registry:
    external_labels:
      source: tempo
  storage:
    path: /var/tempo/generator/wal
    remote_write:
      - url: http://prometheus:9090/api/v1/write
        send_exemplars: true

overrides:
  defaults:
    metrics_generator:
      processors: [service-graphs, span-metrics]
EOF

五、编写 Docker Compose 配置

cat > /opt/tempo/docker-compose.yml <<'EOF'
version: '3.8'

services:
  tempo:
    image: grafana/tempo:latest
    restart: always
    command: ["-config.file=/etc/tempo/tempo.yaml"]
    ports:
      - "3200:3200"   # HTTP API
      - "4317:4317"   # OTLP gRPC
      - "4318:4318"   # OTLP HTTP
      - "9411:9411"   # Zipkin
      - "14268:14268" # Jaeger HTTP
    volumes:
      - ./config/tempo.yaml:/etc/tempo/tempo.yaml:ro
      - tempo_data:/var/tempo

volumes:
  tempo_data:
EOF

六、启动服务

cd /opt/tempo
docker compose up -d

验证服务状态:

curl http://localhost:3200/ready
curl http://localhost:3200/status

七、在 Grafana 中配置 Tempo 数据源

在 Grafana 中添加 Tempo 类型的数据源:

  • URLhttp://tempo:3200
  • 启用 TraceQL 搜索
  • 可选:配置与 Loki 的日志关联和与 Prometheus 的指标关联

八、发送追踪数据

应用程序可以通过以下协议发送追踪数据到 Tempo:

  • OTLP gRPCyour_server_ip:4317(推荐)
  • OTLP HTTPhttp://your_server_ip:4318/v1/traces
  • Jaeger HTTPhttp://your_server_ip:14268/api/traces
  • Zipkinhttp://your_server_ip:9411/api/v2/spans

九、TraceQL 查询示例

在 Grafana 中使用 TraceQL 搜索追踪数据:

# 查找特定服务的追踪
{ resource.service.name = "my-api" }

# 查找持续时间超过 1 秒的 Span
{ duration > 1s }

# 查找错误状态的 Span
{ status = error }

# 组合条件
{ resource.service.name = "my-api" && span.http.status_code >= 500 }

十、常见问题

追踪数据未出现在 Grafana 中

确认应用程序正确配置了 Trace Exporter 端点,并检查 Tempo 日志是否有接收记录:

docker compose logs tempo | grep "received"

磁盘空间增长

调整 block_retention 参数控制数据保留时间,确保 Compactor 正常工作。

总结

Grafana Tempo 是成本效益最高的分布式追踪后端,特别适合已经在使用 Grafana 的团队。如果你需要更丰富的 UI 和分析功能,可以参考 Jaeger;如果偏好简单的追踪方案,参考 Zipkin。选购搬瓦工 VPS 使用优惠码 NODESEEK2026 可享 6.77% 折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。