Bahubali Shetti

使用 Elastic Observability 管理您的 Kubernetes 集群

在单一平台和仪表板 Elastic 上统一所有 Kubernetes 指标、日志和追踪数据。从基础设施到应用程序层,Elastic Observability 使您更容易了解集群的性能。

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 Observability 通过提供超出我们所知的日志记录的广泛和集中的可观察性功能,帮助管理 Kubernetes 指标和日志的蔓延。Elastic Observability 通过 OpenTelemetry 和 APM 代理统一所有指标、日志和追踪数据,为您提供对 Kubernetes 集群行为以及在其上运行的应用程序的精细洞察和上下文。

无论集群位置(EKS、GKE、AKS、自管理)或应用程序如何,使用 Elastic Observability 可以简化 Kubernetes 监控。所有节点、Pod、容器、应用程序和基础设施(AWS、GCP、Azure)指标、基础设施和应用程序日志,以及应用程序追踪都可以在 Elastic Observability 中使用。

在本博客中,我们将展示

  • Elastic Cloud 如何通过 Elastic Agent(可以作为 DaemonSet 轻松部署在您的集群上)聚合和摄取指标和日志数据,以检索主机(系统指标、容器统计信息)的日志和指标以及 Kubernetes 上运行的所有服务的日志。
  • Elastic Observability 如何在您的所有 Kubernetes 集群组件(Pod、节点、服务、命名空间等)中带来统一的遥测体验(日志、指标、追踪)。

先决条件和配置

如果您计划遵循本博客,以下是我们用来设置此演示的一些组件和详细信息

  • 确保您在 Elastic Cloud 上有一个帐户,并且已部署堆栈(请参阅此处的说明)。
  • 虽然我们使用了 GKE,但您可以为您的 Kubernetes 集群使用任何位置。
  • 我们使用了非常流行的 HipsterShop 演示应用程序的变体。它最初由 Google 编写,旨在展示 Kubernetes 的多种可用变体,例如 OpenTelemetry 演示应用程序。要使用该应用程序,请转到此处并按照说明进行部署。您不需要部署 otelcollector 来使 Kubernetes 指标流动 - 我们将在下面介绍。
  • Elastic 支持来自 Prometheus 和 FluentD 的本机摄取,但在本博客中,我们将展示如何通过 Elastic Agent 直接从 Kubernetes 集群进行摄取。将有一篇后续博客展示 Elastic 如何从 Prometheus 或 FluentD/bit 中提取遥测数据。

可以使用 Elastic 观察和分析什么?

在详细介绍如何设置 Elastic 以摄取和可视化 Kubernetes 集群指标和日志之前,让我们先看一下 Elastic 的有用仪表板。

正如我们所指出的,我们在 GKE 上运行了 HipsterShop 的一个变体,并在 GKE 集群上以 DaemonSet 的形式部署了带有 Kubernetes 集成的 Elastic Agent。在部署代理后,Elastic 开始从 Kubernetes 集群(特别是从 kube-state-metrics)摄取指标,此外,Elastic 将从集群中提取所有日志信息。

在 Elastic Observability 上可视化 Kubernetes 指标

以下是 Elastic Observability 上开箱即用 (OOTB) 的一些 Kubernetes 仪表板。

除了集群概览仪表板和 Pod 仪表板之外,Elastic 还有几个有用的 OOTB 仪表板

  • Kubernetes 概览仪表板(见上文)
  • Kubernetes Pod 仪表板(见上文)
  • Kubernetes 节点仪表板
  • Kubernetes 部署仪表板
  • Kubernetes DaemonSet 仪表板
  • Kubernetes StatefulSet 仪表板
  • Kubernetes CronJob 和作业仪表板
  • Kubernetes 服务仪表板
  • 更多正在定期添加

此外,您可以自定义这些仪表板或构建自己的仪表板。

在 Elastic Observability 上使用日志

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

预防、预测和修复问题

除了帮助管理指标和日志外,Elastic 还可以帮助您检测和预测集群遥测数据中的异常情况。只需在 Elastic 中针对您的数据启用机器学习,即可看到它如何帮助您增强分析工作。正如您在下面看到的,Elastic 不仅是 Kubernetes 集群日志和指标的统一可观测性平台,还提供了广泛的真正机器学习功能,以增强您的分析和管理。

在顶部的图表中,您可以看到日志中的异常检测,它显示了 9 月 21 日至 23 日期间可能存在问题。通过分析单个 kubernetes.pod.cpu.usage.node 指标,深入了解底部图表中的详细信息,该指标显示 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

接下来,在 kube-state-metrics 目录下的 examples 目录中,只需应用标准配置即可。

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. 在新 agent-policy-name 文本框中为配置命名。
  5. 保存配置。现在已创建具有策略的集成。

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

  1. 添加 Kubernetes 集成。
  2. 在第二步中,选择您刚刚创建的策略。
  3. 在添加代理说明的第三步中,复制并粘贴或下载清单。
  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 中的 Discover 并搜索特定的 Pod 名称即可。

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

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

步骤 5:奖励!

因为我们使用的是基于 OTel 的应用程序,所以 Elastic 甚至可以提取应用程序跟踪。但这将在另一篇博客中讨论。

这是一个快速浏览,了解 Hipster Shop 的前端事务在 Elastic Observability 中的跟踪情况。

结论:Elastic Observability 非常适合 Kubernetes 监控

我希望您了解 Elastic Observability 如何帮助您管理 Kubernetes 集群以及它为即使是简单的部署生成的指标、日志和跟踪数据的复杂性。

快速回顾一下课程,更具体地说是学到的知识

  • Elastic Cloud 如何通过 Elastic Agent 聚合和摄取遥测数据,该代理可以作为 DaemonSet 轻松部署在您的集群上,并从主机检索指标,例如系统指标、容器统计信息以及 Kubernetes 上运行的所有服务的指标
  • 展示 Elastic 从跨 Kubernetes 集群所有组件(Pod、节点、服务、任何命名空间等)的统一遥测体验(Kubernetes 日志、指标、跟踪)中带来了什么。
  • 有兴趣探索 Elastic 的 ML 功能,这将减少您的 **MTTHH**(平均欢乐时光时间)

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

分享这篇文章