Tempo 架构
本主题概述了 Tempo 的主要组件。有关部署帮助,请参阅示例设置或部署选项。
Tempo 包含以下顶层组件。
Distributor
Distributor 接受多种格式的 Span,包括 Jaeger、OpenTelemetry、Zipkin。它通过对 traceID
进行哈希处理并使用分布式一致哈希环将 Span 路由到 ingesters。Distributor 使用 OpenTelemetry Collector 的 receiver 层。为了获得最佳性能,建议摄取 OTel Proto。因此,Grafana Alloy 使用 OTLP exporter/receiver 将 Span 发送到 Tempo。
Ingester
Ingester 将追踪分批打包成块,创建 Bloom 过滤器和索引,然后将所有内容刷新到后端。后端生成的块采用以下布局
<bucketname> / <tenantID> / <blockID> / <meta.json>
/ <index>
/ <data>
/ <bloom_0>
/ <bloom_1>
...
/ <bloom_n>
Query Frontend
Query Frontend 负责对传入查询的搜索空间进行分片。
一个简单的 HTTP 端点暴露追踪:GET /api/traces/<traceID>
在内部,Query Frontend 将 blockID 空间分成可配置数量的分片并排队这些请求。Queriers 通过流式 gRPC 连接连接到 Query Frontend 来处理这些分片查询。
Querier
Querier 负责在 ingesters 或后端存储中查找请求的 trace ID。根据参数,它将同时查询 ingesters 并从后端拉取 Bloom 过滤器/索引来搜索对象存储中的块。
Querier 在 GET /querier/api/traces/<traceID>
处暴露一个 HTTP 端点,但不建议直接使用。
查询应发送到 Query Frontend。
Compactor
Compactors 在后端存储之间流式传输块,以减少块的总数。
指标生成器
这是一个可选组件,它从摄取的追踪中导出指标并将其写入指标存储。请参阅指标生成器文档了解更多信息。