菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 参考breadcrumb arrow 组件breadcrumb arrow otelcolbreadcrumb arrow otelcol.connector.servicegraph
开源

otelcol.connector.servicegraph

otelcol.connector.servicegraph 接受来自其他 otelcol 组件的 span 数据,并输出表示系统中各种服务之间关系的指标。一个指标表示服务图中的一条边。这些指标随后可以被数据可视化应用程序(例如 Grafana)用于绘制服务图。

注意otelcol.connector.servicegraph 是对上游 OpenTelemetry Collector servicegraph 连接器的封装。错误报告或功能请求将根据需要重定向到上游存储库。

可以通过为多个 otelcol.connector.servicegraph 组件赋予不同的标签来指定它们。

此组件基于 Grafana Tempo 的服务图处理器

服务图在许多用例中都很有用

  • 推断分布式系统的拓扑结构。随着分布式系统的增长,它们变得越来越复杂。服务图可以帮助您理解系统的结构。
  • 提供系统健康状况的高级概述。服务图显示错误率、延迟和其他相关数据。
  • 提供系统拓扑结构的历史视图。分布式系统变化非常频繁,服务图提供了一种查看这些系统随时间演变的方式。

由于 otelcol.connector.servicegraph 必须处理边的两侧,因此它需要处理跟踪的所有 span 才能正常运行。如果跟踪的 span 分布在多个 Alloy 实例上,则 span 无法可靠地配对。解决此问题的一种方法是在运行 otelcol.connector.servicegraph 的 Alloy 实例前面使用 otelcol.exporter.loadbalancing

用法

alloy
otelcol.connector.servicegraph "LABEL" {
  output {
    metrics = [...]
  }
}

参数

otelcol.connector.servicegraph 支持以下参数

名称类型描述默认值必需
latency_histogram_bucketslist(duration)延迟直方图指标的桶。["2ms", "4ms", "6ms", "8ms", "10ms", "50ms", "100ms", "200ms", "400ms", "800ms", "1s", "1400ms", "2s", "5s", "10s", "15s"]
dimensionslist(string)要与默认维度一起添加的维度列表。[]
cache_loopduration配置删除未更新的序列的频率。"1m"
store_expiration_loopduration定期从存储中使旧条目过期的时长。"2s"
metrics_flush_intervalduration指标刷新到下游组件的时间间隔。"0s"
database_name_attributestring用于从 span 属性中识别数据库名称的属性名称。"db.name"

服务图通过检查跟踪并查找具有父子关系的 span 来工作,这些 span 表示请求。otelcol.connector.servicegraph 使用 OpenTelemetry 语义约定来检测各种请求。目前支持以下请求

  • 两个服务之间的直接请求,其中传出和传入 span 必须分别具有 clientserverSpan Kind 值。
  • 跨消息传递系统的请求,其中传出和传入 span 必须分别具有 producerconsumerSpan Kind 值。
  • 数据库请求,其中 span 具有 Span Kind,其值为 client,以及键为 db.name 的属性。

每个可以配对形成请求的 span 都保存在内存存储中

  • 如果 span 的 TTL 在配对之前过期,则会从存储中删除。TTL 在 store 块中配置。
  • 如果 span 在过期之前配对,则会记录一个指标,并且该 span 会从存储中删除。

处理器发出以下指标

指标类型标签描述
traces_service_graph_request_total计数器client, server, connection_type两个节点之间请求的总数
traces_service_graph_request_failed_total计数器client, server, connection_type两个节点之间失败请求的总数
traces_service_graph_request_server直方图client, server, connection_type从服务器端看到的两个节点之间请求的秒数
traces_service_graph_request_client直方图client, server, connection_type从客户端看到的两个节点之间请求的秒数
traces_service_graph_unpaired_spans_total计数器client, server, connection_type未配对 span 的总数
traces_service_graph_dropped_spans_total计数器client, server, connection_type丢弃 span 的总数

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

latency_histogram_buckets 参数控制 traces_service_graph_request_servertraces_service_graph_request_client 的桶。

每个发出的指标序列都有一个 client 和一个 server 标签,分别对应于发出请求的服务和接收请求的服务。标签的值从两个 span 的 service.name 资源属性派生。

connection_type 标签可能未设置。如果设置,则其值将为 messaging_systemdatabase

可以使用 dimensions 配置选项包含其他标签

  • 这些标签将具有前缀来标记它们的来源(客户端或服务器 span 类型)。client_ 前缀与来自 Span Kindclient 的 span 的维度相关。server_ 前缀与来自 Span Kindserver 的 span 的维度相关。
  • 首先将搜索资源属性。如果未找到该属性,则将搜索 span 属性。

metrics_flush_interval 设置为 0s 时,指标将在每次收到的跟踪批次上刷新。

otelcol.connector.servicegraph 的定义中支持以下块

层级结构描述必需
storestore配置 span 的内存存储。
outputoutput配置将遥测数据发送到何处。
debug_metricsdebug_metrics配置此组件生成的用于监视其状态的指标。

store 块

store 块配置 span 的内存存储。

名称类型描述默认值必需
max_itemsnumber要保留在存储中的最大项目数。1000
ttldurationspan 在存储中的生存时间。"2s"

output 块

output 块配置一组组件,用于将生成的遥测数据转发到这些组件。

支持以下参数

名称类型描述默认值必需
metricslist(otelcol.Consumer)要将指标发送到的消费者列表。[]

您必须指定 output 块,但其所有参数都是可选的。默认情况下,遥测数据会被丢弃。相应地配置 metrics 参数以将遥测数据发送到其他组件。

debug_metrics 块

debug_metrics 块配置此组件生成的用于监视其状态的指标。

支持以下参数

名称类型描述默认值必需
disable_high_cardinality_metricsboolean是否禁用某些高基数指标。true
levelstring控制包装的收集器发出的指标的详细程度。"detailed"

disable_high_cardinality_metrics 是 Grafana Alloy 中 telemetry.disableHighCardinalityMetrics 功能门禁的等效项,在 OpenTelemetry Collector 中。它删除了可能导致高基数指标的属性。例如,删除了有关 HTTP 和 gRPC 连接的指标中包含 IP 地址和端口号的属性。

注意

如果配置了 disable_high_cardinality_metrics,则仅适用于 otelcol.exporter.*otelcol.receiver.* 组件。

level 是 Alloy 中 telemetry.metrics.level 功能门禁的等效项,在 OpenTelemetry Collector 中。可能的值为 "none""basic""normal""detailed"

导出的字段

以下字段已导出,可以被其他组件引用

名称类型描述
inputotelcol.Consumer其他组件可用于向其发送遥测数据的值。

input 接受 otelcol.Consumer 跟踪遥测数据。它不接受指标和日志。

组件运行状况

仅当 otelcol.connector.servicegraph 被赋予无效配置时,才会被报告为不健康。

调试信息

otelcol.connector.servicegraph 不公开任何组件特定的调试信息。

示例

以下示例接受跟踪,从中创建服务图指标,并将指标写入 Mimir。跟踪将写入 Tempo。

otelcol.connector.servicegraph 还向每个指标添加一个标签,其值为 “http.method” span/资源属性的值。

alloy
otelcol.receiver.otlp "default" {
  grpc {
    endpoint = "0.0.0.0:4320"
  }

  output {
    traces  = [otelcol.connector.servicegraph.default.input,otelcol.exporter.otlp.grafana_cloud_traces.input]
  }
}

otelcol.connector.servicegraph "default" {
  dimensions = ["http.method"]
  output {
    metrics = [otelcol.exporter.prometheus.default.input]
  }
}

otelcol.exporter.prometheus "default" {
  forward_to = [prometheus.remote_write.mimir.receiver]
}

prometheus.remote_write "mimir" {
  endpoint {
    url = "https://prometheus-xxx.grafana.net/api/prom/push"

    basic_auth {
      username = sys.env("PROMETHEUS_USERNAME")
      password = sys.env("GRAFANA_CLOUD_API_KEY")
    }
  }
}

otelcol.exporter.otlp "grafana_cloud_traces" {
  client {
    endpoint = "https://tempo-xxx.grafana.net/tempo"
    auth     = otelcol.auth.basic.grafana_cloud_traces.handler
  }
}

otelcol.auth.basic "grafana_cloud_traces" {
  username = sys.env("TEMPO_USERNAME")
  password = sys.env("GRAFANA_CLOUD_API_KEY")
}

Mimir 中的某些指标可能如下所示

traces_service_graph_request_total{client="shop-backend",failed="false",server="article-service",client_http_method="DELETE",server_http_method="DELETE"}
traces_service_graph_request_failed_total{client="shop-backend",client_http_method="POST",failed="false",server="auth-service",server_http_method="POST"}

兼容组件

otelcol.connector.servicegraph 可以接受来自以下组件的参数

otelcol.connector.servicegraph 具有可以被以下组件使用的导出

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。