作为一名运维工程师(SRE、IT 管理人员、DevOps),您总是在为如何管理技术和数据杂乱无章的局面而苦恼。Kubernetes 变得越来越普遍,其中大部分部署将在 Amazon Elastic Kubernetes Service (EKS)、Google Kubernetes Engine (GKE) 或 Azure Kubernetes Service (AKS) 中进行。有些人可能只使用一个云,而其他人需要管理多个 Kubernetes 云服务上的集群,这就增加了负担。除了云服务提供商的复杂性之外,您还需要管理数百个已部署的服务,这些服务会产生越来越多的可观测性和遥测数据。
通过 Kubernetes 集群和在集群上运行的应用程序生成的日志、指标和跟踪来了解它们的状态和运行状况,这一日常操作可能是您面临的最大挑战。但作为一名运维工程师,您需要使用所有这些重要数据来帮助预防、预测和修复问题。当您需要对 Kubernetes 遥测数据进行可视化和分析以进行故障排查和提供支持时,您肯定不想这么多的指标、日志和跟踪分布在多个工具中。
Elastic 可观测性通过提供广泛而集中的可观测性功能(而不仅仅是我们所熟知的日志记录功能),来帮助管理杂乱无章的 Kubernetes 指标和日志。Elastic 可观测性通过 OpenTelemetry 和 APM 代理统一管理所有指标、日志和跟踪数据,为您提供有关 Kubernetes 集群以及在集群上运行的应用程序行为的精细化见解和背景信息。
无论集群位于何处(EKS、GKE、AKS、自管型部署),也不管是什么应用程序,Elastic 可观测性都能让 Kubernetes 监测变得轻而易举。所有节点、Pod、容器、应用程序和基础架构(AWS、GCP、Azure)指标、基础架构和应用程序日志,以及应用程序跟踪,这些内容都可在 Elastic 可观测性中查看。
本篇博文将会展示:
- Elastic Cloud 如何通过Elastic Agent(作为 DaemonSet 轻松部署在集群上)聚合和采集指标和日志数据,从而从主机(系统指标、容器统计数据)以及运行在 Kubernetes 之上的所有服务的日志中检索日志和指标。
- Elastic 可观测性如何在所有 Kubernetes 集群组件(Pod、节点、服务、命名空间等)中提供一体化的遥测体验(日志、指标、跟踪)。

如果您打算跟着本博文照做,下面是我们用来设置这个演示的一些组件和细节:
- 确保您拥有一个 Elastic Cloud 账号,且已部署一个堆栈(在此处查看相关说明)。
- 虽然我们使用的是 GKE,但您可以对 Kubernetes 集群使用任何位置。
- 我们使用的是超级热门的 HipsterShop 演示应用程序的一个变体。HipsterShop 最初由 Google 编写,用于展示 Kubernetes 在多种可用变体(如 OpenTelemetry 演示应用)中的表现。要使用该应用,请访问此处并按照说明进行部署。您不需要为 Kubernetes 指标部署 otelcollector 来导入,我们将在下面介绍这一点。
- Elastic 支持从 Prometheus 和 FluentD 进行原生采集,但在本文中,我们将展示通过 Elastic Agent 从 Kubernetes 集群直接采集。后续的博客将展示 Elastic 如何从 Prometheus 或 FluentD/bit 中收集遥测数据。
用 Elastic 可以观测和分析哪些内容?
在我们详细介绍如何设置 Elastic 以采集 Kubernetes 集群指标和日志并对其进行可视化之前,先来看看 Elastic 中的实用仪表板。
如前所述,我们在 GKE 上运行了 HipsterShop 的一个变体,并在 GKE 集群上部署了具有 Kubernetes 集成的 Elastic Agent 作为 DaemonSet。在部署代理后,Elastic 开始从 Kubernetes 集群(特别是从 kube-state-metrics)采集指标;此外,Elastic 将从集群中提取所有日志信息。


除了集群概述仪表板和 Pod 仪表板之外,Elastic 还提供了几个实用的 OOTB 仪表板:
- Kubernetes 概述仪表板(见上图)
- Kubernetes Pod 仪表板(见上图)
- Kubernetes 节点仪表板
- Kubernetes 部署仪表板
- Kubernetes DaemonSet 仪表板
- Kubernetes StatefulSet 仪表板
- Kubernetes CronJob 和 Job 仪表板
- Kubernetes 服务仪表板
- 定期添加更多仪表板
此外,您还可以定制这些仪表板或构建您自己的仪表板

从上面的屏幕中可以看到,我不仅可以获取 Kubernetes 集群指标,还可以通过在 Kubernetes 集群中使用 Elastic Agent 获取所有 Kubernetes 日志。


在上图中,您可以看到对日志的异常检测,它显示了 9 月 21 日至 23 日期间可能出现的错误。通过分析单个 kubernetes.pod.cpu.usage.node 指标(显示 9 月初和 9 月底都出现了 CPU 问题),深入了解底部图表中的细节。借助 Machine Learning,您可以使用多指标分析(相对于我上面展示的单指标问题)和总体分析对集群遥测数据进行更复杂的分析。
Elastic 为您提供了更强大的 Machine Learning 功能,以增强对 Kubernetes 集群遥测数据的分析。在下一节中,我们将了解将遥测数据导入 Elastic 有多么容易。
我们来详细了解如何从部署在 GKE 上的 HipsterShop 应用程序中获取指标、日志和跟踪。
首先,选择您最喜欢的 Hipstershop 版本,如前所述,我们使用的是 OpenTelemetry-Demo 的一个变体,因为它已经有了 OTel。不过,我们在本文中精简了一下(服务更少,使用了一些不同的语言)。
按照说明开始体验 Elastic Cloud。

NAME READY STATUS RESTARTS AGE
adservice-8694798b7b-jbfxt 1/1 Running 0 4d3h
cartservice-67b598697c-hfsxv 1/1 Running 0 4d3h
checkoutservice-994ddc4c4-p9p2s 1/1 Running 0 4d3h
currencyservice-574f65d7f8-zc4bn 1/1 Running 0 4d3h
emailservice-6db78645b5-ppmdk 1/1 Running 0 4d3h
frontend-5778bfc56d-jjfxg 1/1 Running 0 4d3h
jaeger-686c775fbd-7d45d 1/1 Running 0 4d3h
loadgenerator-c8f76d8db-gvrp7 1/1 Running 0 4d3h
otelcollector-5b87f4f484-4wbwn 1/1 Running 0 4d3h
paymentservice-6888bb469c-nblqj 1/1 Running 0 4d3h
productcatalogservice-66478c4b4-ff5qm 1/1 Running 0 4d3h
recommendationservice-648978746-8bzxc 1/1 Running 0 4d3h
redis-cart-96d48485f-gpgxd 1/1 Running 0 4d3h
shippingservice-67fddb767f-cq97d 1/1 Running 0 4d3h
第 2 步:打开 kube-state-metrics
接下来您需要打开 kube-state-metrics。
首先:
git clone https://github.com/kubernetes/kube-state-metrics.git
接下来,在示例目录下的 kube-state-metrics 目录中,应用标准配置即可。
kubectl apply -f ./standard
这将打开 kube-state-metrics,您将看到 kube-system 命名空间中在运行一个类似的 Pod。
kube-state-metrics-5f9dc77c66-qjprz 1/1 Running 0 4d4h
添加 Kubernetes 集成:
- 在 Elastic 中,前往“integrations”(集成),选择“Kubernetes Integration”(Kubernetes 集成),然后选择“Add Kubernetes”(添加 Kubernetes)。
- 为 Kubernetes 集成选择一个名称。
- 在配置屏幕中打开 kube-state-metrics。
- 在 new-agent-policy-name 文本框中为配置指定一个名称。
- 保存配置。现在与策略的集成已经创建好了。
您可以在此处了解代理策略以及如何在 Elastic Agent 上使用这些策略。


- 添加 Kubernetes 集成。
- 选择刚才在第二步中创建的策略。
- 在“添加代理”说明的第三步中,复制并粘贴或下载清单。
- 将清单添加到运行 kubectl 的 shell 中,将其保存为 elastic-agent-managed-kubernetes.yaml,并运行以下命令。
kubectl apply -f elastic-agent-managed-kubernetes.yaml
您应该会看到在 kube-system 命名空间中显示了许多作为 DaemonSet 一部分的代理。
NAME READY STATUS RESTARTS AGE
elastic-agent-qr6hj 1/1 Running 0 4d7h
elastic-agent-sctmz 1/1 Running 0 4d7h
elastic-agent-x6zkw 1/1 Running 0 4d7h
elastic-agent-zc64h 1/1 Running 0 4d7h
在我的集群中,我有四个节点和四个作为 DaemonSet 的一部分启动的 elastic-agent。


此外,您还可以直接在 Elastic 中浏览所有 Pod 日志。

在上面的示例中,我搜索了 frontendService 和 cartService 日志。

希望您已经了解了 Elastic 可观测性对您管理 Kubernetes 集群有怎样的帮助,以及它为实现简单部署而生成的指标、日志和跟踪数据的复杂性。
快速回顾一下所学内容,具体要点如下:
- Elastic Cloud 如何通过 Elastic Agent(作为 DaemonSet 轻松部署在集群上)聚合和采集遥测数据,并从主机(如系统指标、容器统计数据)以及在 Kubernetes 上运行的所有服务中检索指标
- 展示 Elastic 在所有 Kubernetes 集群组件(Pod、节点、服务、任何命名空间等)中提供一体化的遥测体验(Kubernetes 日志、指标、跟踪)所带来的好处。
- 对探索 Elastic 的 ML 功能很感兴趣,因为这一功能可增加 MTTHH(平均休闲时间)
准备好开始体验了吗?注册并试用我在上文中概述的特性和功能。