OpenTelemetry Collector图表

简介

OpenTelemetry Collector是一个在Kubernetes集群和其中所有服务中进行监控的重要工具。为了便于在Kubernetes中安装和管理收集器部署,OpenTelemetry社区创建了OpenTelemetry Collector Helm图表。该Helm图表可用于将收集器安装为Deployment、DaemonSet或StatefulSet。

安装图表

使用发布名称my-opentelemetry-collector安装图表,运行以下命令:

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install my-opentelemetry-collector open-telemetry/opentelemetry-collector \
   --set mode=<daemonset|deployment|statefulset>

配置

OpenTelemetry Collector图表需要设置modemode可以是daemonsetdeploymentstatefulset,具体取决于您的使用情况需要的Kubernetes部署类型。

安装后,该图表提供了一些默认的收集器组件,以帮助您入门。默认情况下,收集器的配置如下:

exporters:
  # 提示:在v0.86版之前,请使用`logging`代替`debug`。
  debug: {}
extensions:
  health_check: {}
  memory_ballast:
    size_in_percentage: 40
processors:
  batch: {}
  memory_limiter:
    check_interval: 5s
    limit_percentage: 80
    spike_limit_percentage: 25
receivers:
  jaeger:
    protocols:
      grpc:
        endpoint: ${env:MY_POD_IP}:14250
      thrift_compact:
        endpoint: ${env:MY_POD_IP}:6831
      thrift_http:
        endpoint: ${env:MY_POD_IP}:14268
  otlp:
    protocols:
      grpc:
        endpoint: ${env:MY_POD_IP}:4317
      http:
        endpoint: ${env:MY_POD_IP}:4318
  prometheus:
    config:
      scrape_configs:
        - job_name: opentelemetry-collector
          scrape_interval: 10s
          static_configs:
            - targets:
                - ${env:MY_POD_IP}:8888
  zipkin:
    endpoint: ${env:MY_POD_IP}:9411
service:
  extensions:
    - health_check
    - memory_ballast
  pipelines:
    logs:
      exporters:
        - debug
      processors:
        - memory_limiter
        - batch
      receivers:
        - otlp
    metrics:
      exporters:
        - debug
      processors:
        - memory_limiter
        - batch
      receivers:
        - otlp
        - prometheus
    traces:
      exporters:
        - debug
      processors:
        - memory_limiter
        - batch
      receivers:
        - otlp
        - jaeger
        - zipkin
  telemetry:
    metrics:
      address: ${env:MY_POD_IP}:8888

图表还会根据默认的接收器启用端口。可以通过在values.yaml中将值设置为null来删除默认配置。端口也可以在values.yaml中禁用。

可以使用values.yaml中的config部分添加/修改配置的任何部分。更改管道时,必须明确列出管道中的所有组件,包括任何默认组件。

例如,要禁用度量和日志管道以及非OTLP接收器:

config:
  receivers:
    jaeger: null
    prometheus: null
    zipkin: null
  service:
    pipelines:
      traces:
        receivers:
          - otlp
      metrics: null
      logs: null
ports:
  jaeger-compact:
    enabled: false
  jaeger-thrift:
    enabled: false
  jaeger-grpc:
    enabled: false
  zipkin:
    enabled: false

可以在图表的values.yaml文件中查看所有可用配置选项。

预设

OpenTelemetry Collector使用监听Kubernetes的许多重要组件需要在收集器自己的Kubernetes部署中进行特殊设置。为了更轻松地使用这些组件,OpenTelemetry Collector图表预设了一些预设项,启用后,可以处理这些重要组件的复杂设置。

预设应该作为一个起点来使用。它们为相关组件配置了基本但丰富的功能。如果您的使用情况需要对这些组件进行额外配置,则建议不使用预设,而是手动配置组件及其所需的任何内容(卷、RBAC等)。

日志收集预设

OpenTelemetry Collector可以用于收集由Kubernetes容器发送到标准输出的日志。

此功能默认处于禁用状态。为了安全启用此功能,需要满足以下要求:

  • 它需要在Collector映像中包含Filelog receiver,比如Collector的Contrib发行版
  • 虽然不是严格要求,但建议在mode=daemonset下使用此预设。filelogreceiver只能在运行收集器的节点上收集日志,同一节点上的多个配置的收集器将导致重复数据。

要启用此功能,请将presets.logsCollection.enabled属性设置为true。启用后,图表将向logs管道添加一个filelogreceiver。该接收器配置为读取Kubernetes容器运行时将所有容器的控制台输出写入的文件(/var/log/pods/*/*/*.log)。

以下是一个示例values.yaml

mode: daemonset
presets:
  logsCollection:
    enabled: true

图表的默认日志管道使用debugexporter。与logsCollection预设的filelogreceiver配对使用时,很容易意外将导出的日志重新发送到收集器,从而导致“日志爆炸”。

为了防止循环,接收器的默认配置将排除收集器自己的日志。如果要包含收集器的日志,请确保将logs管道上的默认debug导出器替换为一个不会将日志发送到收集器标准输出的导出器。

以下是一个示例values.yaml,其中将日志管道上的默认debug导出器替换为将容器日志发送到https://example.com:55681端点的otlphttp导出器。它还使用presets.logsCollection.includeCollectorLogs告诉预设启用收集器日志的收集。

mode: daemonset

presets:
  logsCollection:
    enabled: true
    includeCollectorLogs: true

config:
  exporters:
    otlphttp:
      endpoint: https://example.com:55681
  service:
    pipelines:
      logs:
        exporters:
          - otlphttp

Kubernetes属性预设

OpenTelemetry Collector可以配置为将Kubernetes元数据(例如k8s.pod.namek8s.namespace.namek8s.node.name)添加到日志、度量和跟踪中。强烈建议使用预设或手动启用k8sattributesprocessor

由于RBAC的考虑,此功能默认处于禁用状态。它具有以下要求:

要启用此功能,请将presets.kubernetesAttributes.enabled属性设置为true。启用后,图表将向ClusterRole添加所需的RBAC角色,并向每个启用的管道添加一个k8sattributesprocessor

以下是一个示例values.yaml

mode: daemonset
presets:
  kubernetesAttributes:
    enabled: true

Kubelet度量预设

OpenTelemetry Collector可以配置为从kubelet的API服务器收集节点、Pod和容器度量。

此功能默认处于禁用状态。它有以下要求:

  • 它需要在Collector映像中包含Kubeletstats接收器,比如Collector的Contrib发行版
  • 虽然不是严格要求,但建议在mode=daemonset下使用此预设。kubeletstatsreceiver只能在运行收集器的节点上收集度量,同一节点上的多个配置的收集器将导致重复数据。

要启用此功能,请将presets.kubeletMetrics.enabled属性设置为true。启用后,图表将向ClusterRole添加所需的RBAC角色,并向度量管道添加一个kubeletstatsreceiver

以下是一个示例values.yaml

mode: daemonset
presets:
  kubeletMetrics:
    enabled: true

集群度量预设

OpenTelemetry Collector可以配置为从Kubernetes API服务器收集集群级度量。这些度量包括Kube State Metrics收集的许多度量。

此功能默认处于禁用状态。它具有以下要求:

要启用此功能,请将presets.clusterMetrics.enabled属性设置为true。启用后,图表将向ClusterRole添加所需的RBAC角色,并向度量管道添加一个k8sclusterreceiver

以下是一个示例values.yaml

mode: deployment
replicaCount: 1
presets:
  clusterMetrics:
    enabled: true

Kubernetes事件预设

OpenTelemetry Collector可以配置为收集Kubernetes事件。

此功能默认处于禁用状态。它使用以下要求:

要启用此功能,请将presets.kubernetesEvents.enabled属性设置为true。启用后,图表将向ClusterRole添加所需的RBAC角色,并向日志管道添加一个k8sobjectsreceiver,其中只配置收集事件。

以下是一个示例values.yaml

mode: deployment
replicaCount: 1
presets:
  kubernetesEvents:
    enabled: true

主机度量预设

OpenTelemetry Collector可以配置为从Kubernetes节点收集主机度量。

此功能默认处于禁用状态。它具有以下要求:

  • 它需要在Collector映像中包含Host Metrics接收器,比如Collector的Contrib发行版
  • 虽然不是严格要求,但建议在mode=daemonset下使用此预设。hostmetricsreceiver只能在运行收集器的节点上收集度量,同一节点上的多个配置的收集器将导致重复数据。

要启用此功能,请将presets.hostMetrics.enabled属性设置为true。启用后,图表将添加所需的卷和volumeMounts,并向度量管道添加一个hostmetricsreceiver。默认情况下,每10秒会收集一次度量,并启用以下收集器:

  • cpu
  • load
  • memory
  • disk
  • filesystem[^1]
  • network

以下是一个示例values.yaml

mode: daemonset
presets:
  hostMetrics:
    enabled: true

[^1]由于与kubeletMetrics预设有一些重叠,因此默认情况下排除了某些文件系统类型和挂载点。

最后修改 December 10, 2023: translate (a4350d6e)