第 4 章 配置 Collector
4.1. 配置 Collector 复制链接链接已复制到粘贴板!
红帽构建的 OpenTelemetry Operator 使用自定义资源定义(CRD)文件来定义创建和部署分布式追踪平台 (Tempo) 资源时要使用的架构和配置设置。您可以安装默认配置或修改该文件。
4.1.1. 部署模式 复制链接链接已复制到粘贴板!
OpenTelemetryCollector 自定义资源允许您为 OpenTelemetry Collector 指定以下部署模式之一:
- Deployment
- 默认值。
- StatefulSet
- 如果您需要运行有状态工作负载,例如使用 Collector 的 File Storage Extension 或 Tail Sampling Processor 时,请使用 StatefulSet 部署模式。
- DaemonSet
- 如果您需要从每个节点中提取遥测数据,例如使用 Collector 的 Filelog Receiver 来读取容器日志,请使用 DaemonSet 部署模式。
- Sidecar
如果您需要访问容器内的日志文件,请将 Collector 注入 sidecar,并使用 Collector 的 Filelog Receiver 和共享卷,如
emptyDir。如果您需要将应用程序配置为通过
localhost发送遥测数据,请将 Collector 注入 sidecar,并设置 Collector 通过加密和经过身份验证的连接将遥测数据转发到外部服务。当作为 sidecar 注入时,Collector 会与应用程序在同一 pod 中运行。注意如果选择 sidecar 部署模式,那么除了在
OpenTelemetryCollector自定义资源 CR 中设置spec.mode: sidecar字段外,还必须将sidecar.opentelemetry.io/inject注解设置为 pod 注解或命名空间注解。如果在 pod 和命名空间上设置了此注解,如果 pod 注解被设置为false或OpenTelemetryCollectorCR 名称,则 pod 注解会优先使用。作为 pod 注解,
sidecar.opentelemetry.io/inject注解支持几个值:apiVersion: v1 kind: Pod metadata: ... annotations: sidecar.opentelemetry.io/inject: "<supported_value>"1 ...- 1
- 支持的值:
false- 不要注入 Collector。如果缺少注解,则这是默认设置。
true-
使用同一命名空间中的
OpenTelemetryCollectorCR 配置注入 Collector。 <collector_name>-
使用同一命名空间中的 <
collector_name>OpenTelemetryCollectorCR 配置注入 Collector。 <namespace>/<collector_name>-
使用 <
namespace> 命名空间中的<collector_name>OpenTelemetryCollectorCR 配置注入 Collector。
4.1.2. OpenTelemetry Collector 配置选项 复制链接链接已复制到粘贴板!
OpenTelemetry Collector 由访问遥测数据的一组组件组成:
- Receivers
- Processors
- Exporters
- 连接器
- 扩展
您可以在自定义资源 YAML 文件中定义多个组件实例。配置后,必须通过 YAML 文件的 spec.config.service 部分中定义的管道启用这些组件。作为最佳实践,仅启用您需要的组件。
OpenTelemetry Collector 自定义资源文件示例
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: cluster-collector
namespace: tracing-system
spec:
mode: deployment
observability:
metrics:
enableMetrics: true
config:
receivers:
otlp:
protocols:
grpc: {}
http: {}
processors: {}
exporters:
otlp:
endpoint: otel-collector-headless.tracing-system.svc:4317
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:
pipelines:
traces:
receivers: [otlp]
processors: []
exporters: [otlp]
metrics:
receivers: [otlp]
processors: []
exporters: [prometheus]
- 1
- 如果一个组件被配置但没有在
service部分中定义,则组件不会被启用。
| 参数 | 描述 | 值 | default |
|---|---|---|---|
| 接收器用于控制数据如何进入 Collector。默认情况下,不会配置接收器。必须至少有一个启用的接收器才能使配置被视为有效。接收器通过添加到管道中来启用。 |
| None |
| 处理器在导出前会处理接收的数据。默认情况下,不启用处理器。 |
| None |
| 导出器将数据发送到一个或多个后端或目的地。默认情况下,不会配置导出器。必须至少启用了一个 exporter 时,配置才被视为有效。将导出器添加到管道中即可启用。导出器可能会与其默认设置一起使用,但很多需要配置至少指定目标和安全设置。 |
| None |
| 连接器通过将数据作为管道导出器来加入管道对,并将数据作为 Start-of-pipeline 接收器发送。连接器可用于总结、复制或路由消耗的数据。 |
| None |
| 不涉及处理遥测数据的任务的可选组件。 |
| None |
|
组件通过将组件添加到 | ||
|
您可以通过在 | None | |
|
您可以通过在 | None | |
|
您可以通过在 | None | |
|
您可以通过在 | None | |
|
您可以通过在 | None | |
|
您可以通过在 | None |
4.1.3. 配置集信号 复制链接链接已复制到粘贴板!
Profile 信号是一个新兴的遥测数据格式,用于观察代码执行和资源消耗。
Profile 信号只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅以下链接:
Profile 信号允许您将代码低到特定功能。通过这种性能分析,您可以精确识别性能瓶颈,并将资源效率降低到特定的代码行。通过将此类高风险配置集数据与 trace、metrics 和 logs 进行比较,它可以在生产环境中启用全面的性能分析和目标代码优化。
分析可以针对应用程序或操作系统:
- 使用性能分析来观察应用,帮助开发人员验证代码性能、防止回归和监控资源消耗,如内存和 CPU 使用量,从而识别并改进低效的代码。
- 使用性能分析观察操作系统可以深入了解基础架构、系统调用、内核操作和 I/O 等待时间,这有助于优化基础架构以提高效率和节约成本。
带有启用的 Profile 信号的 OpenTelemetry Collector 自定义资源
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: otel-profiles-collector
namespace: otel-profile
spec:
args:
feature-gates: service.profilesSupport
config:
receivers:
otlp:
protocols:
grpc:
endpoint: '0.0.0.0:4317'
http:
endpoint: '0.0.0.0:4318'
exporters:
otlp/pyroscope:
endpoint: "pyroscope.pyroscope-monitoring.svc.cluster.local:4317"
service:
pipelines:
profiles:
receivers: [otlp]
exporters: [otlp/pyroscope]
# ...
4.1.4. 自动创建所需的 RBAC 资源 复制链接链接已复制到粘贴板!
有些 Collector 组件需要配置 RBAC 资源。
流程
在
opentelemetry-operator-controller-manage服务帐户中添加以下权限,以便红帽构建的 OpenTelemetry Operator 可以自动创建它们:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: generate-processors-rbac rules: - apiGroups: - rbac.authorization.k8s.io resources: - clusterrolebindings - clusterroles verbs: - create - delete - get - list - patch - update - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: generate-processors-rbac roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: generate-processors-rbac subjects: - kind: ServiceAccount name: opentelemetry-operator-controller-manager namespace: openshift-opentelemetry-operator
4.1.5. 目标分配器 复制链接链接已复制到粘贴板!
目标分配器是 OpenTelemetry Operator 的一个可选组件,它会在部署的 OpenTelemetry Collector 实例间分片提取目标。目标分配器与 Prometheus PodMonitor 和 ServiceMonitor 自定义资源 (CR) 集成。启用目标分配器时,OpenTelemetry Operator 会将 http_sd_config 字段添加到连接到目标分配器服务的启用的 prometheus 接收器。
目标分配器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅以下链接:
带有启用的 Target Allocator 的 OpenTelemetryCollector CR 示例
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: otel
namespace: observability
spec:
mode: statefulset
targetAllocator:
enabled: true
serviceAccount:
prometheusCR:
enabled: true
scrapeInterval: 10s
serviceMonitorSelector:
name: app1
podMonitorSelector:
name: app2
config:
receivers:
prometheus:
config:
scrape_configs: []
processors:
exporters:
debug: {}
service:
pipelines:
metrics:
receivers: [prometheus]
processors: []
exporters: [debug]
# ...
- 1
- 启用 Target Allocator 时,部署模式必须设置为
statefulset。 - 2
- 启用目标分配器。默认值为
false。 - 3
- Target Allocator 部署的服务帐户名称。服务帐户需要具有 RBAC 才能从集群中获取
ServiceMonitor、PodMonitor自定义资源和其他对象,以便在提取的指标上正确设置标签。默认服务名称为<collector_name>-targetallocator。 - 4
- 启用与 Prometheus
PodMonitor和ServiceMonitor自定义资源集成。 - 5
- Prometheus
ServiceMonitor自定义资源的标签选择器。当留空时,请启用所有服务监视器。 - 6
- Prometheus
PodMonitor自定义资源的标签选择器。留空时,启用所有 pod 监视器。 - 7
- Prometheus 接收器带有 minimal, empty
scrape_config: []配置选项。
Target Allocator 部署使用 Kubernetes API 从集群中获取相关对象,因此它需要自定义 RBAC 配置。
目标 Allocator 服务帐户的 RBAC 配置
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: otel-targetallocator
rules:
- apiGroups: [""]
resources:
- services
- pods
- namespaces
verbs: ["get", "list", "watch"]
- apiGroups: ["monitoring.coreos.com"]
resources:
- servicemonitors
- podmonitors
- scrapeconfigs
- probes
verbs: ["get", "list", "watch"]
- apiGroups: ["discovery.k8s.io"]
resources:
- endpointslices
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: otel-targetallocator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: otel-targetallocator
subjects:
- kind: ServiceAccount
name: otel-targetallocator
namespace: observability
# ...