otelcol.connector.servicegraph
otelcol.connector.servicegraph
接收来自其他 otelcol
组件的跨度数据,并输出表示系统中各种服务之间关系的指标。指标代表服务图中的边。然后,数据可视化应用程序(例如 Grafana)可以使用这些指标绘制服务图。
注意:
otelcol.connector.servicegraph
是上游 OpenTelemetry Collectorservicegraph
连接器的包装器。如有必要,错误报告或功能请求将被重定向到上游存储库。
可以通过为多个 otelcol.connector.servicegraph
组件指定不同的标签来指定它们。
此组件基于 Grafana Tempo 的服务图处理器.
服务图对许多用例很有用
- 推断分布式系统的拓扑结构。随着分布式系统的增长,它们变得更加复杂。服务图可以帮助您了解系统的结构。
- 提供系统健康状况的高级概述。服务图显示错误率、延迟和其他相关数据。
- 提供系统的拓扑结构的历史视图。分布式系统变化非常频繁,服务图提供了一种查看这些系统如何随时间演变的方法。
由于 otelcol.connector.servicegraph
必须处理边的两侧,因此它需要处理跟踪的所有跨度才能正常工作。如果跟踪的跨度分布在多个 Alloy 实例上,则无法可靠地配对跨度。解决此问题的一种方法是在运行 otelcol.connector.servicegraph
的 Alloy 实例前面使用 otelcol.exporter.loadbalancing.
用法
otelcol.connector.servicegraph "LABEL" {
output {
metrics = [...]
}
}
参数
otelcol.connector.servicegraph
支持以下参数
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
latency_histogram_buckets | list(duration) | 延迟直方图指标的桶。 | ["2ms", "4ms", "6ms", "8ms", "10ms", "50ms", "100ms", "200ms", "400ms", "800ms", "1s", "1400ms", "2s", "5s", "10s", "15s"] | 否 |
dimensions | list(string) | 要添加的维度列表,以及默认维度。 | [] | 否 |
cache_loop | duration | 配置多久删除一次未更新的系列。 | "1m" | 否 |
store_expiration_loop | duration | 定期从存储中过期旧条目的时间。 | "2s" | 否 |
metrics_flush_interval | duration | 指标刷新到下游组件的间隔。 | "0s" | 否 |
database_name_attribute | string | 用于从跨度属性中识别数据库名称的属性名称。 | "db.name" | 否 |
服务图通过检查跟踪并查找表示请求的具有父子关系的跨度来工作。otelcol.connector.servicegraph
使用 OpenTelemetry 语义约定来检测各种请求。目前支持以下请求
- 两个服务之间的直接请求,其中传出跨度和传入跨度必须分别具有 跨度类型 值为
client
和server
。 - 跨越消息系统的请求,其中传出跨度和传入跨度必须分别具有 跨度类型 值为
producer
和consumer
。 - 数据库请求,其中跨度具有 跨度类型 值为
client
,以及键为db.name
的属性。
可以配对以形成请求的每个跨度都保存在内存中的存储中
- 如果跨度的 TTL 在它可以配对之前过期,它将从存储中删除。TTL 在 store 块中配置。
- 如果跨度在过期之前配对,则会记录指标,跨度会从存储中删除。
处理器发出以下指标
指标 | 类型 | 标签 | 描述 |
---|---|---|---|
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_seconds
和 traces_service_graph_request_client_seconds
的桶。
每个发出的指标系列都有一个 client
和一个 server
标签,分别对应于发出请求的服务和接收请求的服务。标签的值源于两个跨度的 service.name
资源属性。
connection_type
标签可能不会设置。如果设置,它的值将为 messaging_system
或 database
。
可以使用 dimensions
配置选项包含其他标签
- 这些标签将有一个前缀来标记它们起源于哪里(客户端或服务器跨度类型)。
client_
前缀与来自具有 跨度类型 为client
的跨度的维度相关。server_
前缀与来自具有 跨度类型 为server
的跨度的维度相关。 - 首先将搜索资源属性。如果找不到属性,将搜索跨度属性。
当 metrics_flush_interval
设置为 0s
时,指标将在每批接收到的跟踪数据中刷新。
块
otelcol.connector.servicegraph
的定义中支持以下块
层次结构 | 块 | 描述 | 必需 |
---|---|---|---|
store | store | 配置跨度的内存存储。 | 否 |
output | output | 配置要将遥测数据发送到哪里。 | 是 |
debug_metrics | debug_metrics | 配置此组件生成的用于监视其状态的指标。 | 否 |
store 块
store
块配置跨度的内存存储。
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
max_items | number | 存储中要保留的最大项目数。 | 1000 | 否 |
ttl | duration | 跨度在存储中的生存时间。 | "2s" | 否 |
output 块
output
块配置一组组件以将生成的遥测数据转发到这些组件。
支持以下参数
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
metrics | list(otelcol.Consumer) | 要将指标发送到的消费者列表。 | [] | 否 |
您必须指定 output
块,但所有参数都是可选的。默认情况下,遥测数据会被丢弃。相应地配置 metrics
参数以将遥测数据发送到其他组件。
debug_metrics 块
debug_metrics
块配置此组件生成的用于监视其状态的指标。
支持以下参数
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
disable_high_cardinality_metrics | boolean | 是否禁用某些高基数指标。 | true | 否 |
level | string | 控制包装的收集器发出的指标的详细程度。 | "detailed" | 否 |
disable_high_cardinality_metrics
等于 OpenTelemetry Collector 中的 telemetry.disableHighCardinalityMetrics
功能门。它删除了可能导致高基数指标的属性。例如,关于 HTTP 和 gRPC 连接的指标中的带有 IP 地址和端口号的属性将被删除。
注意
如果配置了,disable_high_cardinality_metrics
仅适用于otelcol.exporter.*
和otelcol.receiver.*
组件。
level
等于 OpenTelemetry Collector 中的 telemetry.metrics.level
功能门。可能的值为 "none"
、"basic"
、"normal"
和 "detailed"
。
导出字段
以下字段是导出的,可以被其他组件引用
名称 | 类型 | 描述 |
---|---|---|
input | otelcol.Consumer | 其他组件可以使用该值来发送遥测数据。 |
input
接受 otelcol.Consumer
跟踪遥测数据。它不接受指标和日志。
组件健康状况
只有在给出无效配置的情况下,otelcol.connector.servicegraph
才会报告为不健康。
调试信息
otelcol.connector.servicegraph
不公开任何特定于组件的调试信息。
示例
下面的示例接受跟踪,从中创建服务图指标,并将指标写入 Mimir。跟踪数据写入 Tempo。
otelcol.connector.servicegraph
还为每个指标添加一个标签,其值为“http.method”跨度/资源属性的值。
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 = env("PROMETHEUS_USERNAME")
password = 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 = env("TEMPO_USERNAME")
password = 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
具有可被以下组件使用的导出
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。