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。默认情况下,不会配置接收器。必须至少有一个启用的接收器才能使配置被视为有效。接收器通过添加到管道中来启用。 |
| None |
processors: | 处理器通过数据接收和导出。默认情况下,不启用处理器。 | None | |
exporters: | 导出器将数据发送到一个或多个后端或目的地。默认情况下,不会配置导出器。必须至少启用了一个 exporter 时,配置才被视为有效。将导出器添加到管道中即可启用。导出器可能会与其默认设置一起使用,但很多需要配置至少指定目标和安全设置。 |
| None |
service: pipelines: |
组件通过将组件添加到 | ||
service: pipelines: traces: receivers: |
您可以通过在 | None | |
service: pipelines: traces: processors: |
您可以通过在 | None | |
service: pipelines: traces: exporters: |
您可以通过在 | None | |
service: pipelines: metrics: receivers: |
您可以通过在 | None | |
service: pipelines: metrics: processors: |
您可以通过在 | None | |
service: pipelines: metrics: exporters: |
您可以通过在 | 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
中的ClientCAs
和ClientAuth
的值设置为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 格式处理数据。
- 支持级别:技术预览
- 支持的信号:trace
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]
5.2.1.1.1.3. Zipkin Receiver
Zipkin 接收器以 Zipkin v1 和 v2 格式处理数据。
- 支持级别:技术预览
- 支持的信号:trace
OpenTelemetry Collector 自定义资源启用了 Zipkin 接收器
config: | receivers: zipkin: endpoint: 0.0.0.0:9411 1 tls: 2 service: pipelines: traces: receivers: [zipkin]
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(默认) |
---|---|---|
| 在特定持续时间后发送批处理,无论其大小如何。 | 200ms |
| 在指定数量的 span 或 metrics 后发送遥测数据的批处理。 | 8192 |
|
批处理的最大允许大小。必须等于或大于 | 0 |
|
激活后,会为在 | [] |
|
在填充 | 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(默认) |
---|---|---|
|
内存用量测量之间的时间。最佳值为 1s。对于 spiky 流量模式,您可以减少 |
|
| 硬限制,即堆上分配的最大内存量(以 MiB 为单位)。通常,OpenTelemetry Collector 的内存用量大约比这个值高 50 MiB。 |
|
|
spike 限制,这是 MiB 中内存使用率最大激增。最佳值为 |
|
|
与 |
|
|
与 |
|
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]
5.2.1.1.3.3. Jaeger exporter
Jaeger 导出器使用 Jaeger proto 格式通过 gRPC 导出数据。
- 支持级别:技术预览
- 支持的信号:trace
OpenTelemetry Collector 自定义资源启用了 Jaeger exporter
config: | exporters: jaeger: endpoint: jaeger-all-in-one:14250 1 tls: 2 service: pipelines: traces: exporters: [jaeger]
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
- 日志记录导出的详细程度:
detailed
或normal
或basic
。当设置为detailed
时,管道数据会详细记录。默认为normal
。
5.2.1.1.3.5. Prometheus exporter
Prometheus exporter 使用 Prometheus 或 OpenMetrics 格式导出数据。
- 支持级别:技术预览
- 支持的信号: metrics
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 端口。您可以使用
ServiceMonitor
或PodMonitor
自定义资源中的端口名称启用 Prometheus 提取指标。 - 2
- 公开指标的网络端点。
- 3
- 服务器端 TLS 配置。定义 TLS 证书的路径。
- 4
- 如果设置,在提供的值下导出指标。无默认值。
- 5
- 每个导出的指标应用的键值对标签。无默认值。
- 6
- 如果为
true
,则使用 OpenMetrics 格式导出指标。Exemplars 仅以 OpenMetrics 格式导出,仅适用于直方和 monotonic 摘要指标,如counter
。默认禁用此选项。 - 7
- 如果
enabled
是true
,则默认情况下,所有资源属性都会转换为指标标签。默认禁用此选项。 - 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