菜单
文档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 需要处理边两边的所有部分,它需要处理跟踪的所有跨度才能正常工作。如果跟踪的跨度分布在多个 Alloy 实例上,则无法可靠地配对跨度。解决这个问题的方法是使用位于运行 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"]no
dimensionslist(string)要添加的维度的列表(与默认维度一起)。[]no
cache_loopduration配置删除未更新的系列的时间间隔。"1m"no
store_expiration_loopduration定期从存储中过期旧条目的时间。"2s"no
metrics_flush_intervalduration将指标刷新到下游组件的时间间隔。"0s"no
database_name_attribute字符串用于从跨度属性中识别数据库名称的属性名称。"db.name"no

服务图通过检查跟踪并查找表示请求的父子关系的跨度来实现。 otelcol.connector.servicegraph 使用 OpenTelemetry 语义约定来检测大量的请求。以下请求目前受支持

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

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

  • 如果跨度的 TTL 在配对之前到期,则将其从存储中删除。TTL 在 存储 块中配置。
  • 如果在跨度到期之前进行配对,则记录度量并删除跨度。

处理器会发出以下度量

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

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

参数latency_histogram_buckets控制了traces_service_graph_request_server_secondstraces_service_graph_request_client_seconds的桶。

每个发出的指标序列都有一个与进行请求的服务和接收请求的服务相对应的clientserver标签。标签的值来源于两个跨度中的service.name资源属性。

标签connection_type可能不会被设置。如果设置了,其值将是messaging_systemdatabase

可以使用dimensions配置选项包含额外的标签。

  • 这些标签将带有前缀以标记它们起源于何处(客户端或服务器跨度类型)。client_前缀与具有Span Kindclient的跨度相关。而server_前缀与具有Span Kindserver的跨度相关。
  • 首先将搜索资源属性。如果找不到属性,则将搜索跨度属性。

当将metrics_flush_interval设置为0s时,指标将在每个接收到的迹批次上刷新。

以下块支持在otelcol.connector.servicegraph定义内部使用。

层次结构描述必需
storestore配置跨度的内存存储。no
outputoutput配置将遥测数据发送到何处。yes
debug_metricsdebug_metrics配置此组件生成的指标以监控其状态。no

store块

store块配置跨度的内存存储。

名称类型描述默认值必需
max_itemsnumber存储中保持的最大项目数。1000no
ttlduration存储中跨度的生存时间。"2s"no

output块

output块配置一组组件,以将结果遥测数据转发到。

以下参数被支持

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

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

debug_metrics块

debug_metrics块配置此组件生成的指标以监控其状态。

以下参数被支持

名称类型描述默认值必需
disable_high_cardinality_metricsboolean是否禁用某些高基数指标。trueno
level字符串控制包装收集器发出的指标细节级别。"detailed"no

disable_high_cardinality_metrics是Grafana Alloy在OpenTelemetry Collector中telemetry.disableHighCardinalityMetrics功能门的等价物。它删除可能导致高基数指标的特性。例如,从HTTP和gRPC连接的指标中删除具有IP地址和端口号的特性。

注意

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

level是OpenTelemetry Collector中telemetry.metrics.level功能门的Alloy等价物。可能的值是"none""basic""normal""detailed"

导出字段

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

名称类型描述
inputotelcol.Consumer其他组件可以使用它来发送遥测数据。

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

组件健康

otelcol.connector.servicegraph只有在给定无效配置时才报告为不健康。

调试信息

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

示例

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

otelcol.connector.servicegraph 还会给每个度量指标添加一个标签,该标签的值是“http.method”标签/资源属性的值。

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 的导出可以被以下组件消费

注意

连接某些组件可能没有意义,或者组件可能需要进一步配置才能正确连接。请参阅链接文档以获取更多详细信息。