5.2. 配置和部署分布式追踪数据收集

Red Hat OpenShift distributed tracing 数据收集 Operator 使用自定义资源定义(CRD)文件来定义创建和部署分布式追踪数据收集资源时要使用的架构和配置设置。您可以安装默认配置或修改该文件。

5.2.1. OpenTelemetry Collector 配置选项

OpenTelemetry Collector 由访问遥测数据的三个组件组成:

Receivers
可以推送或拉取的接收器(基于推送或拉取)是数据如何进入 Collector 中。通常,接收器接受指定格式的数据,将其转换为内部格式,并将其传递给适用管道中定义的处理器和导出器。默认情况下,不会配置接收器。必须配置一个或多个接收器。接收器可以支持一个或多个数据源。
Processors
可选。处理器通过数据接收和导出。默认情况下,不启用处理器。每个数据源都必须启用处理器。不是所有处理器都支持所有数据源。根据数据源,可能会启用多个处理器。请注意,处理器的顺序很重要。
Exporters
可以推送或拉取的导出器是如何将数据发送到一个或多个后端或目的地。默认情况下,不会配置导出器。必须配置一个或多个导出器。导出器可以支持一个或多个数据源。导出器可能会与其默认设置一起使用,但许多导出器需要配置来至少指定目标和安全设置。

您可以在自定义资源 YAML 文件中定义多个组件实例。配置后,必须通过 YAML 文件的 spec.config.service 部分中定义的管道启用这些组件。作为最佳实践,仅启用您需要的组件。

OpenTelemetry Collector 自定义资源文件示例

apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
  name: cluster-collector
  namespace: tracing-system
spec:
  mode: deployment
  ports:
  - name: promexporter
    port: 8889
    protocol: TCP
  config: |
    receivers:
      otlp:
        protocols:
          grpc:
          http:
    processors:
    exporters:
      jaeger:
        endpoint: jaeger-production-collector-headless.tracing-system.svc:14250
        tls:
          ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt"
      prometheus:
        endpoint: 0.0.0.0:8889
        resource_to_telemetry_conversion:
          enabled: true # by default resource attributes are dropped
    service: 1
      pipelines:
        traces:
          receivers: [otlp]
          processors: []
          exporters: [jaeger]
        metrics:
          receivers: [otlp]
          processors: []
          exporters: [prometheus]

1
如果一个组件被配置但没有在 service 部分中定义,则组件不会被启用。

表 5.1. Operator 用来定义 OpenTelemetry Collector 的参数

参数描述default
receivers:

接收器用于控制数据如何进入 Collector。默认情况下,不会配置接收器。必须至少有一个启用的接收器才能使配置被视为有效。接收器通过添加到管道中来启用。

oTLP,jaeger,zipkin

None

processors:

处理器通过数据接收和导出。默认情况下,不启用处理器。

 

None

exporters:

导出器将数据发送到一个或多个后端或目的地。默认情况下,不会配置导出器。必须至少启用了一个 exporter 时,配置才被视为有效。将导出器添加到管道中即可启用。导出器可能会与其默认设置一起使用,但很多需要配置至少指定目标和安全设置。

otlp, otlphttp, jaeger, logging, prometheus

None

service:
  pipelines:

组件通过将组件添加到 services.pipeline 下的管道中来启用。

  
service:
  pipelines:
    traces:
      receivers:

您可以通过在 service.pipelines.traces 下添加用于追踪的接收器。

 

None

service:
  pipelines:
    traces:
      processors:

您可以通过在 service.pipelines.traces 下添加处理器来启用追踪的处理器。

 

None

service:
  pipelines:
    traces:
      exporters:

您可以通过在 service.pipelines.traces 下添加用于追踪的导出器。

 

None

service:
  pipelines:
    metrics:
      receivers:

您可以通过在 service.pipelines.metrics 下添加指标来启用指标接收器。

 

None

service:
  pipelines:
    metrics:
      processors:

您可以通过在 service.pipelines.metrics 下添加 services.pipelines.metrics 来为 metircs 启用处理器。

 

None

service:
  pipelines:
    metrics:
      exporters:

您可以通过在 service.pipelines.metrics 下添加指标启用导出器。

 

None

5.2.1.1. OpenTelemetry Collector 组件

5.2.1.1.1. Receivers
5.2.1.1.1.1. OTLP Receiver

OTLP 接收器使用 OpenTelemetry 协议 (OTLP) 模拟数据。

  • 支持级别:技术预览
  • 支持的信号: trace、metrics

OpenTelemetry Collector 自定义资源带有启用的 OTLP 接收器

  config: |
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317 1
            tls: 2
              ca_file: ca.pem
              cert_file: cert.pem
              key_file: key.pem
              client_ca_file: client.pem 3
              reload_interval: 1h 4
          http:
            endpoint: 0.0.0.0:4318 5
            tls: 6

    service:
      pipelines:
        traces:
          receivers: [otlp]
        metrics:
          receivers: [otlp]

1
OTLP gRPC 端点。如果省略,则使用默认的 0.0.0.0:4317
2
服务器端 TLS 配置。定义 TLS 证书的路径。如果省略,则禁用 TLS。
3
服务器验证客户端证书的 TLS 证书的路径。这会将 TLSConfig 中的 ClientCAsClientAuth 的值设置为 RequireAndVerifyClientCert。如需更多信息,请参阅 Golang TLS 软件包的配置
4
指定重新载入证书的时间间隔。如果没有设置值,则证书永远不会重新加载。reload_interval 接受包含有效时间单位的字符串,如 ns, us (或 µs), ms, s, m, h
5
OTLP HTTP 端点。默认值为 0.0.0.0:4318
6
服务器端 TLS 配置。如需更多信息,请参阅 grpc 协议配置部分。
5.2.1.1.1.2. Jaeger Receiver

Jaeger 接收器以 Jaeger 格式处理数据。

OpenTelemetry Collector 自定义资源,启用了 Jaeger 接收器

  config: |
    receivers:
      jaeger:
        protocols:
          grpc:
            endpoint: 0.0.0.0:14250 1
          thrift_http:
            endpoint: 0.0.0.0:14268 2
          thrift_compact:
            endpoint: 0.0.0.0:6831 3
          thrift_binary:
            endpoint: 0.0.0.0:6832 4
          tls: 5

    service:
      pipelines:
        traces:
          receivers: [jaeger]

1
Jaeger gRPC 端点。如果省略,则使用默认的 0.0.0.0:14250
2
Jaeger Thrift HTTP 端点。如果省略,则使用默认的 0.0.0.0:14268
3
Jaeger Thrift Compact 端点。如果省略,则使用默认的 0.0.0.0:6831
4
Jaeger Thrift Binary 端点。如果省略,则使用默认的 0.0.0.0:6832
5
TLS 服务器端配置。详情请查看 OTLP 接收器配置部分。
5.2.1.1.1.3. Zipkin Receiver

Zipkin 接收器以 Zipkin v1 和 v2 格式处理数据。

OpenTelemetry Collector 自定义资源启用了 Zipkin 接收器

  config: |
    receivers:
      zipkin:
        endpoint: 0.0.0.0:9411 1
        tls: 2

    service:
      pipelines:
        traces:
          receivers: [zipkin]

1
Zipkin HTTP 端点。如果省略,则使用默认的 0.0.0.0:9411
2
TLS 服务器端配置。详情请查看 OTLP 接收器配置部分。
5.2.1.1.2. Processors
5.2.1.1.2.1. 批处理处理器

批处理处理器会以批量的形式处理数据,以减少传输遥测信息所需的传出连接数量。

  • 支持级别:技术预览
  • 支持的信号: trace、metrics

使用批处理处理器时 OpenTelemetry Collector 自定义资源示例

  config: |
    processor:
      batch:
        timeout: 5s
        send_batch_max_size: 10000
    service:
      pipelines:
        traces:
          processors: [batch]
        metrics:
          processors: [batch]

表 5.2. 批处理处理器使用的参数

参数描述Default(默认)

timeout

在特定持续时间后发送批处理,无论其大小如何。

200ms

send_batch_size

在指定数量的 span 或 metrics 后发送遥测数据的批处理。

8192

send_batch_max_size

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

0

metadata_keys

激活后,会为在 client.Metadata 中找到的每个唯一值集创建一个批处理器实例。

[]

metadata_cardinality_limit

在填充 metadata_keys 时,此配置限制了在进程期间处理的不同元数据键值组合的数量。

1000

5.2.1.1.2.2. 内存限制处理器

Memory Limiter 处理器定期检查 Collector 的内存用量,并在达到软内存限制时暂停数据处理。前面的组件(通常是接收器)应该重试发送同一数据,并可能对传入的数据应用回溯。当内存用量超过硬限制时,Memory Limiter 处理器会强制垃圾回收运行。

  • 支持级别:正式发行(GA)
  • 支持的信号:trace, metrics, logs

使用 Memory Limiter 处理器时 OpenTelemetry Collector 自定义资源示例

  config: |
    processor:
      memory_limiter:
        check_interval: 1s
        limit_mib: 4000
        spike_limit_mib: 800
    service:
      pipelines:
        traces:
          processors: [batch]
        metrics:
          processors: [batch]

表 5.3. Memory Limiter 处理器使用的参数

参数描述Default(默认)

check_interval

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

0s

limit_mib

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

0

spike_limit_mib

spike 限制,这是 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

5.2.1.1.2.3. 资源检测处理器

资源检测处理器旨在识别与 OpenTelemetry 资源语义标准保持一致的主机资源详情。使用这个检测到的信息,它可以添加或替换遥测数据中的资源值。

  • 支持级别:技术预览
  • 支持的信号: trace、metrics

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: |
    processor:
      resourcedetection:
        detectors: [openshift]
        override: true
    service:
      pipelines:
        traces:
          processors: [resourcedetection]
        metrics:
          processors: [resourcedetection]

5.2.1.1.3. Exporters
5.2.1.1.3.1. OTLP exporter

OTLP gRPC 导出器使用 OpenTelemetry 协议 (OTLP) 导出数据。

  • 支持级别:技术预览
  • 支持的信号: trace、metrics

OpenTelemetry Collector 自定义资源,启用了 OTLP exporter

  config: |
    exporters:
      otlp:
        endpoint: tempo-ingester:4317 1
        tls: 2
          ca_file: ca.pem
          cert_file: cert.pem
          key_file: key.pem
          insecure: false 3
          insecure_skip_verify: false 4
          reload_interval: 1h 5
          server_name_override: <name> 6
        headers: 7
          X-Scope-OrgID: "dev"
    service:
      pipelines:
        traces:
          exporters: [otlp]
        metrics:
          exporters: [otlp]

1
OTLP gRPC 端点。如果使用 https:// 方案,则启用客户端传输安全性并覆盖 tls 中的 不安全 设置。
2
客户端 TLS 配置。定义 TLS 证书的路径。
3
当设置为 true 时禁用客户端传输安全性。默认值为 false
4
当设置为 true 时跳过验证证书。默认值为 false
5
指定重新载入证书的时间间隔。如果没有设置值,则证书永远不会重新加载。reload_interval 接受包含有效时间单位的字符串,如 ns, us (或 µs), ms, s, m, h
6
覆盖请求中的颁发机构的虚拟主机名,如授权标头字段。您可以使用此选项进行测试。
7
为建立的连接期间执行的每个请求发送标头。
5.2.1.1.3.2. OTLP HTTP exporter

OTLP HTTP 导出器使用 OpenTelemetry 协议(OTLP)导出数据。

  • 支持级别:技术预览
  • 支持的信号: trace、metrics

OpenTelemetry Collector 自定义资源,启用了 OTLP exporter

  config: |
    exporters:
      otlphttp:
        endpoint: http://tempo-ingester:4318 1
        tls: 2
        headers: 3
          X-Scope-OrgID: "dev"

    service:
      pipelines:
        traces:
          exporters: [otlphttp]
        metrics:
          expoters: [otlphttp]

1
OTLP HTTP 端点。如果使用 https:// 方案,则启用客户端传输安全性并覆盖 tls 中的 不安全 设置。
2
客户端 TLS 配置。定义 TLS 证书的路径。
3
标头会在每个 HTTP 请求中发送。
5.2.1.1.3.3. Jaeger exporter

Jaeger 导出器使用 Jaeger proto 格式通过 gRPC 导出数据。

OpenTelemetry Collector 自定义资源启用了 Jaeger exporter

  config: |
    exporters:
      jaeger:
        endpoint: jaeger-all-in-one:14250 1
        tls: 2
    service:
      pipelines:
        traces:
          exporters: [jaeger]

1
Jaeger gRPC 端点。
2
客户端 TLS 配置。定义 TLS 证书的路径。
5.2.1.1.3.4. 日志记录导出器

Logging exporter 将数据输出到标准输出。

  • 支持级别:技术预览
  • 支持的信号: trace、metrics

OpenTelemetry Collector 自定义资源带有启用的日志导出器

  config: |
    exporters:
      logging:
        verbosity: detailed 1
    service:
      pipelines:
        traces:
          exporters: [logging]
        metrics:
          exporters: [logging]

1
日志记录导出的详细程度: detailednormalbasic。当设置为 detailed 时,管道数据会详细记录。默认为 normal
5.2.1.1.3.5. Prometheus exporter

Prometheus exporter 使用 Prometheus 或 OpenMetrics 格式导出数据。

OpenTelemetry Collector 自定义资源,启用了 Prometheus exporter

  ports:
  - name: promexporter 1
    port: 8889
    protocol: TCP
  config: |
    exporters:
      prometheus:
        endpoint: 0.0.0.0:8889 2
        tls: 3
          ca_file: ca.pem
          cert_file: cert.pem
          key_file: key.pem
        namespace: prefix 4
        const_labels: 5
          label1: value1
        enable_open_metrics: true 6
        resource_to_telemetry_conversion: 7
          enabled: true
        metric_expiration: 180m 8
    service:
      pipelines:
        metrics:
          exporters: [prometheus]

1
从收集器 Pod 和服务公开 Prometheus 端口。您可以使用 ServiceMonitorPodMonitor 自定义资源中的端口名称启用 Prometheus 提取指标。
2
公开指标的网络端点。
3
服务器端 TLS 配置。定义 TLS 证书的路径。
4
如果设置,在提供的值下导出指标。无默认值。
5
每个导出的指标应用的键值对标签。无默认值。
6
如果为 true,则使用 OpenMetrics 格式导出指标。Exemplars 仅以 OpenMetrics 格式导出,仅适用于直方和 monotonic 摘要指标,如 counter。默认禁用此选项。
7
如果 enabledtrue,则默认情况下,所有资源属性都会转换为指标标签。默认禁用此选项。
8
定义在没有更新的情况下公开指标的时间。默认值为 5m

5.2.2. 将指标发送到监控堆栈

您可以将监控堆栈配置为提取 OpenTelemetry Collector 指标端点,并删除监控堆栈在提取过程中添加的重复标签。

将监控堆栈配置为提取 Collector 指标的 PodMonitor 自定义资源(CR)示例

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: otel-collector
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: otel-collector
  podMetricsEndpoints:
  - port: metrics 1
  - port: promexporter 2
    relabelings:
    - action: labeldrop
      regex: pod
    - action: labeldrop
      regex: container
    - action: labeldrop
      regex: endpoint
    metricRelabelings:
    - action: labeldrop
      regex: instance
    - action: labeldrop
      regex: job

1
OpenTelemetry Collector 的内部指标端口的名称。此端口名称始终是 metrics
2
OpenTelemetry Collector 的 Prometheus exporter 端口的名称。此端口名称在 OpenTelemetryCollector CR 的 .spec.ports 部分中定义。

5.2.3. 其他资源