菜单
开源 RSS

Tempo HTTP API

Tempo 公开了一个 API,用于推送和查询链路追踪数据,以及操作集群本身。

为了清晰起见,API 端点按服务分组。这些端点在微服务模式和单体模式下运行 Tempo 时都会公开。

  • 微服务:每个服务公开自己的端点
  • 单体:Tempo 进程公开内部运行的所有服务的 API 端点

对于外部支持的 gRPC API,请参阅 Tempo gRPC API

端点

API服务类型端点
就绪探针所有服务HTTPGET /ready
指标所有服务HTTPGET /metrics
Pprof所有服务HTTPGET /debug/pprof
接收链路追踪数据Distributor (分发器)-详见相关章节
按 ID 查询链路追踪数据Query-frontend (查询前端)HTTPGET /api/traces/<traceID>
搜索链路追踪数据Query-frontend (查询前端)HTTPGET /api/search?<params>
搜索标签名称Query-frontend (查询前端)HTTPGET /api/search/tags
搜索标签名称 V2Query-frontend (查询前端)HTTPGET /api/v2/search/tags
搜索标签值Query-frontend (查询前端)HTTPGET /api/search/tag/<tag>/values
搜索标签值 V2Query-frontend (查询前端)HTTPGET /api/v2/search/tag/<tag>/values
TraceQL 指标Query-frontend (查询前端)HTTPGET /api/metrics/query_range
TraceQL 指标 (即时)Query-frontend (查询前端)HTTPGET /api/metrics/query
Query Echo 端点Query-frontend (查询前端)HTTPGET /api/echo
Overrides APIQuery-frontend (查询前端)HTTPGET,POST,PATCH,DELETE /api/overrides
MemberlistDistributor (分发器), Ingester (接收器), Querier (查询器), Compactor (压缩器)HTTPGET /memberlist
Flush (刷入)Ingester (接收器)HTTPGET,POST /flush
Shutdown (关闭)Ingester (接收器)HTTPGET,POST /shutdown
使用情况指标Distributor (分发器)HTTPGET /usage_metrics
Distributor (分发器) 环状态 (*)Distributor (分发器)HTTPGET /distributor/ring
Ingester (接收器) 环状态Distributor (分发器), Querier (查询器)HTTPGET /ingester/ring
指标生成器环状态 (*)Distributor (分发器)HTTPGET /metrics-generator/ring
Compactor (压缩器) 环状态Compactor (压缩器)HTTPGET /compactor/ring
状态状态HTTPGET /status
列出构建信息状态HTTPGET /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。

协议类型文档
OpenTelemetrygRPC链接
OpenTelemetryHTTP链接
JaegerThrift Compact链接
JaegerThrift Binary链接
JaegerThrift HTTP链接
JaegergRPC链接
ZipkinHTTP链接

有关如何使用 curl(用于调试)与 OTLP 端点交互的信息,请参阅 使用 HTTP Push Span

如果你使用 Grafana Enterprise Traces (GET),则仅支持 OpenTelemetry (OTLP)。

协议类型文档
OpenTelemetrygRPC链接
OpenTelemetryHTTP链接

查询 (Query)

在微服务部署中,以下请求用于从 query frontend 服务检索链路追踪数据;在单体模式部署中,则从 Tempo 端点检索。

GET /api/traces/<traceid>?start=<start>&end=<end>

参数

  • start = (Unix Epoch 秒) 可选。与 end 一起定义应返回链路追踪数据的时间范围。
  • end = (Unix Epoch 秒) 可选。与 start 一起定义应返回链路追踪数据的时间范围。同时提供 startend 将仅包含指定时间范围内的链路追踪数据。如果未提供参数,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 一起定义应返回链路追踪数据的时间范围。同时提供 startend 将仅包含指定时间范围内的块。

此 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 一起定义应返回链路追踪数据的时间范围。同时提供 startend 将仅包含指定时间范围内的链路追踪数据。如果未提供参数,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 一起定义应返回链路追踪数据的时间范围。同时提供 startend 将仅包含指定时间范围内的块。

返回值

默认情况下,此端点返回带有 OpenTelemetry JSON 格式链路追踪的查询响应,但如果传递 Accept: application/protobuf 头,它也可以发送 OpenTelemetry proto 数据。

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 搜索参数

基于标签的搜索参数

  • 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 一起定义应返回链路追踪数据的时间范围。同时提供 startend 会改变 Tempo 的搜索方式。如果未提供参数,Tempo 将搜索 ingesters 中存储的最新链路追踪数据。如果提供了参数,它也会搜索后端。
  • spss = (整数) 可选。限制每个 span-set 的 Span 数量。默认值为 3。

使用 curl 查询 Tempo 的示例。此查询返回所有状态设置为 error 的链路追踪数据。

bash
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 毫秒的链路追踪数据。

bash
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 的示例。此查询返回所有已发现的标签名称。

bash
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 一起定义应返回标签的时间范围。同时提供 startend 将仅包含指定时间范围内的块。
  • limit = (整数) 可选。限制最大标签值数量。
  • maxStaleValues = (整数) 可选。限制标签名称的搜索。如果过时(已知)值的数量达到或超过此限制,则搜索停止。如果 Tempo 处理了 maxStaleValues 个匹配项而未找到新的标签名称,则搜索将提前返回。

搜索标签 V2

Ingester 配置中的 complete_block_timeout 会影响标签可用于搜索的时长。如果未指定 start 或 end,则仅获取未刷入后端(backend)的块。

此端点检索所有可用于搜索的已发现标签名称。此端点在微服务部署中可通过 query frontend 服务访问,在单体模式部署中可通过 Tempo 端点访问。标签端点接受一个 scope 参数,用于控制返回的标签或属性类型。如果未提供任何值,则该端点返回所有 resource 和 span 标签。

bash
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 一起定义应返回标签的时间范围。同时提供 startend 将仅包含指定时间范围内的块。
  • limit = (整数) 可选。设置每个范围允许的最大标签名称数量。一旦任何范围达到此限制,查询将停止。
  • maxStaleValues = (整数) 可选。限制标签值的搜索。如果过时(已知)值的数量达到或超过此限制,则搜索停止。

示例

使用 curl 查询 Tempo 的示例。此查询返回所有已发现的标签名称。

bash
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 端点访问。以下请求返回所有已发现的服务名称。

bash
GET /api/search/tag/service.name/values

示例

使用 curl 查询 Tempo 的示例。此查询返回标签 service.name 的所有已发现值。

bash
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 一起定义应返回标签的时间范围。同时提供 startend 将仅包含指定时间范围内的块。
  • limit = (整数) 可选。限制最大标签值数量。
  • maxStaleValues = (整数) 可选。限制标签值的搜索。如果过时(已知)值的数量达到或超过此限制,则搜索停止。如果 Tempo 处理了 maxStaleValues 个匹配项而未找到新的标签名称,则搜索将提前返回。

搜索标签值 V2

此端点检索给定 TraceQL 标识符的所有已发现值及其数据类型。此端点在微服务部署中可通过 query frontend 服务访问,在单体模式部署中可通过 Tempo 端点访问。此端点类似于 /api/search/tag/<tag>/values,但操作对象是 TraceQL 标识符和类型。更多信息请参阅 TraceQL 文档。

示例

此示例使用 curl 查询 Tempo,并返回标签 service.name 的所有已发现值。

bash
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 一起定义应返回标签值的时间范围。同时提供 startend 将仅包含指定时间范围内的块。
  • q = (TraceQL 查询) 可选。一个用于过滤标签值的 TraceQL 查询。目前仅适用于由 && 条件组成的单个 spanset。例如:{ span.foo = "bar" && resource.baz = "bat" ...}。请参阅 过滤标签值
  • limit = (整数) 可选。限制最大标签值数量。
  • maxStaleValues = (整数) 可选。限制标签值的搜索。如果过时(已知)值的数量达到或超过此限制,则搜索停止。如果 Tempo 处理了 maxStaleValues 个匹配项而未找到新的标签名称,则搜索将提前返回。

过滤标签值 (Filtered tag values)

你可以在请求中传递一个可选的 URL 查询参数 qq 参数是 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 一起定义时间范围。同时提供 startend 将仅包含指定时间范围内的块。
  • since = (持续时间字符串) 可选。可以用来代替 startend,以相对值定义时间范围。例如,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 一起定义时间范围。同时提供 startend 将仅包含指定时间范围内的块。
  • since = (持续时间字符串) 可选。可以用来代替 startend,以相对值定义时间范围。例如,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 对象形式公开构建信息。字段包括 versionrevisionbranchbuildDatebuildUsergoVersion

Tempo gRPC API

Tempo 内部使用 gRPC 进行通信,但只有一个外部支持的客户端。query-frontend 组件实现了下面定义的流式 querier 接口。请参阅 此处 获取完整的 proto 定义和生成的代码。

默认情况下,此服务仅通过 gRPC 端口提供。您也可以通过 HTTP 端口使用流服务,Grafana 期望这样。

要通过 HTTP 端口启用流服务以便与 Grafana 一起使用,请设置以下内容:

yaml
stream_over_http_enabled: true

query frontend 支持以下接口。请参阅 tempo.proto 以获取所有对象的完整详细信息。

protobuf
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 压缩配置