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

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 配置选项

用法

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

参数

otelcol.processor.discovery 支持以下参数

名称类型描述默认值必需
targetslist(map(string))将应用到的 span 的目标标签列表。yes
operation_typestring配置是否在属性已存在的情况下更新 span 的属性。upsertno
pod_associationslist(string)配置决定 span 主机名的方式。["ip", "net.host.ip", "k8s.pod.ip", "hostname", "connection"]no

targets 可以来自 discovery.* 组件

  1. 标签 __address__ 将与传入边界的 IP 地址进行比较。
    • 如果 __address__ 包含端口号,则会被忽略。
  2. 如果找到匹配项,则应用重新标记规则。
    • 请注意,以 __ 开头的标签不会被添加到边界中。

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 不暴露任何特定组件的调试信息。

示例

基本用法

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]
    }
}

使用多个发现过程

可以通过 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 = concat(discovery.http.dynamic_targets.targets, discovery.kubelet.k8s_pods.targets)

    output {
        traces = [otelcol.exporter.otlp.default.input]
    }
}

使用预配置的属性列表

并非必须使用发现组件。在下面的示例中,如果边界的 IP 地址是 "1.2.2.2",则将 test_labeltest.label.with.dots 资源属性添加到边界中。因为 __internal_label__ 以双下划线 (__) 开头,所以它不会被添加到边界中。

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 的导出可以被以下组件消费

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能正确工作。请参阅相关文档以获取更多详细信息。