菜单
文档breadcrumb arrow Grafana Tempobreadcrumb arrow 设置breadcrumb arrow 在 Linux 上部署
开源

在 Linux 上部署

本指南提供了在 Linux 上安装 Tempo 的分步过程。它假设您拥有 Linux 系统的访问权限,并具有部署需要网络和文件系统访问的服务所需的权限。完成本指南后,您将在单个节点上部署一个 Tempo 实例。

这些说明侧重于单体安装。您也可以通过部署多个二进制文件并使用分布式配置来以分布式模式运行 Tempo。

开始之前

要按照本指南操作,您需要

  • 正在运行的 Grafana 实例(参见安装说明
  • Amazon S3 兼容对象存储
  • 安装了 Git、Docker 和 docker-compose 插件以测试 Tempo

系统要求

此配置是您可以作为起点使用的示例。您的系统可能需要比下面列出的最低规格更多的资源。生产环境需要额外的调整。

您必须具备部署需要网络和文件系统访问的服务所需的权限。

您的 Linux 系统应至少具备

  • 4 个 CPU
  • 16 GB 内存

设置对象存储桶

Tempo 使用对象存储作为其追踪存储的后端。它还使用对象存储来存储与系统状态相关的各种数据。

Tempo 也支持使用本地文件系统作为追踪存储的后端。这不推荐用于生产部署。本指南侧重于使用对象存储进行设置。

本示例使用 AWS us-east-1 区域的 Amazon S3 作为您的对象存储。如果您计划使用其他区域或对象存储服务,请更新下面配置文件中的存储字段。目前支持的对象存储后端包括 AWS S3、其他 S3 兼容对象存储以及 Google Cloud 的 GCS。

在配置好对象存储后端后,创建一个名为 grafana-traces-data 的存储桶。本指南的配置文件将引用此存储桶。您可能需要修改存储桶名称以确保其全局唯一。

考虑为您的组织向存储桶添加前缀,例如 myorg-grafana-traces-data,然后用这些存储桶名称替换其余说明中的名称。

安装 Tempo

对于 linux-amd64 安装,在您的 Linux 机器上通过命令行界面运行以下命令。您需要管理员权限来执行此操作,可以以 root 用户身份运行,或者通过 sudo 以具有相应权限的用户身份运行。

  1. 下载 Tempo 二进制文件,验证校验和(列在 SHA256SUMS 中),并为二进制文件添加网络功能。务必下载适用于您的操作系统和架构的正确安装包

    bash
    curl -Lo tempo_2.2.0_linux_amd64.deb https://github.com/grafana/tempo/releases/download/v2.2.0/tempo_2.2.0_linux_amd64.deb
    echo e81cb4ae47e1d8069efaad400df15547e809b849cbb18932e23ac3082995535b \
      tempo_2.2.0_linux_amd64.deb | sha256sum -c
    dpkg -i tempo_2.2.0_linux_amd64.deb

创建 Tempo 配置文件

将以下 YAML 配置复制到名为 tempo.yaml 的文件中。

admin_client 和存储后端中粘贴您的 S3 凭据。如果您希望为集群指定一个唯一的名称,请添加具有相应名称的 cluster 属性。

有关可用选项的说明,请参阅 Tempo 配置文档

在以下配置中,Tempo 选项被修改为仅监听 OTLP gRPC 和 HTTP 协议。默认情况下,Tempo 会监听所有兼容的协议。

yaml
server:
  http_listen_port: 3200

distributor:
  receivers:
      otlp:
        protocols:
          http:
          grpc:

compactor:
  compaction:
    block_retention: 48h                # configure total trace retention here

metrics_generator:
  registry:
    external_labels:
      source: tempo
      cluster: linux-microservices
  storage:
    path: /var/tempo/generator/wal
    remote_write:
    - url: https://:9090/api/v1/write
      send_exemplars: true

storage:
  trace:
    backend: s3
    s3:
      endpoint: s3.us-east-1.amazonaws.com
      bucket: grafana-traces-data
      forcepathstyle: true
      enable_dual_stack: false
      # set to false if endpoint is https
      insecure: true
      access_key: # TODO - Add S3 access key
      secret_key: # TODO - Add S3 secret key
    wal:
      path: /var/tempo/wal         # where to store the wal locally
    local:
      path: /var/tempo/blocks
overrides:
  defaults:
    metrics_generator:
      processors: [service-graphs, span-metrics]

注意:在上述配置中,启用了指标生成器,用于从传入的追踪 Span 中生成 Prometheus 指标数据。这些数据被发送到位于 http://prometheus:9090/api/v1/write 的 Prometheus 远程写入兼容指标存储(在 metrics_generator 配置块中)。如果您不想生成 Span 指标,请务必将相关的 url 参数更改为您自己的 Prometheus 兼容存储实例,或者通过删除 metrics_generators_processors 来禁用指标生成器。

将配置文件移动到正确的目录

tempo.yaml 复制到 /etc/tempo/config.yml

bash
cp tempo.yaml /etc/tempo/config.yml

重启 tempo 服务

使用 systemctl 重启服务(根据您安装 Tempo 的方式,可能有所不同)

bash
systemctl start tempo.service

您可以将 restart 替换为 stop 来停止服务,如果需要,停止后使用 start 来再次启动服务。

验证您的集群是否正常工作

要验证 Tempo 是否正常工作,请运行以下命令

bash
systemctl is-active tempo

您应该看到返回状态为 active。如果不是,请检查配置文件是否正确,然后重启服务。您也可以使用 journalctl -u tempo 查看 Tempo 的日志,以确定是否有任何明显的启动失败原因。

登录到您的存储提供商,并确定已向存储写入文件,从而验证您的存储桶是否已接收到数据。该文件应命名为 tempo_cluster_seed.json

测试您的安装

Tempo 运行后,您可以使用 K6 with Traces Docker 示例来验证追踪数据是否已发送到 Tempo。此过程会在 Grafana 中设置一个示例数据源,用于从 Tempo 读取数据。

后端存储配置

使用 docker-compose 运行的 Tempo 示例都包含一个 Tempo 版本和 S3 和 GCS 等存储后端。由于 Tempo 是安装并配置了后端存储的,因此您需要修改 docker-compose.yaml 文件,移除 Tempo,并将追踪存储指向已安装的版本。本节包含这些步骤。

网络配置

Docker Compose 使用内部网络桥接连接所有已定义的服务。由于 Tempo 实例作为服务在本地主机上运行,因此您需要本地机器的可解析 IP 地址,以便 Docker 容器可以使用 Tempo 服务。您可以使用 ip addr show 等命令查找 Linux 机器的主机 IP 地址。

步骤

  1. 克隆 Tempo 仓库

    git clone https://github.com/grafana/tempo.git
  2. 进入 examples 目录

    cd tempo/example/docker-compose/local
  3. 编辑文件 docker-compose.yaml,删除 tempo 服务及其所有属性,使第一个定义的服务是 k6-tracing。您的 docker-compose.yaml 开头应如下所示

    version: "3"
    services:
    
    k6-tracing:
  4. 编辑 k6-tracing 服务,并将 ENDPOINT 的值更改为运行 Tempo 和 docker compose 的机器的本地 IP 地址,例如 10.128.0.104:4317。这是 OTLP gRPC 端口

    environment:
      - ENDPOINT=10.128.0.104:4317

    这确保了从示例应用发送的追踪数据会发送到 Linux 机器上本地运行的 Tempo 服务。

  5. 编辑 k6-tracing 服务,通过删除以下行移除对 Tempo 的依赖

    depends_on:
    tempo

    保存 docker-compose.yaml 文件并退出编辑器。

  6. 编辑示例中包含的 Tempo 默认 Grafana 数据源。编辑位于 tempo/example/shared/grafana-datasources.yaml 的文件,将 Tempo 数据源的 url 字段更改为指向运行 Tempo 服务的机器的本地 IP 地址(例如 url: http://10.128.0.104:3200)。Tempo 数据源部分应类似于此

    - name: Tempo
      type: tempo
      access: proxy
      orgId: 1
      url: http://10.128.0.104:3200

    保存文件并退出编辑器。

  7. 编辑 Prometheus 配置文件,使其使用 Tempo 服务作为抓取目标。将目标更改为本地 Linux 主机 IP 地址。编辑 tempo/example/shared/prometheus.yaml 文件,修改 tempo 作业,将 tempo:3200 替换为 Linux 机器的主机 IP 地址。

      - job_name: 'tempo'
    	static_configs:
      	- targets: [ '10.128.0.104:3200' ]

    保存文件并退出编辑器。**

  8. 启动 docker-compose 文件中定义的三个服务

    docker compose up -d
  9. 使用 docker compose ps 验证服务是否正在运行。您应该看到类似如下的内容

    NAME             	IMAGE                                   	COMMAND              	SERVICE         	CREATED         	STATUS          	PORTS
    local-grafana-1  	grafana/grafana:9.3.2                   	"/run.sh"            	grafana         	2 minutes ago   	Up 3 seconds    	0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
    local-k6-tracing-1   ghcr.io/grafana/xk6-client-tracing:v0.0.2   "/k6-tracing run /ex…"   k6-tracing      	2 minutes ago   	Up 2 seconds
    local-prometheus-1   prom/prometheus:latest                  	"/bin/prometheus --c…"   prometheus      	2 minutes ago   	Up 2 seconds    	0.0.0.0:9090->9090/tcp, :::9090->9090/tcp

    Grafana 在端口 3000 上运行,Prometheus 在端口 9090 上运行。两者都应绑定到主机。

  10. 作为 docker compose manifest 的一部分,Grafana 现在正在您的 Linux 机器上运行,可通过端口 3000 访问。在您的网络浏览器中指向 Linux 机器的端口 3000。如果您正在远程执行此操作,可能需要转发本地端口,例如通过 SSH 转发。

  11. 登录后,导航到探索页面,选择 Tempo 数据源并选择搜索选项卡。选择运行查询以列出存储在 Tempo 中的最近追踪数据。选择一个以查看追踪图。

    Use the query builder to explore tracing data in Grafana

  12. 修改 Tempo 配置,使其指向在 docker compose 中运行的 Prometheus 实例。为此,请编辑位于 /etc/tempo/config.yaml 的配置文件,并更改 metrics_generator 部分下的 storage 块,使远程写入 URL 为 https://:9090。配置部分应如下所示

     storage:
         path: /var/tempo/generator/wal
         remote_write:
            - url: https://:9090/api/v1/write
            send_exemplars: true

    保存文件并退出编辑器。

  13. 最后,通过运行以下命令重启 Tempo 服务

    sudo systemctl restart tempo
  14. Tempo 成功重启几分钟后,在探索页面中为 Tempo 数据源选择服务图选项卡。选择运行查询以查看由 Tempo 的指标生成器生成的服务图。

    Service graph sample