telcol处理器发现
otelcol.processor.discovery
接受来自其他 otelcol
组件的跟踪遥测数据。它可以与提供每个发现目标标签列表的 discovery.*
组件配对。 otelcol.processor.discovery
将资源属性添加到与 discovery.*
组件提供的 __address__
标签中的主机名匹配的 span。
注意
otelcol.processor.discovery
是一个与 OpenTelemetry Collector 的任何处理器无关的自定义组件。
可以通过提供不同的标签来指定多个 otelcol.processor.discovery
组件。
注意
通过
otelcol.processor.discovery
添加资源属性时,很难遵循OpenTelemetry 语义约定。
discovery.relabel
和大多数如discovery.kubernetes
之类的discovery.*
流程只能发出兼容 Prometheus 的标签。- Prometheus 标签在标签名称中使用下划线 (
_
),而 OpenTelemetry 语义约定 使用点 (.
)。- 尽管
otelcol.processor.discovery
能够与非 Prometheus 标签(如包含点的标签)一起工作,但discovery.*
组件通常仅与 Prometheus 命名约定兼容的事实使得在otelcol.processor.discovery
中遵循 OpenTelemetry 语义约定变得困难。如果您要添加包含 Kubernetes 元数据的资源属性,请考虑使用
otelcol.processor.k8sattributes
。
otelcol.processor.discovery
的主要用例是对于从 Grafana Agent 静态模式迁移到 Alloy 的用户prom_sd_operation_type
/prom_sd_pod_associations
配置选项。
用法
otelcol.processor.discovery "LABEL" {
targets = [...]
output {
traces = [...]
}
}
参数
otelcol.processor.discovery
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
targets | list(map(string)) | 将应用到的 span 的目标标签列表。 | yes | |
operation_type | string | 配置是否在属性已存在的情况下更新 span 的属性。 | upsert | no |
pod_associations | list(string) | 配置决定 span 主机名的方式。 | ["ip", "net.host.ip", "k8s.pod.ip", "hostname", "connection"] | no |
targets 可以来自 discovery.*
组件
- 标签
__address__
将与传入边界的 IP 地址进行比较。- 如果
__address__
包含端口号,则会被忽略。
- 如果
- 如果找到匹配项,则应用重新标记规则。
- 请注意,以
__
开头的标签不会被添加到边界中。
- 请注意,以
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
定义内部使用
层次结构 | 块 | 描述 | 必需 |
---|---|---|---|
输出 | 输出 | 配置发送接收到的遥测数据的地点。 | yes |
输出块
输出块配置了一组组件,用于将最终遥测数据转发到。
以下参数被支持
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
跟踪 | list(otelcol.Consumer) | 要发送跟踪的消费者的列表。 | [] | no |
必须指定输出块,但其所有参数都是可选的。默认情况下,遥测数据会被丢弃。按照相应配置 traces
参数,可以将遥测数据发送到其他组件。
导出字段
以下字段被导出,并且可以被其他组件引用
名称 | 类型 | 描述 |
---|---|---|
输入 | otelcol.Consumer | 其他组件可以使用它来发送遥测数据的一个值。 |
input
接受以 OTLP 格式的 otelcol.Consumer
数据,用于发送这些类型的遥测信号
- 跟踪
组件健康
只有在不提供有效配置的情况下,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]
}
}
使用多个发现过程
可以通过 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 = concat(discovery.http.dynamic_targets.targets, discovery.kubelet.k8s_pods.targets)
output {
traces = [otelcol.exporter.otlp.default.input]
}
}
使用预配置的属性列表
并非必须使用发现组件。在下面的示例中,如果边界的 IP 地址是 "1.2.2.2",则将 test_label
和 test.label.with.dots
资源属性添加到边界中。因为 __internal_label__
以双下划线 (__
) 开头,所以它不会被添加到边界中。
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
可以接受来自以下组件的参数
- 导出 目标 的组件
- 导出 OpenTelemetry
otelcol.Consumer
的组件
otelcol.processor.discovery
的导出可以被以下组件消费
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正确工作。请参阅相关文档以获取更多详细信息。