作为运维工程师(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 集成
- 在 Elastic 中,转到集成并选择 Kubernetes 集成,然后选择“添加 Kubernetes”。
- 为 Kubernetes 集成选择一个名称。
- 在配置屏幕中启用 kube-state-metrics。
- 在新 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。
步骤 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**(平均欢乐时光时间)
准备好开始了吗?注册并试用我上面概述的功能。