使用追踪指标查询解决问题
你可以使用类似查询存储在 Prometheus、Grafana Mimir 或其他 Prometheus 兼容时间序列数据库 (TSDB) 中数据的方式,查询 TraceQL 指标生成的数据。TraceQL 指标查询允许你使用 Tempo(你的追踪数据库)即时计算追踪 Span 数据上的指标,而无需像 Prometheus 这样的时间序列数据库。
本页面提供了一个示例,说明如何使用 PromQL 和 TraceQL 两种方式调查传入请求的速率。
RED 指标和查询
Tempo metrics-generator 会发出带有预配置标签的速率 (Rate)、错误 (Error) 和持续时间 (Duration) (RED) 指标以及服务图边缘。生成的指标标签各不相同,但始终包含服务名称。例如,在服务图指标中,作为客户端或服务器类型,或两者兼有。有关更多信息,请参阅 metrics-generator 文档。
你可以使用这些指标来概览应用程序性能。这些指标可以直接与可供查询的追踪 Span 相关联。
TraceQL 指标允许用户直接从 Tempo 查询追踪中的指标,而无需 metrics-generator 组件和随附的 TSDB。
注意
TraceQL 指标仅限于 24 小时的时间范围窗口,并且不能用作 Grafana Managed Alerts 的数据源。对于任何你想在更长时间范围内查询、用于告警或保留超过 30 天的指标,请使用 metrics-generator 将这些指标存储在 Prometheus、Mimir 或其他 Prometheus 兼容的 TSDB 中,并继续使用 PromQL 进行查询。
调查传入请求的速率
假设你想知道应用程序处理了多少请求,以及构成应用程序的每个服务处理了多少请求。这可以帮助你确保应用程序适当扩展,有助于容量规划,并能显示哪些服务可能存在问题并在故障转移场景中承担负载。在 PromQL 中,这些值是根据每次服务调用时递增的计数器计算得出的。这些指标提供了 RED 中的速率 (Rate, R)。
如果你熟悉 PromQL,那么你习惯于构建查询。你可以在 TraceQL 中创建等效查询。以下是针对不同数据源(Mimir 使用 PromQL,Tempo 使用 TraceQL)的两个查询,它们并排显示在 6 小时的时间范围内。
PromQL 查询示例
Tempo metrics-generator 输出一个指标 traces_spanmetrics_calls_total
,这是一个计数器,每次调用服务中的命名 Span 时都会增加。metrics-generator 生成的 RED 数据包含服务名称和 Span 类型。你可以通过过滤 SERVER
Span 类型来仅显示服务在外部被调用时的调用计数,从而显示服务被调用的总次数。
你可以使用 PromQL 的 rate()
和 sum()
函数来检查计数器,并确定每秒发生的调用速率,并按每个服务进行汇总。除了仅查看 kind=server
的 Span 外,你还可以关注来自特定 Kubernetes 命名空间 (ditl-demo-prod
) 的 Span。
sum by (service_name)(rate(traces_spanmetrics_calls_total{service_namespace="ditl-demo-prod", span_kind="SPAN_KIND_SERVER"}[2m]))
TraceQL 查询示例
TraceQL 指标查询允许你以类似的方式检查 Span 的特定子集。如上例所示,你可以首先过滤出发生在特定 Kubernetes 命名空间 (ditl-demo-prod
) 中且类型为 SERVER
的 Span。然后将由此产生的 Span 集通过管道传递给 TraceQL 的 rate
函数,该函数会计算匹配你过滤条件的 Span 的接收速率(单位:Span/秒)。通过添加 by (resource.service.name)
项,查询将返回每个服务的每秒 Span 速率,而不是所有服务的总和。
{ resource.service.namespace="ditl-demo-prod" && kind=server } | rate() by (resource.service.name)