×

处理器处理接收和导出数据之间的数据。处理器是可选的。默认情况下,不启用任何处理器。必须为每个数据源启用处理器。并非所有处理器都支持所有数据源。根据数据源的不同,可以启用多个处理器。请注意,处理器的顺序很重要。

批量处理器

批量处理器将跟踪和指标批量处理,以减少传输遥测信息所需的传出连接数。

使用批处理处理器时的OpenTelemetry Collector自定义资源示例
# ...
  config: |
    processors:
      batch:
        timeout: 5s
        send_batch_max_size: 10000
    service:
      pipelines:
        traces:
          processors: [batch]
        metrics:
          processors: [batch]
# ...
表1. 批处理处理器使用的参数
参数 描述 默认值

timeout

在特定时间段后发送批次,而不管批次大小。

200ms

send_batch_size

发送指定数量的跨度或指标的遥测数据批次。

8192

send_batch_max_size

批次的允许最大大小。必须等于或大于send_batch_size

0

metadata_keys

激活后,将为client.Metadata中找到的每组唯一值创建一个批处理程序实例。

[]

metadata_cardinality_limit

当填充metadata_keys时,此配置会限制在整个处理过程中处理的唯一元数据键值对的数量。

1000

内存限制器处理器

内存限制器处理器定期检查 Collector 的内存使用情况,并在达到软内存限制时暂停数据处理。此处理器支持跟踪、指标和日志。前面的组件(通常是接收器)应重试发送相同的数据,并可能对传入数据施加背压。当内存使用量超过硬限制时,内存限制器处理器将强制运行垃圾回收。

使用内存限制器处理器时的OpenTelemetry Collector自定义资源示例
# ...
  config: |
    processors:
      memory_limiter:
        check_interval: 1s
        limit_mib: 4000
        spike_limit_mib: 800
    service:
      pipelines:
        traces:
          processors: [batch]
        metrics:
          processors: [batch]
# ...
表2. 内存限制器处理器使用的参数
参数 描述 默认值

check_interval

内存使用情况测量之间的时间间隔。最佳值为1s。对于峰值流量模式,您可以减少check_interval或增加spike_limit_mib

0s

limit_mib

硬限制,即在堆上分配的最大内存量(以MiB为单位)。通常,OpenTelemetry Collector 的总内存使用量比此值大约大 50 MiB。

0

spike_limit_mib

峰值限制,即内存使用量的最大预期峰值(以MiB为单位)。最佳值约为limit_mib的 20%。要计算软限制,请从limit_mib中减去spike_limit_mib

limit_mib的20%

limit_percentage

limit_mib相同,但表示为可用总内存的百分比。limit_mib设置优先于此设置。

0

spike_limit_percentage

spike_limit_mib相同,但表示为可用总内存的百分比。旨在与limit_percentage设置一起使用。

0

资源检测处理器

资源检测处理器根据 OpenTelemetry 的资源语义标准识别主机资源详细信息。使用检测到的信息,此处理器可以添加或替换遥测数据中的资源值。此处理器支持跟踪和指标。您可以将此处理器与多个检测器一起使用,例如 Docket 元数据检测器或OTEL_RESOURCE_ATTRIBUTES环境变量检测器。

资源检测处理器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的抢先体验,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

资源检测处理器所需的 OpenShift Container Platform 权限
kind: ClusterRole
metadata:
  name: otel-collector
rules:
- apiGroups: ["config.openshift.io"]
  resources: ["infrastructures", "infrastructures/status"]
  verbs: ["get", "watch", "list"]
# ...
使用资源检测处理器的 OpenTelemetry Collector
# ...
  config: |
    processors:
      resourcedetection:
        detectors: [openshift]
        override: true
    service:
      pipelines:
        traces:
          processors: [resourcedetection]
        metrics:
          processors: [resourcedetection]
# ...
使用环境变量检测器的资源检测处理器的 OpenTelemetry Collector
# ...
  config: |
    processors:
      resourcedetection/env:
        detectors: [env] (1)
        timeout: 2s
        override: false
# ...
1 指定要使用的检测器。在此示例中,指定了环境检测器。

属性处理器

属性处理器可以修改跨度、日志或指标的属性。您可以配置此处理器以过滤和匹配输入数据,并为特定操作包含或排除此类数据。

属性处理器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的抢先体验,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

此处理器对操作列表进行操作,按配置中指定的顺序执行它们。支持以下操作

插入

当指定的键尚不存在时,将新属性插入输入数据。

更新

如果键已存在,则更新输入数据中的属性。

Upsert

组合插入和更新操作:如果键尚不存在,则插入新属性。如果键已存在,则更新属性。

删除

从输入数据中删除属性。

哈希

将现有属性值哈希为 SHA1。

提取

使用正则表达式规则从输入键提取值到规则中定义的目标键。如果目标键已存在,则类似于 Span 处理器的to_attributes设置那样覆盖它,其中现有属性作为源。

转换

将现有属性转换为指定的类型。

使用属性处理器的 OpenTelemetry Collector
# ...
  config: |
    processors:
      attributes/example:
        actions:
          - key: db.table
            action: delete
          - key: redacted_span
            value: true
            action: upsert
          - key: copy_key
            from_attribute: key_original
            action: update
          - key: account_id
            value: 2245
            action: insert
          - key: account_password
            action: delete
          - key: account_email
            action: hash
          - key: http.status_code
            action: convert
            converted_type: int
# ...

资源处理器

资源处理器将更改应用于资源属性。此处理器支持跟踪、指标和日志。

资源处理器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的抢先体验,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

使用资源检测处理器的 OpenTelemetry Collector
# ...
  config: |
    processors:
      attributes:
      - key: cloud.availability_zone
        value: "zone-1"
        action: upsert
      - key: k8s.cluster.name
        from_attribute: k8s-cluster
        action: insert
      - key: redundant-attribute
        action: delete
# ...

属性表示应用于资源属性的操作,例如删除属性、插入属性或更新属性。

跨度处理器

跨度处理器根据其属性修改跨度名称,或从跨度名称中提取跨度属性。此处理器还可以更改跨度状态并包含或排除跨度。此处理器支持跟踪。

跨度重命名需要使用from_attributes配置指定新名称的属性。

跨度处理器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的抢先体验,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

使用跨度处理器重命名跨度的 OpenTelemetry Collector
# ...
  config: |
    processors:
      span:
        name:
          from_attributes: [<key1>, <key2>, ...] (1)
          separator: <value> (2)
# ...
1 定义形成新跨度名称的键。
2 可选的分隔符。

您可以使用此处理器从跨度名称中提取属性。

使用跨度处理器从跨度名称中提取属性的 OpenTelemetry Collector
# ...
  config: |
    processors:
      span/to_attributes:
        name:
          to_attributes:
            rules:
              - ^\/api\/v1\/document\/(?P<documentId>.*)\/update$ (1)
# ...
1 此规则定义如何执行提取。您可以定义更多规则:例如,在本例中,如果正则表达式与名称匹配,则会创建一个documentID属性。在本例中,如果输入跨度名称为/api/v1/document/12345678/update,则会产生/api/v1/document/{documentId}/update输出跨度名称,并且会向跨度添加一个新的"documentId"="12345678"属性。

您可以修改跨度状态。

使用跨度处理器更改状态的 OpenTelemetry Collector
# ...
  config: |
    processors:
      span/set_status:
        status:
          code: Error
          description: "<error_description>"
# ...

Kubernetes 属性处理器

Kubernetes 属性处理器通过使用 Kubernetes 元数据,可以自动配置跨度、指标和日志资源属性。此处理器支持跟踪、指标和日志。此处理器自动识别 Kubernetes 资源,从中提取元数据,并将此提取的元数据作为资源属性添加到相关的跨度、指标和日志中。它利用 Kubernetes API 来发现集群中运行的所有 Pod,维护其 IP 地址、Pod UID 和其他相关元数据的记录。

Kubernetes 属性处理器所需的最小 OpenShift Container Platform 权限
kind: ClusterRole
metadata:
  name: otel-collector
rules:
  - apiGroups: ['']
    resources: ['pods', 'namespaces']
    verbs: ['get', 'watch', 'list']
# ...
使用 Kubernetes 属性处理器的 OpenTelemetry Collector
# ...
  config: |
    processors:
         k8sattributes:
             filter:
                 node_from_env_var: KUBE_NODE_NAME
# ...

过滤器处理器

过滤器处理器利用 OpenTelemetry 变换语言来建立丢弃遥测数据的标准。如果满足任何这些条件,则会丢弃遥测数据。您可以使用逻辑 OR 运算符组合这些条件。此处理器支持跟踪、指标和日志。

过滤器处理器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

启用了 OTLP 导出器的 OpenTelemetry Collector 自定义资源
# ...
config: |
  processors:
    filter/ottl:
      error_mode: ignore (1)
      traces:
        span:
          - 'attributes["container.name"] == "app_container_1"' (2)
          - 'resource.attributes["host.name"] == "localhost"' (3)
# ...
1 定义错误模式。设置为ignore时,忽略条件返回的错误。设置为propagate时,将错误返回到管道。错误会导致有效负载从 Collector 中删除。
2 过滤具有container.name == app_container_1属性的跨度。
3 过滤具有host.name == localhost资源属性的跨度。

路由处理器

路由处理器将日志、指标或跟踪路由到特定导出器。此处理器可以从传入的 gRPC 或普通 HTTP 请求中读取标头,或者读取资源属性,然后根据读取的值将跟踪信息定向到相关的导出器。

路由处理器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

启用了 OTLP 导出器的 OpenTelemetry Collector 自定义资源
# ...
config: |
  processors:
    routing:
      from_attribute: X-Tenant (1)
      default_exporters: (2)
      - jaeger
      table: (3)
      - value: acme
        exporters: [jaeger/acme]
  exporters:
    jaeger:
      endpoint: localhost:14250
    jaeger/acme:
      endpoint: localhost:24250
# ...
1 执行路由时查找值的 HTTP 标头名称。
2 当属性值不存在于下一节中的表中时的默认导出器。
3 定义哪些值应路由到哪些导出器的表。

可以选择创建一个attribute_source配置,该配置定义了在哪里查找在from_attribute字段中指定的属性。支持的值包括用于搜索包含 HTTP 标头的上下文的context,以及用于搜索资源属性的resource

累积到增量处理器

累积到增量处理器将单调、累积和和直方图指标转换为单调增量指标。

您可以使用include:exclude:字段并指定strictregexp指标名称匹配来过滤指标。

此处理器不转换非单调和和指数直方图。

累积到增量处理器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

启用了累积到增量处理器的 OpenTelemetry Collector 自定义资源示例
# ...
config: |
  processors:
    cumulativetodelta:
      include: (1)
        match_type: strict (2)
        metrics: (3)
        - <metric_1_name>
        - <metric_2_name>
      exclude: (4)
        match_type: regexp
        metrics:
        - "<regular_expression_for_metric_names>"
# ...
1 可选:配置要包含的指标。省略时,除exclude字段中列出的指标外,所有指标都将转换为增量指标。
2 metrics字段中提供的值定义为strict精确匹配或regexp正则表达式。
3 列出要转换为增量指标的指标的指标名称(精确匹配或正则表达式匹配)。如果指标同时匹配includeexclude过滤器,则exclude过滤器优先。
4 可选:配置要排除的指标。省略时,不会从转换为增量指标中排除任何指标。

按属性分组处理器

按属性分组处理器通过将共享相同属性的所有跨度、日志记录和指标数据点重新分配到与这些属性匹配的资源来对它们进行分组。

按属性分组处理器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

至少,配置此处理器需要指定一个属性键数组,用于将跨度、日志记录或指标数据点组合在一起,如下例所示

# ...
processors:
  groupbyattrs:
    keys: (1)
      - <key1> (2)
      - <key2>
# ...
1 指定要分组的属性键。
2 如果已处理的跨度、日志记录或指标数据点包含至少一个指定的属性键,则将其重新分配到共享相同属性值的资源;如果不存在此类资源,则会创建一个新的资源。如果已处理的跨度、日志记录或指标数据点中不存在任何指定的属性键,则它将与其当前资源相关联。相同资源的多个实例将被合并。

转换处理器

转换处理器允许根据指定的规则和OpenTelemetry 变换语言 (OTTL)修改遥测数据。对于每种信号类型,处理器都会处理与特定 OTTL 上下文类型相关的一系列条件和语句,然后根据配置按顺序对传入的遥测数据执行这些条件和语句。每个条件和语句都可以使用各种函数访问和修改遥测数据,允许条件决定是否执行函数。

所有语句都使用 OTTL 编写。您可以为不同的信号、跟踪、指标和日志配置多个上下文语句。context类型的值为处理器解释关联语句时必须使用的OTTL上下文。

转换处理器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

配置摘要
# ...
config: |
  processors:
    transform:
      error_mode: ignore (1)
      <trace|metric|log>_statements: (2)
        - context: <string> (3)
          conditions:  (4)
            - <string>
            - <string>
          statements: (5)
            - <string>
            - <string>
            - <string>
        - context: <string>
          statements:
            - <string>
            - <string>
            - <string>
# ...
1 可选:请参见下表“可选error_mode字段的值”。
2 指示要转换的信号。
3 请参见下表“context字段的值”。
4 可选:执行转换的条件。
配置示例
# ...
config: |
  transform:
    error_mode: ignore
    trace_statements: (1)
      - context: resource
        statements:
          - keep_keys(attributes, ["service.name", "service.namespace", "cloud.region", "process.command_line"]) (2)
          - replace_pattern(attributes["process.command_line"], "password\\=[^\\s]*(\\s?)", "password=***") (3)
          - limit(attributes, 100, [])
          - truncate_all(attributes, 4096)
      - context: span (4)
        statements:
          - set(status.code, 1) where attributes["http.path"] == "/health"
          - set(name, attributes["http.route"])
          - replace_match(attributes["http.target"], "/user/*/list/*", "/user/{userId}/list/{listId}")
          - limit(attributes, 100, [])
          - truncate_all(attributes, 4096)
# ...
1 转换跟踪信号。
2 保留资源上的键。
3 替换属性,并将密码字段中的字符串字符替换为星号。
4 在跨度级别执行转换。
表 3. context 字段的值
信号语句 有效上下文

trace_statements

resourcescopespanspanevent

metric_statements

resourcescopemetricdatapoint

log_statements

resourcescopelog

表 4. 可选 error_mode 字段的值
描述

ignore

忽略并记录语句返回的错误,然后继续执行下一条语句。

silent

忽略并不会记录语句返回的错误,然后继续执行下一条语句。

propagate

将错误返回到管道并丢弃有效负载。隐式默认值。