菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 参考breadcrumb arrow 组件breadcrumb arrow otelcolbreadcrumb arrow otelcol.processor.discovery
开源

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 的用户。

用法

alloy
otelcol.processor.discovery "LABEL" {
  targets = [...]
  output {
    traces  = [...]
  }
}

参数

otelcol.processor.discovery 支持以下参数

名称类型描述默认值必需
targetslist(map(string))要应用于 span 的目标标签列表。
operation_type字符串配置是否在属性已存在时更新 span 的属性。upsert
pod_associationslist(string)配置如何确定 span 的主机名。["ip", "net.host.ip", "k8s.pod.ip", "hostname", "connection"]

targets 可能来自 discovery.* 组件

  1. __address__ 标签将与传入 span 的 IP 地址进行匹配。
    • 如果 __address__ 包含端口,则会被忽略。
  2. 如果找到匹配项,则应用重新标记规则。
    • 请注意,以 __ 开头的标签将不会添加到 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 的定义中支持以下块

层级结构描述必需
outputoutput配置将接收到的遥测数据发送到哪里。

output 块

output 块配置一组组件,用于将生成的遥测数据转发到这些组件。

支持以下参数

名称类型描述默认值必需
traceslist(otelcol.Consumer)要将追踪发送到的消费者列表。[]

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

导出的字段

以下字段已导出,可供其他组件引用

名称类型描述
inputotelcol.Consumer其他组件可用于将遥测数据发送到此的值。

input 接受 otelcol.Consumer OTLP 格式的数据,用于以下类型的遥测信号

  • traces

组件健康状况

仅当 otelcol.processor.discovery 被赋予无效配置时,才会被报告为不健康。

调试信息

otelcol.processor.discovery 不会公开任何组件特定的调试信息。

示例

基本用法

alloy
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 函数组合。

alloy
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_labeltest.label.with.dots 资源属性都将被添加到 span 中。 __internal_label__ 将不会被添加到 span 中,因为它以双下划线 (__) 开头。

alloy
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 可以接受来自以下组件的参数

otelcol.processor.discovery 具有可以被以下组件使用的导出

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。 有关更多详细信息,请参阅链接的文档。