;Metrics-generator;服务图

服务图

服务图是各种服务之间相互关系的可视化表示。服务图帮助您理解分布式系统的结构,以及组件之间的连接和依赖关系:

  • 推断分布式系统的拓扑结构。随着分布式系统的发展,它们变得更加复杂。服务图帮助您理解系统的结构。
  • 提供系统运行状况的高级概述。服务图显示错误率、延迟以及其他相关数据。
  • 提供系统拓扑的历史视图。分布式系统变化非常频繁,服务图提供了一种查看这些系统如何随时间发展的方法。

服务图示例

它们是如何工作的

度量生成器以prometheus度量的形式处理跟踪并生成服务图。

服务图的工作原理是检查跟踪并寻找具有表示请求的父子关系的跨度。处理器使用OpenTelemetry语义约定检测无数的请求。它目前支持以下请求:

  • 两个服务之间的直接请求,其中传出和传入跨度必须具有span.kind客户端而且服务器分别。
  • 跨消息传递系统的请求,其中传出和传入范围必须具有span.kind生产商而且消费者分别。
  • 一个数据库请求;在这种情况下,处理器查找包含属性的spanspan.kind客户端还有db.name

每个可以配对形成请求的span都保存在内存存储中,直到接收到其对应的pair span或超过最大等待时间。当达到这些条件中的任何一个时,将记录请求并从本地存储中删除。

每个发出的指标系列都具有客户端而且服务器与执行请求的服务和接收请求的服务对应的标签。

20 . Tempo_service_graph_request_total {client="app", server="db", connection_type="database"

指标

导出的指标如下:

度规 类型 标签 描述
traces_service_graph_request_total 计数器 客户端,服务器,连接类型 两个节点之间的请求总数
traces_service_graph_request_failed_total 计数器 客户端,服务器,连接类型 两个节点之间失败的请求总数
traces_service_graph_request_server_seconds 柱状图 客户端,服务器,连接类型 从服务器上看到的两个节点之间请求的时间
traces_service_graph_request_client_seconds 柱状图 客户端,服务器,连接类型 从客户端看到的两个节点之间请求的时间
traces_service_graph_unpaired_spans_total 计数器 客户端,服务器,连接类型 未配对span的总数
traces_service_graph_dropped_spans_total 计数器 客户端,服务器,连接类型 丢失跨度的总数

持续时间从客户端和服务器端同时测量。

可能的值为connection_type:设置,messaging_system,或数据库

属性可以包含其他标签配置选项。

由于服务图处理器必须处理边缘的两边,因此它需要处理跟踪的所有范围才能正常工作。如果跟踪的跨度分布在多个实例上,那么跨度就不能可靠地配对。

基数

当您拥有大量服务时,基数性可能会带来问题。这个问题没有一个直接的公式或解决方案。但是下面的指南应该有助于估计该特性将生成的基数。

如何估计基数

来自轨迹的基数

边的数量取决于系统中节点的数量以及它们之间请求的方向。我们称它为跳数。每一跳都是客户机+服务器标签的唯一组合。

例如:

  • 一个有三个节点的系统(a, b, c)其中A只调用B B只调用C将有2跳(a→b, b→c)
  • 一个有三个节点的系统(a, b, c)相互调用(即所有双向链接)将有6跳(a→b, b→a, b→c, c→b, a→c, c→a)

我们不能根据节点自动计算跳数,但它应该是之间的值#services - 1而且#服务!

如果我们知道系统中的跳数,我们可以计算生成的服务图的基数:

traces_service_graph_request_failed_total: #hops traces_service_graph_request_server_seconds: 3个桶* #hops traces_service_graph_request_client_seconds: 3个桶* #hops traces_service_graph_unpaired_spans_total: #services(绝对最坏情况)traces_service_graph_dropped_spans_total: #services(绝对最坏情况)

最后得到如下基数估计:

和:8 * #跳数+ 2 * #服务

运行参数生成器

通常最可靠的解决方案是在干运行模式下运行度量生成器。这是生成指标,但不收集它们,因此不将它们写入指标存储。覆盖metrics_generator_disable_collection为此用例定义。

要获得估算,正常运行metrics-generator并将重写设置为.然后,检查tempo_metrics_generator_registry_active_series来估计这种情况下的活动级数。

如何跑步

服务图在Tempo中生成,并推送到度量存储中。然后,它们可以在Grafana中表示为图。您将需要这些组件来充分使用服务图。

节奏

要在Tempo/GET中启用服务图,请启用度量生成器并添加一个覆盖部分service-graphs发电机。看到这里是配置细节

Grafana

请注意从9.0.4开始,Grafana默认启用了服务图。在Grafana 9.0.4之前,服务图隐藏在功能切换tempoServiceGraph

通过链接到发送指标的Prometheus后端来配置Tempo数据源的“服务图表”:

apiVersion: 1 datasources: # Prometheus后端,其中度量被发送- name: Prometheus类型:Prometheus uid: Prometheus url: < Prometheus -url> jsonData: httpMethod: GET版本:1 - name: Tempo类型:Tempo uid: Tempo url: < Tempo -url> jsonData: httpMethod: GET serviceMap: datasourceUid: ' Prometheus '版本:1