入门指南

本页面将带您快速了解使用 OpenTelemetry 监控 Kubernetes 集群的最快方法。它将专注于收集 Kubernetes 集群、节点、Pod 和容器的度量和日志,并使集群能够支持发出 OTLP 数据的服务。

如果您想在 Kubernetes 上实际看到 OpenTelemetry 的效果,最好的方法是从 OpenTelemetry 演示 开始。该演示旨在演示 OpenTelemetry 的实现方式,但不是用来监控 Kubernetes 本身的例子。在完成本教程后,安装演示并查看所有监控如何响应活跃负载可以作为一项有趣的实验。

如果您计划从 Prometheus 迁移到 OpenTelemetry,或者有兴趣使用 OpenTelemetry Collector 收集 Prometheus 指标,可以参考Prometheus 接收器

概述

Kubernetes 以多种不同的方式公开了许多重要的遥测数据。它具有许多不同对象的日志、事件和度量数据,以及其工作负载生成的数据。

为了收集所有这些数据,我们将使用 OpenTelemetry Collector。收集器拥有许多不同的工具,可以有效地收集所有这些数据并以有意义的方式增强它们。

为了收集所有数据,我们将需要安装两个收集器,一个作为守护进程集,另一个作为部署。收集器的守护进程集安装将用于收集由服务发出的遥测数据、日志和度量,以及节点、Pod 和容器的度量。收集器的部署安装将用于收集集群和事件的度量。

为了安装收集器,我们将使用 OpenTelemetry Collector Helm chart,它带有一些配置选项,可以更轻松地配置收集器。如果您对 Helm 不熟悉,请查看 Helm 项目网站。如果您有兴趣使用 Kubernetes operator,请参考OpenTelemetry Operator,但本指南将重点介绍 Helm chart。

准备工作

本指南将假设使用 Kind 集群,但您可以自由选择任何您认为适合的 Kubernetes 集群。

假设您已经安装了 Kind,创建一个新的 Kind 集群:

kind create cluster

假设您已经安装了 Helm,请添加 OpenTelemetry Collector Helm chart,以便稍后安装:

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts

守护进程集收集器

收集 Kubernetes 遥测数据的第一步是部署一个守护进程集实例的 OpenTelemetry Collector,以收集与节点和在这些节点上运行的工作负载相关的遥测数据。守护进程集用于确保该收集器的实例被安装在所有节点上。守护进程集中的每个收集器实例都只会从其所在的节点收集数据。

此收集器实例将使用以下组件:

让我们来逐一介绍这些组件。

OTLP Receiver

OTLP Receiver 是以 OTLP 格式(/docs/specs/otel/protocol/)收集跟踪、度量和日志的最佳解决方案。如果您以其他格式发出应用遥测数据,很可能收集器有适用于该格式的接收器,但是在本教程中,我们将假设遥测数据以 OTLP 格式进行格式化。

尽管这不是必要条件,但是,所有在节点上运行的应用程序通常将它们的跟踪、度量和日志发给在同一节点上运行的收集器,这样保持网络交互简单,并可以使用 k8sattributes 处理器轻松地关联 Kubernetes 元数据。

Kubernetes Attributes Processor

Kubernetes Attributes Processor 是从任何接收 Kubernetes Pod 遥测数据的收集器中推荐使用的组件。该处理器会自动发现 Kubernetes Pod,并提取其元数据(如 Pod 名称或节点名称),将提取的元数据添加到跟踪、度量和日志中作为资源属性。由于它会将 Kubernetes 上下文添加到遥测数据中,因此 Kubernetes Attributes Processor 允许您将应用程序的跟踪、度量和日志信号与 Kubernetes 遥测数据(如 Pod 度量和跟踪)进行关联。

Kubeletstats Receiver

Kubeletstats Receiver 是用于收集关于节点的度量数据的接收器。它将收集包括 Pod 名称或节点名称在内的度量数据,例如容器内存使用情况、Pod CPU 使用情况和节点网络错误。所有遥测数据都包括 Kubernetes 的元数据。由于我们正在使用 Kubernetes Attributes Processor,因此我们将能够将应用程序的跟踪、度量和日志与 Kubeletstats Receiver 生成的度量数据进行关联。

Filelog Receiver

Filelog Receiver 将通过追踪 Kubernetes 写入到 /var/log/pods/*/*/*.log 的日志文件来收集通过 stdout/stderr 写入的日志。与大多数日志追踪器一样,filelog receiver 提供了一组强大的操作,可以根据需要解析文件。

也许有一天您需要自己配置 Filelog Receiver,但是在本教程中,OpenTelemetry Helm Chart 将处理所有复杂的配置。此外,它将根据文件名提取有用的 Kubernetes 元数据。由于我们正在使用 Kubernetes Attributes Processor,因此我们将能够将应用程序的跟踪、度量和日志与 Filelog Receiver 生成的日志进行关联。


OpenTelemetry Collector Helm chart 可以轻松配置收集器的守护进程集安装中的所有这些组件。它还会负责处理 Kubernetes 的所有特定细节,例如 RBAC、挂载和主机端口。

有一个注意事项 - 默认情况下,该 chart 不会将数据发送到任何后端。如果您想要在您喜欢的后端实际使用数据,您需要自己配置一个 exporter。

下面是我们将使用的 values.yaml

mode: daemonset

presets:
  # 启用 k8sattributesprocessor 并将其添加到 traces、metrics 和 logs 流水线中
  kubernetesAttributes:
    enabled: true
  # 启用 kubeletstatsreceiver 并将其添加到 metrics 流水线中
  kubeletMetrics:
    enabled: true
  # 启用 filelogreceiver 并将其添加到 logs 流水线中
  logsCollection:
    enabled: true
## 该 chart 默认仅包含 loggingexporter
## 如果您想要将数据发送到某个地方,您需要配置一个 exporter,例如 otlpexporter
# config:
# exporters:
#   otlp:
#     endpoint: "<SOME BACKEND>"
# service:
#   pipelines:
#     traces:
#       exporters: [ otlp ]
#     metrics:
#       exporters: [ otlp ]
#     logs:
#       exporters: [ otlp ]

要使用此 values.yaml 安装 chart,请将其保存到您喜欢的文件位置,然后运行以下命令来安装 chart:

helm install otel-collector open-telemetry/opentelemetry-collector --values <保存图表的路径>

您现在应该在集群中的每个节点上运行了一个守护进程集的 OpenTelemetry Collector 安装!

部署收集器

收集 Kubernetes 遥测数据的下一步是部署部署类型的 Collector 实例,以收集与整个集群相关的遥测数据。部署一个具有一个副本的部署可以确保不会产生重复数据。

此收集器实例将使用以下组件:

让我们逐一介绍这些组件。

Kubernetes Cluster Receiver

Kubernetes Cluster Receiver 是收集整个集群状态的度量数据的 Collector 解决方案。该接收器可以收集有关节点状态、Pod 阶段、容器重启、可用和所需部署等的度量数据。

Kubernetes Objects Receiver

Kubernetes Objects Receiver 是收集 Kubernetes 对象作为日志的 Collector 解决方案。尽管可以收集任何对象,但常见且重要的用例是收集 Kubernetes 事件。


OpenTelemetry Collector Helm chart 简化了在部署安装的 Collector 中配置所有这些组件的过程。它还会负责处理 Kubernetes 的所有特定细节,例如 RBAC 和挂载。

有一个注意事项 - 默认情况下,该 chart 不会将数据发送到任何后端。如果您想要在您喜欢的后端实际使用数据,您需要自己配置一个 exporter。

下面是我们将使用的 values.yaml

mode: deployment

# 我们只需要一个这样的收集器 - 多于一个将产生重复数据
replicaCount: 1

presets:
  # 启用 k8sclusterreceiver 并将其添加到 metrics 流水线中
  clusterMetrics:
    enabled: true
  # 启用 k8sobjectsreceiver 仅收集事件,并将其添加到 logs 流水线中
  kubernetesEvents:
    enabled: true
## 该 chart 默认仅包含 loggingexporter
## 如果您想要将数据发送到某个地方,您需要配置一个 exporter,例如 otlpexporter
# config:
# exporters:
#   otlp:
#     endpoint: "<SOME BACKEND>"
# service:
#   pipelines:
#     traces:
#       exporters: [ otlp ]
#     metrics:
#       exporters: [ otlp ]
#     logs:
#       exporters: [ otlp ]

要使用此 values.yaml 安装 chart,请将其保存到您喜欢的文件位置,然后运行以下命令来安装 chart:

helm install otel-collector-cluster open-telemetry/opentelemetry-collector --values <保存图表的路径>

您现在应该在集群中运行了一个部署安装的收集器,它会收集集群度量和事件!

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