作为运维工程师(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、自管理)或应用程序如何,Kubernetes 监控 通过 Elastic 可观测性变得简单。所有节点、Pod、容器、应用程序和基础设施(AWS、GCP、Azure)指标、基础设施和应用程序日志以及应用程序跟踪都可在 Elastic 可观测性中使用。
在本博文中,我们将展示
- Elastic Cloud 如何通过 Elastic Agent(可以轻松地作为 DaemonSet 部署到您的集群中)聚合和摄取指标和日志数据,以从主机(系统指标、容器统计信息)以及 Kubernetes 之上运行的所有服务的日志中检索日志和指标。
- Elastic 可观测性如何为所有 Kubernetes 集群组件(Pod、节点、服务、命名空间等等)带来统一的遥测体验(日志、指标、跟踪)。
先决条件和配置
如果您计划遵循本博文,以下是我们用于设置此演示的一些组件和详细信息
- 确保您在 Elastic Cloud 上拥有帐户和已部署的堆栈(请在此处查看说明)。
- 虽然我们使用了 GKE,但您可以为 Kubernetes 集群使用任何位置。
- 我们使用了非常流行的 HipsterShop 演示应用程序的一个变体。它最初由 Google 编写,用于展示跨多种变体的 Kubernetes,例如 OpenTelemetry Demo App。要使用该应用程序,请访问 此处 并按照说明进行部署。您无需为 Kubernetes 指标流部署 otelcollector — 我们将在下面介绍这一点。
- Elastic 支持从 Prometheus 和 FluentD 本地摄取数据,但在此博文中,我们展示了通过 Elastic Agent 从 Kubernetes 集群直接摄取数据。后续博文将介绍 Elastic 如何也能从 Prometheus 或 FluentD/bit 中提取遥测数据。
您可以使用 Elastic 观测和分析什么?
在我们介绍设置 Elastic 以摄取和可视化 Kubernetes 集群指标和日志的步骤之前,让我们先快速了解一下 Elastic 的实用仪表盘。
正如我们所提到的,我们在 GKE 上运行了 HipsterShop 的一个变体,并在 GKE 集群上将 Elastic Agent 与 Kubernetes 集成作为 DaemonSet 部署。在部署代理后,Elastic 开始从 Kubernetes 集群(特别是从 kube-state-metrics)摄取指标,此外 Elastic 还将从集群中提取所有日志信息。
在 Elastic 可观测性上可视化 Kubernetes 指标
以下是一些在 Elastic 可观测性上开箱即用 (OOTB) 可用的 Kubernetes 仪表盘。
除了集群概述仪表盘和 Pod 仪表盘之外,Elastic 还有一些有用的 OOTB 仪表盘
- Kubernetes 概述仪表盘(见上文)
- Kubernetes Pod 仪表盘(见上文)
- Kubernetes 节点仪表盘
- Kubernetes 部署仪表盘
- Kubernetes DaemonSets 仪表盘
- Kubernetes StatefulSets 仪表盘
- Kubernetes CronJob 和 Jobs 仪表盘
- Kubernetes 服务仪表盘
- 定期添加更多内容
此外,您可以自定义这些仪表盘或构建您自己的仪表盘。
在 Elastic 可观测性上使用日志
从上面的屏幕截图可以看出,我不仅可以获取 Kubernetes 集群指标,还可以通过在我的 Kubernetes 集群中使用 Elastic Agent 获取所有 Kubernetes 日志。
预防、预测和纠正问题
除了帮助管理指标和日志外,Elastic 还可以帮助您检测和预测整个集群遥测数据的异常情况。只需在 Elastic 中针对您的数据启用机器学习,然后观察它如何帮助您增强分析工作。如下所示,Elastic 不仅仅是 Kubernetes 集群日志和指标的统一可观测性位置,它还提供广泛的真正机器学习功能来增强您的分析和管理。
上图显示了日志中的异常检测,它显示在9月21日至23日期间可能存在问题。通过分析单个kubernetes.pod.cpu.usage.node指标来查看下图的详细信息,该指标显示9月初和9月底都出现了CPU问题。您可以使用机器学习对集群遥测数据进行更复杂的分析,例如多指标分析(与我上面显示的单指标问题相比)以及总体分析。
Elastic 提供更强大的机器学习功能,以增强您对 Kubernetes 集群遥测数据的分析。在下一节中,我们将逐步介绍如何轻松地将您的遥测数据导入 Elastic。
全部设置
让我们逐步了解如何从部署在 GKE 上的 HipsterShop 应用程序中将指标、日志和跟踪数据导入 Elastic。
首先,选择您喜欢的 Hipstershop 版本——正如我们上面提到的,我们使用了 OpenTelemetry-Demo 的一个变体,因为它已经包含了 OTel。但是,我们为这篇博文简化了它(更少的服务,一些不同的语言)。
步骤 0:获取 Elastic Cloud 帐户
按照说明 开始使用 Elastic Cloud。
步骤 1:获取 Kubernetes 集群并将您的 Kubernetes 应用程序加载到您的集群中
在您选择的云服务或本地 Kubernetes 平台上获取您的 Kubernetes 集群上的应用程序。一旦您的应用程序在 Kubernetes 上启动,您应该在默认命名空间中运行以下 pod(或某些变体)。
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
接下来,在 examples 目录下的 kube-state-metrics 目录中,只需应用标准配置。
kubectl apply -f ./standard
这将启用 kube-state-metrics,您应该会看到类似于此的 pod 在 kube-system 命名空间中运行。
kube-state-metrics-5f9dc77c66-qjprz 1/1 Running 0 4d4h
步骤 3:安装具有 Kubernetes 集成的 Elastic Agent
添加 Kubernetes 集成
- 在 Elastic 中,转到集成并选择 Kubernetes 集成,然后选择添加 Kubernetes。
- 为 Kubernetes 集成选择一个名称。
- 在配置屏幕中启用 kube-state-metrics。
- 在新代理策略名称文本框中为配置命名。
- 保存配置。现在创建了具有策略的集成。
您可以阅读有关代理策略及其在 Elastic Agent 中的使用方式的更多信息 此处。
- 添加 Kubernetes 集成。
- 选择您在上一步中创建的策略。
- 在“添加 Agent”说明的第三步中,复制粘贴或下载清单。
- 将清单添加到运行 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。
步骤 4:查看 Elastic 开箱即用的仪表板 (OOTB) 以获取 Kubernetes 指标并开始发现 Kubernetes 日志
就是这样。您应该会看到指标流入所有仪表板。要查看特定 pod 的日志,只需进入 Kibana 中的“发现”并搜索特定 pod 名称。
此外,您还可以直接在 Elastic 中浏览所有 pod 日志。
在上面的示例中,我搜索了 frontendService 和 cartService 日志。
步骤 5:奖励!
因为我们使用的是基于 OTel 的应用程序,Elastic 甚至可以提取应用程序跟踪。但这将在另一篇博文中讨论。
以下是 Hipster Shop 的前端事务跟踪在 Elastic Observability 中的样子。
结论:Elastic Observability 非常适合 Kubernetes 监控
我希望您已经了解 Elastic Observability 如何帮助您管理 Kubernetes 集群以及它为即使是简单的部署生成的指标、日志和跟踪数据的复杂性。
课程和更具体学习的快速回顾
- 如何通过 Elastic AgentElastic Cloud聚合和摄取遥测数据,该代理可以轻松地作为 DaemonSet 部署到您的集群中,并从主机检索指标,例如系统指标、容器统计信息以及在 Kubernetes 之上运行的所有服务的指标
- 展示 Elastic 如何提供统一的遥测体验(Kubernetes 日志、指标、跟踪),涵盖所有 Kubernetes 集群组件(pod、节点、服务、任何命名空间等等)。
- 有兴趣探索 Elastic 的机器学习功能,这将减少您的 **MTTHH**(快乐时光平均时间)
准备好开始了吗?注册并试用我上面概述的功能和特性。