Bahubali Shetti

使用 Elastic 可观测性管理您的 Kubernetes 集群

在一个平台和仪表盘上统一所有 Kubernetes 指标、日志和跟踪数据,Elastic。从基础设施到应用程序层,Elastic 可观测性让您更容易了解集群的性能。

Managing your Kubernetes cluster with Elastic Observability

作为运维工程师(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 集成

  1. 在 Elastic 中,转到集成并选择 Kubernetes 集成,然后选择添加 Kubernetes。
  2. 为 Kubernetes 集成选择一个名称。
  3. 在配置屏幕中启用 kube-state-metrics。
  4. 在新代理策略名称文本框中为配置命名。
  5. 保存配置。现在创建了具有策略的集成。

您可以阅读有关代理策略及其在 Elastic Agent 中的使用方式的更多信息 此处

  1. 添加 Kubernetes 集成。
  2. 选择您在上一步中创建的策略。
  3. 在“添加 Agent”说明的第三步中,复制粘贴或下载清单。
  4. 将清单添加到运行 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**(快乐时光平均时间)

准备好开始了吗?注册并试用我上面概述的功能和特性。

分享这篇文章