Tempo HTTP API
Tempo 公开了一个 API,用于推送和查询链路追踪数据,以及操作集群本身。
为了清晰起见,API 端点按服务分组。这些端点在微服务模式和单体模式下运行 Tempo 时都会公开。
- 微服务:每个服务公开自己的端点
- 单体:Tempo 进程公开内部运行的所有服务的 API 端点
对于外部支持的 gRPC API,请参阅 Tempo gRPC API。
端点
API | 服务 | 类型 | 端点 |
---|---|---|---|
就绪探针 | 所有服务 | HTTP | GET /ready |
指标 | 所有服务 | HTTP | GET /metrics |
Pprof | 所有服务 | HTTP | GET /debug/pprof |
接收链路追踪数据 | Distributor (分发器) | - | 详见相关章节 |
按 ID 查询链路追踪数据 | Query-frontend (查询前端) | HTTP | GET /api/traces/<traceID> |
搜索链路追踪数据 | Query-frontend (查询前端) | HTTP | GET /api/search?<params> |
搜索标签名称 | Query-frontend (查询前端) | HTTP | GET /api/search/tags |
搜索标签名称 V2 | Query-frontend (查询前端) | HTTP | GET /api/v2/search/tags |
搜索标签值 | Query-frontend (查询前端) | HTTP | GET /api/search/tag/<tag>/values |
搜索标签值 V2 | Query-frontend (查询前端) | HTTP | GET /api/v2/search/tag/<tag>/values |
TraceQL 指标 | Query-frontend (查询前端) | HTTP | GET /api/metrics/query_range |
TraceQL 指标 (即时) | Query-frontend (查询前端) | HTTP | GET /api/metrics/query |
Query Echo 端点 | Query-frontend (查询前端) | HTTP | GET /api/echo |
Overrides API | Query-frontend (查询前端) | HTTP | GET,POST,PATCH,DELETE /api/overrides |
Memberlist | Distributor (分发器), Ingester (接收器), Querier (查询器), Compactor (压缩器) | HTTP | GET /memberlist |
Flush (刷入) | Ingester (接收器) | HTTP | GET,POST /flush |
Shutdown (关闭) | Ingester (接收器) | HTTP | GET,POST /shutdown |
使用情况指标 | Distributor (分发器) | HTTP | GET /usage_metrics |
Distributor (分发器) 环状态 (*) | Distributor (分发器) | HTTP | GET /distributor/ring |
Ingester (接收器) 环状态 | Distributor (分发器), Querier (查询器) | HTTP | GET /ingester/ring |
指标生成器环状态 (*) | Distributor (分发器) | HTTP | GET /metrics-generator/ring |
Compactor (压缩器) 环状态 | Compactor (压缩器) | HTTP | GET /compactor/ring |
状态 | 状态 | HTTP | GET /status |
列出构建信息 | 状态 | HTTP | GET /api/status/buildinfo |
(*) 此端点并非始终可用,请查看特定章节了解详细信息。
就绪探针
GET /ready
当 Tempo 准备好处理流量时,返回状态码 200。
指标
GET /metrics
返回 Prometheus exposition 格式的正在运行的 Tempo 服务的指标。
Pprof
GET /debug/pprof/heap
GET /debug/pprof/block
GET /debug/pprof/profile
GET /debug/pprof/trace
GET /debug/pprof/goroutine
GET /debug/pprof/mutex
以 pprof 可视化工具期望的格式返回运行时性能分析数据。可以使用此工具进行堆内存、链路追踪、goroutine 等多种性能分析。
更多信息请参阅 pprof 官方文档。
接收 (Ingest)
Tempo distributor 使用 OpenTelemetry Collector receivers 作为接收链路追踪数据的基础。这些 API 旨在供相应的客户端 SDK 或管线组件使用,例如 Grafana Agent、OpenTelemetry Collector 或 Jaeger Agent。
协议 | 类型 | 文档 |
---|---|---|
OpenTelemetry | gRPC | 链接 |
OpenTelemetry | HTTP | 链接 |
Jaeger | Thrift Compact | 链接 |
Jaeger | Thrift Binary | 链接 |
Jaeger | Thrift HTTP | 链接 |
Jaeger | gRPC | 链接 |
Zipkin | HTTP | 链接 |
有关如何使用 curl(用于调试)与 OTLP 端点交互的信息,请参阅 使用 HTTP Push Span。
如果你使用 Grafana Enterprise Traces (GET),则仅支持 OpenTelemetry (OTLP)。
协议 | 类型 | 文档 |
---|---|---|
OpenTelemetry | gRPC | 链接 |
OpenTelemetry | HTTP | 链接 |
查询 (Query)
在微服务部署中,以下请求用于从 query frontend 服务检索链路追踪数据;在单体模式部署中,则从 Tempo 端点检索。
GET /api/traces/<traceid>?start=<start>&end=<end>
参数
start = (Unix Epoch 秒)
可选。与end
一起定义应返回链路追踪数据的时间范围。end = (Unix Epoch 秒)
可选。与start
一起定义应返回链路追踪数据的时间范围。同时提供start
和end
将仅包含指定时间范围内的链路追踪数据。如果未提供参数,Tempo 将在后端所有块中查找链路追踪数据。如果提供了参数,Tempo 将仅在指定时间范围内的块中查找,这可能导致找不到链路追踪数据,或者如果不在指定时间范围内,则返回部分结果。
querier 服务上也提供了以下查询 API,用于调试目的。
GET /querier/api/traces/<traceid>?mode=xxxx&blockStart=0000&blockEnd=FFFF&start=<start>&end=<end>
参数
mode = (blocks|ingesters|all)
指定 querier 应在块 (blocks)、ingesters (接收器) 或两者 (all) 中查找链路追踪数据。默认值 =all
blockStart = (GUID)
指定 blockID 开始边界。如果指定,querier 将只搜索 ID 大于 blockStart 的块。默认值 =00000000-0000-0000-0000-000000000000
示例:blockStart=12345678-0000-0000-1235-000001240000
blockEnd = (GUID)
指定 blockID 结束边界。如果指定,querier 将只搜索 ID 小于 blockEnd 的块。默认值 =FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
示例:blockStart=FFFFFFFF-FFFF-FFFF-FFFF-456787652341
start = (Unix Epoch 秒)
可选。与end
一起定义应返回链路追踪数据的时间范围。end = (Unix Epoch 秒)
可选。与start
一起定义应返回链路追踪数据的时间范围。同时提供start
和end
将仅包含指定时间范围内的块。
此 API 不应直接使用,除非用于调试 query frontend 的分片功能。
返回值
默认情况下,此端点返回与 OpenTelemetry JSON 基本兼容的数据,但如果传递 Accept: application/protobuf
头,它也可以发送 OpenTelemetry proto 数据。
查询 V2
在微服务部署中,以下请求用于从 query frontend 服务检索链路追踪数据;在单体模式部署中,则从 Tempo 端点检索。
GET /api/v2/traces/<traceid>?start=<start>&end=<end>
参数
start = (Unix Epoch 秒)
可选。与end
一起定义应返回链路追踪数据的时间范围。end = (Unix Epoch 秒)
可选。与start
一起定义应返回链路追踪数据的时间范围。同时提供start
和end
将仅包含指定时间范围内的链路追踪数据。如果未提供参数,Tempo 将在后端所有块中查找链路追踪数据。如果提供了参数,Tempo 将仅在指定时间范围内的块中查找,这可能导致找不到链路追踪数据,或者如果不在指定时间范围内,则返回部分结果。
querier 服务上也提供了以下查询 API,用于调试目的。
GET /querier/api/v2/traces/<traceid>?mode=xxxx&blockStart=0000&blockEnd=FFFF&start=<start>&end=<end>
参数
mode = (blocks|ingesters|all)
指定 querier 应在块 (blocks)、ingesters (接收器) 或两者 (all) 中查找链路追踪数据。默认值 =all
blockStart = (GUID)
指定 blockID 开始边界。如果指定,querier 将只搜索 ID 大于 blockStart 的块。默认值 =00000000-0000-0000-0000-000000000000
示例:blockStart=12345678-0000-0000-1235-000001240000
blockEnd = (GUID)
指定 blockID 结束边界。如果指定,querier 将只搜索 ID 小于 blockEnd 的块。默认值 =FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
示例:blockStart=FFFFFFFF-FFFF-FFFF-FFFF-456787652341
start = (Unix Epoch 秒)
可选。与end
一起定义应返回链路追踪数据的时间范围。end = (Unix Epoch 秒)
可选。与start
一起定义应返回链路追踪数据的时间范围。同时提供start
和end
将仅包含指定时间范围内的块。
返回值
默认情况下,此端点返回带有 OpenTelemetry JSON 格式链路追踪的查询响应,但如果传递 Accept: application/protobuf
头,它也可以发送 OpenTelemetry proto 数据。
搜索 (Search)
Tempo 搜索 API 根据 Span 和进程属性(标签和值)查找链路追踪数据。请注意,**v2 blocks 不支持**搜索功能。
执行搜索时,Tempo 会在给定时间范围内进行大规模并行搜索,并返回前 N 个结果。即使是相同的搜索,由于机器负载和网络延迟等因素,结果也可能不同。TraceQL 的行为也是如此。
此 API 在微服务部署中可通过 query frontend 服务访问,在单体模式部署中可通过 Tempo 端点访问。
以下请求用于查找包含来自服务 myservice
的 Span 且 URL 包含 api/myapi
的链路追踪数据。
GET /api/search?tags=service.name%3Dmyservice%20http.url%3Dapi%2Fmyapi
URL 查询参数支持以下值
TraceQL 搜索参数
q = (TraceQL 查询)
:URL 编码的 TraceQL 查询。
基于标签的搜索参数
tags = (logfmt)
:用于过滤 Span 级别或进程级别属性的logfmt
编码。值匹配不区分大小写的子字符串。键值对之间用空格分隔。如果值包含空格,则应使用双引号括起来。minDuration = (go duration 值)
可选。查找持续时间至少为该值的链路追踪。持续时间值的格式为10s
表示 10 秒,100ms
表示 100 毫秒,30m
表示 30 分钟等。maxDuration = (go duration 值)
可选。查找持续时间不超过该值的链路追踪。格式与minDuration
相同。
所有搜索支持的参数
limit = (整数)
可选。限制搜索结果的数量。默认值为 20,但在 querier 中可配置。请参阅 配置。start = (Unix Epoch 秒)
可选。与end
一起定义应返回链路追踪数据的时间范围。end = (Unix Epoch 秒)
可选。与start
一起定义应返回链路追踪数据的时间范围。同时提供start
和end
会改变 Tempo 的搜索方式。如果未提供参数,Tempo 将搜索 ingesters 中存储的最新链路追踪数据。如果提供了参数,它也会搜索后端。spss = (整数)
可选。限制每个 span-set 的 Span 数量。默认值为 3。
TraceQL 搜索示例
使用 curl 查询 Tempo 的示例。此查询返回所有状态设置为 error 的链路追踪数据。
curl -G -s https://:3200/api/search --data-urlencode 'q={ status=error }' | jq
{
"traces": [
{
"traceID": "2f3e0cee77ae5dc9c17ade3689eb2e54",
"rootServiceName": "shop-backend",
"rootTraceName": "update-billing",
"startTimeUnixNano": "1684778327699392724",
"durationMs": 557,
"spanSets": [
{
"spans": [
{
"spanID": "563d623c76514f8e",
"startTimeUnixNano": "1684778327735077898",
"durationNanos": "446979497",
"attributes": [
{
"key": "status",
"value": {
"stringValue": "error"
}
}
]
}
],
"matched": 1
}
]
],
"metrics": {
"totalBlocks": 13
}
}
基于标签的搜索示例
使用 curl 查询 Tempo 的示例。此查询返回所有标签 service.name
包含 cartservice
且最小持续时间为 600 毫秒的链路追踪数据。
curl -G -s https://:3200/api/search --data-urlencode 'tags=service.name=cartservice' --data-urlencode minDuration=600ms | jq
{
"traces": [
{
"traceID": "d6e9329d67b6146a",
"rootServiceName": "frontend",
"rootTraceName": "/cart",
"startTimeUnixNano": "1634727903545000000",
"durationMs": 611
},
{
"traceID": "1b1ba462b409200d",
"rootServiceName": "frontend",
"rootTraceName": "/cart",
"startTimeUnixNano": "1634727775935000000",
"durationMs": 611
}
],
"metrics": {
"inspectedTraces": 3100,
"inspectedBytes": "3811736",
"totalBlocks": 3
}
}
搜索标签 (Search tags)
Ingester 配置中的 complete_block_timeout
会影响标签可用于搜索的时长。
此端点检索所有可用于搜索的已发现标签名称。此端点在微服务部署中可通过 query frontend 服务访问,在单体模式部署中可通过 Tempo 端点访问。标签端点接受一个 scope 参数,用于控制返回的标签或属性类型。如果未提供任何值,则该端点返回所有 resource 和 span 标签。
GET /api/search/tags?scope=<resource|span|intrinsic>
示例
使用 curl 查询 Tempo 的示例。此查询返回所有已发现的标签名称。
curl -G -s https://:3200/api/search/tags?scope=span | jq
{
"tagNames": [
"host.name",
"http.method",
"http.status_code",
"http.url",
"ip",
"load_generator.seq_num",
"name",
"region",
"root_cause_error",
"sampler.param",
"sampler.type",
"service.name",
"starter",
"version"
]
"metrics": {
"inspectedBytes": "630188"
}
}
参数
scope = (resource|span|intrinsic)
可选。指定标签的范围。如果未指定,表示所有范围。默认值 =all
start = (Unix Epoch 秒)
可选。与end
一起定义应返回标签的时间范围。end = (Unix Epoch 秒)
可选。与start
一起定义应返回标签的时间范围。同时提供start
和end
将仅包含指定时间范围内的块。limit = (整数)
可选。限制最大标签值数量。maxStaleValues = (整数)
可选。限制标签名称的搜索。如果过时(已知)值的数量达到或超过此限制,则搜索停止。如果 Tempo 处理了maxStaleValues
个匹配项而未找到新的标签名称,则搜索将提前返回。
搜索标签 V2
Ingester 配置中的 complete_block_timeout
会影响标签可用于搜索的时长。如果未指定 start 或 end,则仅获取未刷入后端(backend)的块。
此端点检索所有可用于搜索的已发现标签名称。此端点在微服务部署中可通过 query frontend 服务访问,在单体模式部署中可通过 Tempo 端点访问。标签端点接受一个 scope 参数,用于控制返回的标签或属性类型。如果未提供任何值,则该端点返回所有 resource 和 span 标签。
GET /api/v2/search/tags?scope=<resource|span|intrinsic>
参数
scope = (resource|span|intrinsic)
指定标签的范围,这是可选参数,如果未指定,则表示所有范围。默认值 =all
q = (TraceQL 查询)
可选。一个用于过滤标签名称的 TraceQL 查询。目前仅适用于由&&
条件组成的单个 spanset。例如:{ span.foo = "bar" && resource.baz = "bat" ...}
。另请参阅 过滤标签值。start = (Unix Epoch 秒)
可选。与end
一起定义应返回标签的时间范围。end = (Unix Epoch 秒)
可选。与start
一起定义应返回标签的时间范围。同时提供start
和end
将仅包含指定时间范围内的块。limit = (整数)
可选。设置每个范围允许的最大标签名称数量。一旦任何范围达到此限制,查询将停止。maxStaleValues = (整数)
可选。限制标签值的搜索。如果过时(已知)值的数量达到或超过此限制,则搜索停止。
示例
使用 curl 查询 Tempo 的示例。此查询返回所有已发现的标签名称。
curl -G -s https://:3200/api/v2/search/tags | jq
{
"scopes": [
{
"name": "link",
"tags": [
"link-type"
]
},
{
"name": "resource",
"tags": [
"k6",
"service.name"
]
},
{
"name": "span",
"tags": [
"article.count",
"http.flavor",
"http.method",
"http.request.header.accept",
"http.request_content_length",
"http.response.header.content-type",
"http.response_content_length",
"http.scheme",
"http.status_code",
"http.target",
"http.url",
"net.host.name",
"net.host.port",
"net.peer.name",
"net.peer.port",
"net.sock.family",
"net.sock.host.addr",
"net.sock.peer.addr",
"net.transport",
"numbers",
"one"
]
},
{
"name": "intrinsic",
"tags": [
"duration",
"event:name",
"event:timeSinceStart",
"instrumentation:name",
"instrumentation:version",
"kind",
"name",
"rootName",
"rootServiceName",
"span:duration",
"span:kind",
"span:name",
"span:status",
"span:statusMessage",
"status",
"statusMessage",
"trace:duration",
"trace:rootName",
"trace:rootService",
"traceDuration"
]
},
{
"name": "event",
"tags": [
"exception.escape",
"exception.message",
"exception.stacktrace",
"exception.type",
]
}
],
"metrics": {
"inspectedBytes": "377046"
}
}
搜索标签值
Ingester 配置中的 complete_block_timeout
会影响标签可用于搜索的时长。如果未指定 start 或 end,则仅获取未刷入后端(backend)的块。
此端点检索给定标签的所有已发现值,这些值可用于搜索。此端点在微服务部署中可通过 query frontend 服务访问,在单体模式部署中可通过 Tempo 端点访问。以下请求返回所有已发现的服务名称。
GET /api/search/tag/service.name/values
示例
使用 curl 查询 Tempo 的示例。此查询返回标签 service.name
的所有已发现值。
curl -G -s https://:3200/api/search/tag/service.name/values | jq
{
"tagValues": [
"article-service",
"auth-service",
"billing-service",
"cart-service",
"postgres",
"shop-backend"
],
"metrics": {
"inspectedBytes": "431380"
}
}
参数
start = (Unix Epoch 秒)
可选。与end
一起定义应返回标签的时间范围。end = (Unix Epoch 秒)
可选。与start
一起定义应返回标签的时间范围。同时提供start
和end
将仅包含指定时间范围内的块。limit = (整数)
可选。限制最大标签值数量。maxStaleValues = (整数)
可选。限制标签值的搜索。如果过时(已知)值的数量达到或超过此限制,则搜索停止。如果 Tempo 处理了maxStaleValues
个匹配项而未找到新的标签名称,则搜索将提前返回。
搜索标签值 V2
此端点检索给定 TraceQL 标识符的所有已发现值及其数据类型。此端点在微服务部署中可通过 query frontend 服务访问,在单体模式部署中可通过 Tempo 端点访问。此端点类似于 /api/search/tag/<tag>/values
,但操作对象是 TraceQL 标识符和类型。更多信息请参阅 TraceQL 文档。
示例
此示例使用 curl 查询 Tempo,并返回标签 service.name
的所有已发现值。
curl -G -s https://:3200/api/v2/search/tag/.service.name/values | jq
{
"tagValues": [
{
"type": "string",
"value": "article-service"
},
{
"type": "string",
"value": "postgres"
},
{
"type": "string",
"value": "cart-service"
},
{
"type": "string",
"value": "billing-service"
},
{
"type": "string",
"value": "shop-backend"
},
{
"type": "string",
"value": "auth-service"
}
],
"metrics": {
"inspectedBytes": "502756"
}
}
参数
start = (Unix Epoch 秒)
可选。与end
一起定义应返回标签值的时间范围。end = (Unix Epoch 秒)
可选。与start
一起定义应返回标签值的时间范围。同时提供start
和end
将仅包含指定时间范围内的块。q = (TraceQL 查询)
可选。一个用于过滤标签值的 TraceQL 查询。目前仅适用于由&&
条件组成的单个 spanset。例如:{ span.foo = "bar" && resource.baz = "bat" ...}
。请参阅 过滤标签值。limit = (整数)
可选。限制最大标签值数量。maxStaleValues = (整数)
可选。限制标签值的搜索。如果过时(已知)值的数量达到或超过此限制,则搜索停止。如果 Tempo 处理了maxStaleValues
个匹配项而未找到新的标签名称,则搜索将提前返回。
过滤标签值 (Filtered tag values)
你可以在请求中传递一个可选的 URL 查询参数 q
。q
参数是 URL 编码的 TraceQL 查询。如果提供了该参数,API 返回的标签值将被过滤,仅返回与你的过滤参数匹配的 Span 上出现的值。
查询可以是不完整的:例如,{ resource.cluster = }
。Tempo 只提取有效的匹配器并构建有效的查询。如果输入无效,Tempo 不会提供错误。相反,解析输入失败时你会看到完整的列表。这种行为有助于向后兼容。
仅支持包含单个选择器 {}
和 AND (&&
) 运算符的查询。
- 支持的示例:
{ resource.cluster = "us-east-1" && resource.service = "frontend" }
- 不支持的示例:
{ resource.cluster = "us-east-1" || resource.service = "frontend" } && { resource.cluster = "us-east-2" }
过滤标签值不支持无范围属性。
以下请求返回 span.http.method=GET
的 Span 上所有已发现的服务名称。
GET /api/v2/search/tag/resource.service.name/values?q="{span.http.method='GET'}"
如果某个特定的服务名称(例如 shopping-cart
)仅存在于 span.http.method=POST
的 Span 上,则它不会包含在返回的值列表中。
TraceQL 指标
TraceQL 指标 API 为给定的指标查询返回类似于 Prometheus 的时间序列数据。指标查询是指使用 rate()
和 quantile_over_time()
等指标函数的查询。更多信息请参阅 TraceQL 指标文档。
参数
q = (TraceQL 查询)
要处理的 TraceQL 指标查询。start = (Unix Epoch 秒 | Unix Epoch 纳秒 | RFC3339 字符串)
可选。与end
一起定义时间范围。end = (Unix Epoch 秒 | Unix Epoch 纳秒 | RFC3339 字符串)
可选。与start
一起定义时间范围。同时提供start
和end
将仅包含指定时间范围内的块。since = (持续时间字符串)
可选。可以用来代替start
和end
,以相对值定义时间范围。例如,since=15m
查询最近 15 分钟。默认是最近 1 小时。step = (持续时间字符串)
可选。定义返回的时间序列的粒度。例如,step=15s
在时间范围内每 15 秒返回一个数据点。如果未指定,则默认行为是根据时间范围选择动态步长。exemplars = (整数)
可选。定义查询的最大 Exemplar (样本) 数量。如果超过max_exemplars
,则会被截断。
此 API 在微服务部署中可通过 query frontend 服务访问,在单体模式部署中可通过 Tempo 端点访问。
例如,以下请求计算 myservice
在过去三小时内每分钟接收到的 Span 的速率。
注意
实际的 API 参数必须进行 URL 编码。此示例未编码,以便于阅读。
GET /api/metrics/query_range?q={resource.service.name="myservice"} | min_over_time() with(exemplars=true) &since=3h&step=1m&exemplars=100
即时 (Instant)
指标 API 的即时版本类似于范围版本,但返回查询的单个值。当您不需要完整时间序列的粒度,而需要总和或在整个时间范围内计算的单个值时,此版本非常有用。
参数与范围版本相同,但没有 step
参数。
参数
q = (TraceQL 查询)
要处理的 TraceQL 指标查询。start = (Unix Epoch 秒 | Unix Epoch 纳秒 | RFC3339 字符串)
可选。与end
一起定义时间范围。end = (Unix Epoch 秒 | Unix Epoch 纳秒 | RFC3339 字符串)
可选。与start
一起定义时间范围。同时提供start
和end
将仅包含指定时间范围内的块。since = (持续时间字符串)
可选。可以用来代替start
和end
,以相对值定义时间范围。例如,since=15m
查询最近 15 分钟。默认是最近 1 小时。
此 API 在微服务部署中可通过 query frontend 服务访问,在单体模式部署中可通过 Tempo 端点访问。
例如,以下请求计算过去一小时内每个服务的失败 Span 总数。
注意
实际的 API 参数必须进行 URL 编码。此示例未编码,以便于阅读。
GET /api/metrics/query?q={status=error}|count_over_time()by(resource.service.name)
Query Echo 端点
GET /api/echo
当 query frontend 启动并准备好接收请求时,返回状态码 200 和正文 echo
。
注意
旨在用于 Grafana 等查询可视化 UI 中,测试 Tempo 数据源是否正常工作。
Overrides API
有关用户可配置 overrides API 的更多信息,请参阅 用户可配置 overrides 文档。
Flush (刷入)
GET,POST /flush
触发将所有内存中的链路追踪数据刷入 WAL (预写日志)。在滚动重启和意外崩溃时非常有用。
指定 tenant
参数可仅刷新单个租户的数据。
GET,POST /flush?tenant=dev
Shutdown (关闭)
GET,POST /shutdown
将所有内存中的链路追踪数据和 WAL 刷入长期存储后端。从环中优雅退出。关闭 ingester 服务。
注意
通常用于缩减集群规模时。
使用情况指标
注意
仅当 distributor 中启用了一个或多个使用情况跟踪器时,此端点才可用。
GET /usage_metrics
特殊的指标抓取端点,提供关于接收数据的每个租户指标。每个租户的分组规则在 每个租户的 overrides 中配置。
示例
curl https://:3200/usage_metrics
# HELP tempo_usage_tracker_bytes_received_total bytes total received with these attributes
# TYPE tempo_usage_tracker_bytes_received_total counter
tempo_usage_tracker_bytes_received_total{service="auth-service",tenant="single-tenant",tracker="cost-attribution"} 96563
tempo_usage_tracker_bytes_received_total{service="cache",tenant="single-tenant",tracker="cost-attribution"} 81904
tempo_usage_tracker_bytes_received_total{service="gateway",tenant="single-tenant",tracker="cost-attribution"} 164751
tempo_usage_tracker_bytes_received_total{service="identity-service",tenant="single-tenant",tracker="cost-attribution"} 85974
tempo_usage_tracker_bytes_received_total{service="service-A",tenant="single-tenant",tracker="cost-attribution"} 92799
Distributor (分发器) 环状态
注意
仅当 Tempo 配置了 全局 override 策略 时,此端点才可用。
GET /distributor/ring
显示一个网页,其中包含 distributor 哈希环的状态,包括每个 distributor 的状态、健康状况和上次心跳时间。
更多信息请参阅 一致性哈希环。
Ingester (接收器) 环状态
GET /ingester/ring
显示一个网页,其中包含 ingesters 哈希环的状态,包括每个 ingester 的状态、健康状况和上次心跳时间。
更多信息请参阅 一致性哈希环。
指标生成器环状态
GET /metrics-generator/ring
显示一个网页,其中包含 metrics-generator 哈希环的状态,包括每个 metrics-generator 的状态、健康状况和上次心跳时间。
仅当 metrics-generator 启用时,此端点才可用。请参阅 metrics-generator。
更多信息请参阅 一致性哈希环。
Compactor (压缩器) 环状态
GET /compactor/ring
显示一个网页,其中包含 compactor 哈希环的状态,包括每个 compactor 的状态、健康状况和上次心跳时间。
更多信息请参阅 一致性哈希环。
状态
GET /status
默认情况下打印所有可用信息。
GET /status/version
打印版本信息。
GET /status/services
显示服务列表及其状态。如果某个服务失败,则显示失败情况。
GET /status/endpoints
显示关于 API 端点的状态信息。
GET /status/config
显示配置。
显示当前应用于 Tempo 的配置(YAML 格式),包括默认值和通过 CLI 标志设置的值。敏感数据已被屏蔽。请注意,导出的配置**不包括每个租户的 overrides**。
可选查询参数
mode = (diff|defaults)
:diff
显示默认值与当前配置之间的差异。defaults
显示默认值。
GET /status/runtime_config
显示 override 配置。
查询参数
mode = (diff)
:显示默认值与 overrides 之间的差异。
GET /status/overrides
显示所有配置了非默认 overrides 的租户。
GET /status/overrides/{tenant}
显示为指定租户配置的所有 overrides。
GET /status/usage-stats
显示报告给 Grafana Labs 的匿名使用统计数据。
列出构建信息
GET /api/status/buildinfo
以 JSON 对象形式公开构建信息。字段包括 version
、revision
、branch
、buildDate
、buildUser
和 goVersion
。
Tempo gRPC API
Tempo 内部使用 gRPC 进行通信,但只有一个外部支持的客户端。query-frontend 组件实现了下面定义的流式 querier 接口。请参阅 此处 获取完整的 proto 定义和生成的代码。
默认情况下,此服务仅通过 gRPC 端口提供。您也可以通过 HTTP 端口使用流服务,Grafana 期望这样。
要通过 HTTP 端口启用流服务以便与 Grafana 一起使用,请设置以下内容:
stream_over_http_enabled: true
query frontend 支持以下接口。请参阅 tempo.proto
以获取所有对象的完整详细信息。
service StreamingQuerier {
rpc Search(SearchRequest) returns (stream SearchResponse);
rpc SearchTags(SearchTagsRequest) returns (stream SearchTagsResponse) {}
rpc SearchTagsV2(SearchTagsRequest) returns (stream SearchTagsV2Response) {}
rpc SearchTagValues(SearchTagValuesRequest) returns (stream SearchTagValuesResponse) {}
rpc SearchTagValuesV2(SearchTagValuesRequest) returns (stream SearchTagValuesV2Response) {}
rpc MetricsQueryRange(QueryRangeRequest) returns (stream QueryRangeResponse) {}
}
注意
gRPC 压缩默认禁用。更多信息请参阅 gRPC 压缩配置。