本页将带你以最快的方式开始使用 OpenTelemetry 监控 Kubernetes 集群,重点包括采集 Kubernetes 集群、节点、Pod 和容器的指标与日志,以及让集群能够接收服务发出的 OTLP 数据。
如果你想观察 OpenTelemetry 在 Kubernetes 上如何工作,最佳起点是 OpenTelemetry Demo。该演示旨在展示 OpenTelemetry 的实现方式,并非 Kubernetes 自身监控的示范。完成本教程后,可以安装演示,观察各项监控如何响应活跃的工作负载。(OpenTelemetry 演示)
如果你准备从 Prometheus 迁移到 OpenTelemetry,或者想用 OpenTelemetry Collector 采集 Prometheus 指标,请参阅 Prometheus Receiver。(Prometheus 接收器)
概览
Kubernetes 通过多种不同方式暴露大量重要的遥测数据,包括日志、事件、不同对象的指标,以及工作负载产生的数据。
我们将使用 OpenTelemetry Collector 采集这些数据。Collector 提供多种工具,能够高效地采集数据,并对数据进行有意义的增强。(OpenTelemetry Collector)
要采集全部数据,需要安装两套 Collector:一套以 DaemonSet 运行,另一套以 Deployment 运行。DaemonSet 采集服务发出的遥测数据,以及节点、Pod 和容器的日志与指标;Deployment 采集集群指标与事件。(DaemonSet · Deployment)
我们使用 OpenTelemetry Collector Helm chart 安装 Collector。该 chart 提供若干配置选项,可以简化 Collector 的配置。如果你不熟悉 Helm,请先查看 Helm 项目网站。如果你更希望使用 Kubernetes Operator,可参阅 OpenTelemetry Operator;本指南将专注于 Helm chart。(OpenTelemetry Collector Helm chart · Helm 项目网站 · OpenTelemetry Operator)
准备工作
本指南假定使用 Kind 集群,不过你也可以使用任何适合自己的 Kubernetes 集群。(Kind 集群)
假定已经安装 Kind,创建一个新的 Kind 集群:(Kind 安装指南)
kind create cluster
假定已经安装 Helm,添加 OpenTelemetry Collector Helm chart 仓库,以便后续安装:(Helm 安装指南)
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
以 DaemonSet 运行的 Collector
采集 Kubernetes 遥测数据的第一步,是部署一个以 DaemonSet 运行的 OpenTelemetry Collector,收集节点以及节点上工作负载的相关数据。DaemonSet 确保每个节点都安装该 Collector 实例。DaemonSet 中的每个实例只采集自身所在节点的数据。
这套 Collector 将使用以下组件:
- OTLP Receiver:采集应用的追踪、指标与日志。(OTLP 接收器)
- Kubernetes Attributes Processor:为传入的应用遥测数据添加 Kubernetes 元数据。(Kubernetes 属性处理器)
- Kubeletstats Receiver:从 kubelet 的 API 服务器拉取节点、Pod 和容器指标。(Kubeletstats 接收器)
- Filelog Receiver:采集 Kubernetes 日志,以及应用写入 stdout/stderr 的日志。(Filelog 接收器)
下面逐一说明这些组件。
OTLP Receiver
OTLP Receiver 是采集 OTLP 格式追踪、指标与日志的最佳方案。如果应用使用其他格式发出遥测数据,Collector 很可能也提供相应的接收器;不过,本教程假定数据使用 OTLP 格式。(OTLP 接收器 · OTLP 格式 · Collector 接收器目录)
虽然不是硬性要求,但常见做法是让节点上的应用将追踪、指标和日志发送给同一节点上的 Collector。这样可以简化网络交互,也便于使用 k8sattributes processor 关联 Kubernetes 元数据。
Kubernetes Attributes Processor
对于接收 Kubernetes Pod 遥测数据的 Collector,强烈建议使用 Kubernetes Attributes Processor。它会自动发现 Pod,提取 Pod 名称、节点名称等元数据,并将其作为资源属性添加到 span、指标与日志中。因为它为遥测数据补充了 Kubernetes 上下文,你可以把应用的追踪、指标和日志信号与 Kubernetes 遥测数据(如 Pod 指标和追踪)关联起来。(Kubernetes 属性处理器)
Kubeletstats Receiver
Kubeletstats Receiver 用于采集节点相关指标,例如容器内存使用量、Pod CPU 使用量和节点网络错误。这些遥测数据都包含 Pod 名称或节点名称等 Kubernetes 元数据。由于我们使用了 Kubernetes Attributes Processor,可以将应用的追踪、指标和日志与 Kubeletstats Receiver 产生的指标关联起来。(Kubeletstats 接收器)
Filelog Receiver
Filelog Receiver 持续跟踪 Kubernetes 写入 /var/log/pods/*/*/*.log 的日志文件,从中采集写入 stdout/stderr 的日志。与大多数日志跟踪器一样,它提供丰富的操作,让你可以按需要解析文件。(Filelog 接收器)
将来你可能需要自行配置 Filelog Receiver,但在本教程中,OpenTelemetry Helm chart 会处理复杂配置,并根据文件名提取有用的 Kubernetes 元数据。配合 Kubernetes Attributes Processor,可以将应用追踪、指标和日志与 Filelog Receiver 采集的日志关联起来。
OpenTelemetry Collector Helm chart 让这些组件在 DaemonSet 形式的 Collector 中易于配置,同时处理 RBAC、挂载和主机端口等 Kubernetes 相关细节。
注意:chart 默认不会向任何后端发送数据。如果你希望在自己选用的后端中使用这些数据,需要自行配置 exporter。
下面是本教程使用的 values.yaml:
mode: daemonset
image:
repository: otel/opentelemetry-collector-k8s
presets:
# enables the k8sattributesprocessor and adds it to the traces, metrics, and logs pipelines
kubernetesAttributes:
enabled: true
# enables the kubeletstatsreceiver and adds it to the metrics pipelines
kubeletMetrics:
enabled: true
# Enables the filelogreceiver and adds it to the logs pipelines
logsCollection:
enabled: true
## The chart only includes the debugexporter by default
## If you want to send your data somewhere you need to
## configure an exporter, such as the otlp exporter
# config:
# exporters:
# otlp:
# endpoint: "<SOME BACKEND>"
# service:
# pipelines:
# traces:
# exporters: [ otlp ]
# metrics:
# exporters: [ otlp ]
# logs:
# exporters: [ otlp ]
将这份 values.yaml 保存到所选位置,然后运行以下命令,使用它安装 chart:
helm install otel-collector open-telemetry/opentelemetry-collector --values <path where you saved the chart>
现在,集群中应当已经运行一套以 DaemonSet 部署的 OpenTelemetry Collector,并从各个节点采集遥测数据!
以 Deployment 运行的 Collector
下一步是部署一个以 Deployment 运行的 Collector,收集整个集群层面的遥测数据。Deployment 应当恰好保留一个副本,以确保不会产生重复数据。
这套 Collector 将使用以下组件:
- Kubernetes Cluster Receiver:采集集群级指标与实体事件。(Kubernetes 集群接收器)
- Kubernetes Objects Receiver:从 Kubernetes API 服务器采集对象,例如事件。(Kubernetes 对象接收器)
下面逐一说明这些组件。
Kubernetes Cluster Receiver
Kubernetes Cluster Receiver 是 Collector 用于采集整个集群状态指标的组件。它可以采集节点状况、Pod 阶段、容器重启次数、可用与期望的 Deployment 数量等指标。(Kubernetes 集群接收器)
Kubernetes Objects Receiver
Kubernetes Objects Receiver 将 Kubernetes 对象作为日志采集。它可以采集任意对象,而一个常见且重要的使用场景是采集 Kubernetes 事件。(Kubernetes 对象接收器)
OpenTelemetry Collector Helm chart 简化了这些组件在 Deployment 形式 Collector 中的配置,并处理 RBAC、挂载等 Kubernetes 相关细节。
注意:chart 默认不会向任何后端发送数据。如果希望在所选后端中使用数据,需要自行配置 exporter。
下面是本教程使用的 values.yaml:
mode: deployment
image:
repository: otel/opentelemetry-collector-k8s
# We only want one of these collectors - any more and we'd produce duplicate data
replicaCount: 1
presets:
# enables the k8sclusterreceiver and adds it to the metrics pipelines
clusterMetrics:
enabled: true
# enables the k8sobjectsreceiver to collect events only and adds it to the logs pipelines
kubernetesEvents:
enabled: true
## The chart only includes the debugexporter by default
## If you want to send your data somewhere you need to
## configure an exporter, such as the otlp exporter
# config:
# exporters:
# otlp:
# endpoint: "<SOME BACKEND>"
# service:
# pipelines:
# traces:
# exporters: [ otlp ]
# metrics:
# exporters: [ otlp ]
# logs:
# exporters: [ otlp ]
将这份 values.yaml 保存到所选位置,然后运行以下命令,使用它安装 chart:
helm install otel-collector-cluster open-telemetry/opentelemetry-collector --values <path where you saved the chart>
现在,集群中应当已经运行一套以 Deployment 部署的 Collector,采集集群指标与事件!











暂无评论内容