菜单
文档面包屑箭头 Grafana Alloy面包屑箭头 参考面包屑箭头 组件面包屑箭头 otelcol面包屑箭头 otelcol.processor.discovery
开源

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

用法

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

参数

otelcol.processor.discovery 支持以下参数

名称类型描述默认值必需
targetslist(map(string))要应用于 Span 的目标标签列表。
operation_typestring配置当 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]
    }
}

使用预配置的属性列表

不必使用 discovery 组件。在下面的示例中,如果 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 具有可供以下组件消费的导出

注意

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