菜单
开源

服务图指标查询

一系列用于服务图的实用 PromQL 查询。

在大多数情况下,用户希望看到其服务图的视觉表示。Grafana 使用 Tempo 创建的服务图指标,并为用户构建可视化。然而,在某些情况下,用户可能希望直接与定义该服务图的指标进行交互。例如,他们可能希望以编程方式分析其服务是如何相互连接的,并构建使用此信息的下游应用程序。

为了提供帮助,我们提供了一系列有用的 PromQL 查询,可用于探索服务图指标。

即时查询

即时查询将在所选时间范围的末尾提供一个单一值。即时查询执行速度更快,并且通常更容易理解其结果。在某些场景下,我们更倾向于使用它们

Instant query in Grafana

服务间的连通性

显示过去 7 天内每个客户端/服务器对的总调用次数

promql
sum(increase(traces_service_graph_request_server_seconds_count{}[7d])) by (server, client) > 0

如果您只想查看单个服务充当服务器的情况

promql
sum(increase(traces_service_graph_request_server_seconds_count{server="foo"}[7d])) by (client) > 0

如果您只想查看单个服务充当客户端的情况

promql
sum(increase(traces_service_graph_request_server_seconds_count{client="foo"}[7d])) by (server) > 0

在上述所有查询中,您可以调整间隔来更改计算的时间量。因此,如果您想对一天的数据进行相同的分析

promql
sum(increase(traces_service_graph_request_server_seconds_count{}[1d])) by (server, client) > 0

范围查询

范围查询非常适合计算一段时间范围内的服务图信息,而不是单个时间点的信息。

Range query in Grafana

服务间随时间变化的速率

以上述两个查询为例,我们可以请求任何给定服务充当客户端或服务器的随时间变化的速率

promql
sum(rate(traces_service_graph_request_server_seconds_count{server="foo"}[5m])) by (client) > 0

sum(rate(traces_service_graph_request_server_seconds_count{client="foo"}[5m])) by (server) > 0

请注意,我们的间隔下降到了 5 分钟。这是为了我们只计算过去 5 分钟内的速率,从而创建更具响应性的图表。

服务间随时间变化的延迟百分位数

这些查询将为我们提供上述速率的延迟分位数。如果我们对任意两个服务之间延迟随时间的变化感兴趣,可以使用这些查询。在以下查询中,.9 表示我们正在计算第 90 个百分位数。如果您想计算不同的延迟百分位数(例如 p50、p95、p99 等),请调整此值。

promql
histogram_quantile(.9, sum(rate(traces_service_graph_request_server_seconds_bucket{client="foo"}[5m])) by (server, le))

使用消息传递系统延迟的可选指标来查看潜在的中间件延迟

promql
histogram_quantile(.9, sum(rate(traces_service_graph_request_messaging_system_seconds_bucket{}[5m])) by (client, server, le))