介绍 {#introduction}
OpenTelemetry Collector 是监控 Kubernetes 集群及其内部所有服务的重要工具。
为了方便在 Kubernetes 中安装和管理 Collector 部署,
OpenTelemetry 社区创建了 OpenTelemetry Collector Helm Chart。
此 Helm chart 可用于将 Collector 安装为 Deployment、Daemonset 或 Statefulset。
安装 Chart {#installing-the-chart}
要安装发布名称为 my-opentelemetry-collector 的 Chart,请运行以下命令:
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install my-opentelemetry-collector open-telemetry/opentelemetry-collector \
--set image.repository="otel/opentelemetry-collector-k8s" \
--set mode=<daemonset|deployment|statefulset>
配置 {#configuration}
OpenTelemetry Collector Chart 要求设置 mode。mode 可以是 daemonset、deployment 或 statefulset,具体取决于你的场景需要哪种 Kubernetes 部署类型。
安装时,chart 会提供一些默认的 Collector 组件来帮助你入门。
默认情况下,Collector 的配置如下:
exporters:
# 注意:在 v0.86.0 版本之前,请使用 `logging` 而非 `debug`。
debug: {}
extensions:
health_check: {}
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
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
Chart 还会根据默认接收器启用端口。
可以通过在 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
Chart 中可用的所有配置选项(带注释)可以在其 values.yaml 文件中查看。
预设 {#presets}
OpenTelemetry Collector 用于监控 Kubernetes 的许多关键组件,
都需要在 Collector 自身的 Kubernetes 部署中进行特殊配置。
为了简化这些组件的使用,OpenTelemetry Collector Chart 提供了若干预设配置,
启用这些预设后,系统会自动处理这些关键组件所需的复杂设置。
预设应作为起点使用。
它们为相关组件配置基本但丰富的功能。
如果你的使用场景需要对这些组件进行额外配置,建议不要使用预设,
而是手动配置该组件及其所需的所有资源(如存储卷、RBAC 等)。
日志收集预设 {#logs-collection-preset}
OpenTelemetry Collector 可用于收集 Kubernetes 容器发送到标准输出的日志。
此功能默认禁用。
要安全启用它,需要满足以下要求:
- 它要求 Collector 镜像中包含 Filelog 接收器,
例如 Collector 的 Contrib 发行版。 - 虽然不是严格要求,但建议将此预设与
mode=daemonset一起使用。filelogreceiver只能收集 Collector 运行所在节点上的日志,
同一节点上运行多个已配置的 Collector 会产生重复数据。
要启用此功能,请将 presets.logsCollection.enabled 属性设置为 true。
启用后,Chart 会将 filelogreceiver 添加到 logs 流水线中。
此接收器配置为读取 Kubernetes 容器运行时写入所有容器控制台输出的文件(/var/log/pods/*/*/*.log)。
以下是 values.yaml 示例:
mode: daemonset
presets:
logsCollection:
enabled: true
Chart 的默认日志流水线使用 debugexporter。
与 logsCollection 预设的 filelogreceiver 配对使用时,
很容易意外地将导出的日志反馈回 Collector,这可能会导致"日志爆炸"。
为防止循环,接收器的默认配置会排除 Collector 自己的日志。
如果你想包含 Collector 的日志,请确保将 debug 导出器替换为不将日志发送到 Collector 标准输出的导出器。
以下是一个 values.yaml 示例,它将 logs 流水线上的默认 debug 导出器替换为 otlphttp 导出器,
该导出器将容器日志发送到 https://example.com:55681 端点。
它还使用 presets.logsCollection.includeCollectorLogs 告诉预设启用 Collector 日志的收集。
mode: daemonset
presets:
logsCollection:
enabled: true
includeCollectorLogs: true
config:
exporters:
otlphttp:
endpoint: https://example.com:55681
service:
pipelines:
logs:
exporters:
- otlphttp
Kubernetes 属性预设 {#kubernetes-attributes-preset}
OpenTelemetry Collector 可以配置为向日志、指标和链路添加 Kubernetes 元数据,
例如 k8s.pod.name、k8s.namespace.name 和 k8s.node.name。
强烈建议使用预设,或手动启用 k8sattributesprocessor。
由于 RBAC 考虑,此功能默认禁用。
它有以下要求:
- 它要求 Collector 镜像中包含 Kubernetes 属性处理器,
例如 Collector 的 Contrib 发行版。
要启用此功能,请将 presets.kubernetesAttributes.enabled 属性设置为 true。
启用后,Chart 会将必要的 RBAC 角色添加到 ClusterRole 中,
并将 k8sattributesprocessor 添加到每个启用的流水线中。
以下是 values.yaml 示例:
mode: daemonset
presets:
kubernetesAttributes:
enabled: true
Kubelet 指标预设 {#kubelet-metrics-preset}
OpenTelemetry Collector 可以配置为从 kubelet 上的 API 服务器收集节点、Pod 和容器指标。
此功能默认禁用。
它有以下要求:
- 它要求 Collector 镜像中包含 Kubeletstats 接收器,
例如 Collector 的 Contrib 发行版。 - 虽然不是严格要求,但建议将此预设与
mode=daemonset一起使用。kubeletstatsreceiver只能收集 Collector 运行所在节点上的指标,
同一节点上运行多个已配置的 Collector 会产生重复数据。
要启用此功能,请将 presets.kubeletMetrics.enabled 属性设置为 true。
启用后,Chart 会将必要的 RBAC 角色添加到 ClusterRole 中,
并将 kubeletstatsreceiver 添加到指标流水线中。
以下是 values.yaml 示例:
mode: daemonset
presets:
kubeletMetrics:
enabled: true
集群指标预设 {#cluster-metrics-preset}
OpenTelemetry Collector 可以配置为从 Kubernetes API 服务器收集集群级别的指标。
这些指标包括 Kube State Metrics 收集的许多指标。
此功能默认禁用。
它有以下要求:
- 它要求 Collector 镜像中包含 Kubernetes 集群接收器,
例如 Collector 的 Contrib 发行版。 - 虽然不是严格要求,但建议将此预设与
mode=deployment或单副本的mode=statefulset一起使用。
在多个 Collector 上运行k8sclusterreceiver会产生重复数据。
要启用此功能,请将 presets.clusterMetrics.enabled 属性设置为 true。
启用后,Chart 会将必要的 RBAC 角色添加到 ClusterRole 中,
并将 k8sclusterreceiver 添加到指标流水线中。
以下是 values.yaml 示例:
mode: deployment
replicaCount: 1
presets:
clusterMetrics:
enabled: true
Kubernetes 事件预设 {#kubernetes-events-preset}
OpenTelemetry Collector 可以配置为收集 Kubernetes 事件。
此功能默认禁用。
它有以下要求:
- 它要求 Collector 镜像中包含 Kubernetes 对象接收器,
例如 Collector 的 Contrib 发行版。 - 虽然不是严格要求,但建议将此预设与
mode=deployment或单副本的mode=statefulset一起使用。
在多个 Collector 上运行k8sclusterreceiver会产生重复数据。
要启用此功能,请将 presets.kubernetesEvents.enabled 属性设置为 true。
启用后,Chart 会将必要的 RBAC 角色添加到 ClusterRole 中,
并将 k8sobjectsreceiver 添加到日志流水线中,配置为仅收集事件。
以下是 values.yaml 示例:
mode: deployment
replicaCount: 1
presets:
kubernetesEvents:
enabled: true
主机指标预设 {#host-metrics-preset}
OpenTelemetry Collector 可以配置为从 Kubernetes 节点收集主机指标。
此功能默认禁用。
它有以下要求:
- 它要求 Collector 镜像中包含主机指标接收器,
例如 Collector 的 Contrib 发行版。 - 虽然不是严格要求,但建议将此预设与
mode=daemonset一起使用。hostmetricsreceiver只能收集 Collector 运行所在节点上的指标,
同一节点上运行多个已配置的 Collector 会产生重复数据。
要启用此功能,请将 presets.hostMetrics.enabled 属性设置为 true。
启用后,Chart 会添加必要的卷和卷挂载,并将 hostmetricsreceiver 添加到指标流水线中。
默认情况下,指标每 10 秒抓取一次,启用以下抓取器:
- cpu
- load
- memory
- disk
- filesystem[^1]
- network
以下是 values.yaml 示例:
mode: daemonset
presets:
hostMetrics:
enabled: true