otelcol.processor.discovery
otelcol.processor.discovery
接受来自其他 otelcol
组件的追踪遥测数据。它可以与 discovery.*
组件配对使用,discovery.* 组件为每个发现的目标提供标签列表。otelcol.processor.discovery
会将资源属性添加到与 discovery.* 组件提供的 __address__
标签中的主机名匹配的 Span 中。
注意
otelcol.processor.discovery
是一个自定义组件,与 OpenTelemetry Collector 中的任何处理器无关。
可以通过为 otelcol.processor.discovery
组件指定不同的标签来指定多个此类组件。
注意
通过
otelcol.processor.discovery
添加资源属性时,可能难以遵循 OpenTelemetry 语义约定。
discovery.relabel
和大多数discovery.*
进程(例如discovery.kubernetes
)只能发出 Prometheus 兼容的标签。- Prometheus 标签名称使用下划线 (
_
),而 OpenTelemetry 语义约定使用点 (.
)。- 虽然
otelcol.processor.discovery
能够处理非 Prometheus 标签(例如包含点的标签),但 discovery.* 组件通常仅与 Prometheus 命名约定兼容,这使得在otelcol.processor.discovery
中难以遵循 OpenTelemetry 语义约定。如果您的用例是添加包含 Kubernetes 元数据的资源属性,请考虑改用
otelcol.processor.k8sattributes
。
otelcol.processor.discovery
的主要用例是为从 Grafana Agent Static 模式prom_sd_operation_type
/prom_sd_pod_associations
配置选项迁移到 Alloy 的用户。
用法
otelcol.processor.discovery "LABEL" {
targets = [...]
output {
traces = [...]
}
}
参数
otelcol.processor.discovery
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
targets | list(map(string)) | 要应用于 Span 的目标标签列表。 | 是 | |
operation_type | string | 配置当 Span 属性已存在时是否更新。 | upsert | 否 |
pod_associations | list(string) | 配置如何确定 Span 的主机名。 | ["ip", "net.host.ip", "k8s.pod.ip", "hostname", "connection"] | 否 |
targets
可以来自 discovery.*
组件
__address__
标签将与传入 Span 的 IP 地址进行匹配。- 如果
__address__
包含端口,则忽略。
- 如果
- 如果找到匹配项,则应用重新标记规则。
- 请注意,以
__
开头的标签不会添加到 Span 中。
- 请注意,以
operation_type
支持的值为
insert
: 如果键不存在,则插入新的资源属性。update
: 如果键已存在,则更新资源属性。upsert
: 如果键不存在,则插入新的资源属性;如果键已存在,则更新资源属性。
pod_associations
支持的值为
ip
: 主机名将来自 ip 资源属性。net.host.ip
: 主机名将来自 net.host.ip 资源属性。k8s.pod.ip
: 主机名将来自 k8s.pod.ip 资源属性。hostname
: 主机名将来自 host.name 资源属性。connection
: 主机名将来自传入请求的上下文(gRPC 和 HTTP)。
如果启用了多个 pod_associations
方法,则会遵循评估顺序。例如,当 pod_associations
为 ["ip", "net.host.ip"]
时,只有在 "ip" 未匹配时才可能匹配 "net.host.ip"。
块
otelcol.processor.discovery
定义中支持以下块
层级 | 块 | 描述 | 必需 |
---|---|---|---|
output | output | 配置接收到的遥测数据发送到何处。 | 是 |
output 块
output
块配置一组用于转发结果遥测数据的组件。
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
traces | list(otelcol.Consumer) | 要发送追踪数据的消费者列表。 | [] | 否 |
您必须指定 output
块,但其所有参数都是可选的。默认情况下,遥测数据会被丢弃。相应地配置 traces
参数以将遥测数据发送到其他组件。
导出字段
以下字段被导出,可供其他组件引用
名称 | 类型 | 描述 |
---|---|---|
input | otelcol.Consumer | 其他组件可用于发送遥测数据的值。 |
input
接受这些类型的遥测信号的 otelcol.Consumer
OTLP 格式数据
- traces
组件健康状态
otelcol.processor.discovery
仅在配置无效时报告为不健康。
调试信息
otelcol.processor.discovery
不暴露任何组件特定的调试信息。
示例
基本用法
discovery.http "dynamic_targets" {
url = "https://example.com/scrape_targets"
refresh_interval = "15s"
}
otelcol.processor.discovery "default" {
targets = discovery.http.dynamic_targets.targets
output {
traces = [otelcol.exporter.otlp.default.input]
}
}
使用多个发现进程
来自多个发现进程的输出可以通过 array.concat
函数合并。
discovery.http "dynamic_targets" {
url = "https://example.com/scrape_targets"
refresh_interval = "15s"
}
discovery.kubelet "k8s_pods" {
bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
namespaces = ["default", "kube-system"]
}
otelcol.processor.discovery "default" {
targets = array.concat(discovery.http.dynamic_targets.targets, discovery.kubelet.k8s_pods.targets)
output {
traces = [otelcol.exporter.otlp.default.input]
}
}
使用预配置的属性列表
不必使用 discovery 组件。在下面的示例中,如果 Span 的 IP 地址是“1.2.2.2”,则会将 test_label
和 test.label.with.dots
资源属性都添加到该 Span 中。__internal_label__
不会添加到 Span 中,因为它以双下划线 (__
) 开头。
otelcol.processor.discovery "default" {
targets = [{
"__address__" = "1.2.2.2",
"__internal_label__" = "test_val",
"test_label" = "test_val2",
"test.label.with.dots" = "test.val2.with.dots"}]
output {
traces = [otelcol.exporter.otlp.default.input]
}
}
兼容组件
otelcol.processor.discovery
可以接受来自以下组件的参数
- 导出 Targets 的组件
- 导出 OpenTelemetry
otelcol.Consumer
的组件
otelcol.processor.discovery
具有可供以下组件消费的导出
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。请参阅链接的文档以获取更多详细信息。