otelcol.processor.discovery
otelcol.processor.discovery
接受来自其他 otelcol
组件的追踪遥测数据。它可以与 discovery.*
组件配对使用,这些组件为每个发现的目标提供标签列表。 otelcol.processor.discovery
向 span 添加资源属性,这些 span 的主机名与 discovery.*
组件提供的 __address__
标签中的主机名匹配。
注意
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 | 字符串 | 配置是否在属性已存在时更新 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]
}
}
使用预配置的属性列表
不一定需要使用发现组件。 在下面的示例中,如果 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
具有可以被以下组件使用的导出
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。 有关更多详细信息,请参阅链接的文档。