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图表需要设置mode
。mode
可以是daemonset
、deployment
或statefulset
,具体取决于您的使用情况需要的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.name
、k8s.namespace.name
和k8s.node.name
)添加到日志、度量和跟踪中。强烈建议使用预设或手动启用k8sattributesprocessor
。
由于RBAC的考虑,此功能默认处于禁用状态。它具有以下要求:
- 它需要在Collector映像中包含Kubernetes属性处理器,比如Collector的Contrib发行版。
要启用此功能,请将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收集的许多度量。
此功能默认处于禁用状态。它具有以下要求:
- 它需要在Collector映像中包含Kubernetes Cluster接收器,比如Collector的Contrib发行版。
- 虽然不是严格要求,但建议以
mode=deployment
或mode=statefulset
和单个副本运行。在多个Collector上运行k8sclusterreceiver
将导致重复数据。
要启用此功能,请将presets.clusterMetrics.enabled
属性设置为true
。启用后,图表将向ClusterRole添加所需的RBAC角色,并向度量管道添加一个k8sclusterreceiver
。
以下是一个示例values.yaml
:
mode: deployment
replicaCount: 1
presets:
clusterMetrics:
enabled: true
Kubernetes事件预设
OpenTelemetry Collector可以配置为收集Kubernetes事件。
此功能默认处于禁用状态。它使用以下要求:
- 它需要在Collector映像中包含Kubernetes Objects接收器,比如Collector的Contrib发行版。
- 虽然不是严格要求,但建议以
mode=deployment
或mode=statefulset
和单个副本运行。在多个Collector上运行k8sclusterreceiver
将导致重复数据。
要启用此功能,请将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
预设有一些重叠,因此默认情况下排除了某些文件系统类型和挂载点。