Bahubali Shetti

使用 Elastic,只需 3 步即可实现基于原生 OTel 的 K8s 和应用可观测性

Elastic 的 OpenTelemetry 发行版现在支持 OTel Operator,提供使用 EDOT SDK 对应用程序进行自动检测、以及用于 Kubernetes 可观测性的 EDOT OTel 收集器的部署和生命周期管理。了解如何通过 3 个简单的步骤进行配置

阅读时长 6 分钟
Native OTel-based K8s & App Observability in 3 Steps with Elastic

Elastic 最近发布了其 Elastic OpenTelemetry 发行版 (EDOT),该发行版旨在增强标准 OpenTelemetry 发行版的功能,并改进 Elastic 现有的 OpenTelemetry 支持。EDOT 帮助 Elastic 提供新的统一 OpenTelemetry 体验。SRE 不再需要承受繁琐的步骤,即可将 OTel 数据检测并摄取到可观测性中。SRE 可以通过简单且无摩擦的方式检测 OTel 收集器和应用程序,并将所有 OTel 数据摄取到 Elastic 中。此体验的组件包括:(在概述博客中详述)

  • Elastic OpenTelemetry 发行版 (EDOT)

  • Elastic 对 OpenTelemetry Operator 的配置,提供

    • OTel 收集器和 SDK 的 OTel 生命周期管理

    • 应用程序自动检测,大多数开发人员不会进行检测

  • OTel Kubernetes 收集器的预封装接收器、处理器、导出器和配置

  • 开箱即用的基于 OTel 的 K8S 指标和日志仪表板

  • 用于服务、主机和容器的发现清单视图

  • 直接将 OTel 摄取到 Elasticsearch 中(绕过 APM)- 所有数据(日志、指标和追踪)现在都存储在 Elastic 的 Search AI Lake 中

在此博客中,我们将介绍如何通过 3 个简单的步骤摄取 K8S 和应用程序的 OTel

  1. 从 UI 中复制安装命令

  2. 添加 OpenTelemetry helm 图表,使用 Elastic 的 helm 配置安装 OpenTelemetry Operator,并设置您的 Elastic 端点和身份验证

  3. 注释您要自动检测的应用程序服务

然后,您可以轻松地在 Elastic Observability 中查看 K8S 指标、日志以及应用程序日志、指标和追踪。

要遵循此博客,您需要具备

  1. cloud.elastic.co 上的帐户,具有获取 Elasticsearch 端点和身份验证(API 密钥)的权限

  2. 一个非检测的应用程序,其服务基于 Go、dotnet、Python 或 Java。通过 OTel Operator 进行自动检测。在此示例中,我们将使用 Elastiflix 应用程序。

  3. Kubernetes 集群,我们在设置中使用了 EKS

  4. 已加载 Helm 和 Kubectl

要查找身份验证,可以在 Elastic 的集成部分中找到它。有关更多信息,请参阅文档

Elastic 中的 K8S 和应用程序可观测性

在我们向您介绍这些步骤之前,让我们向您展示 Elastic 中可见的内容。

一旦 Operator 启动 OTel 收集器,您可以在 Elastic 中看到以下内容

Kubernetes 指标

使用开箱即用的仪表板,您可以查看节点指标、整体集群指标以及跨 Pod、部署等的状况。

用于主机、服务和容器的发现清单

可以在 UI 上的 “可观测性”->“清单” 中找到

主机上的详细指标、日志和处理器信息

可以在 “可观测性”->“基础设施”->“主机” 中找到

Elastic 新的 Discover(称为 Explorer)中的 K8S 和应用程序日志

可以在 “可观测性”->“Discover” 中找到

应用程序服务视图(日志、指标和追踪)

可以在 “可观测性”->“应用程序” 中找到

然后选择服务并深入研究不同的方面。

上面我们展示了如何使用原生 OTel 数据显示追踪。

安装步骤

步骤 0. 按照 UI 中列出的命令进行操作

在 “添加数据”->“Kubernetes”->“使用 EDOT 进行 Kubernetes 监控” 下

您将找到以下说明,我们将在此处遵循。

步骤 1. 安装 OpenTelemetry Operator 的 EDOT 配置

运行以下命令。请确保您已在 K8s 集群中进行身份验证,并且您将在此处运行下面提供的 helm 命令。

# Install helm repo needed
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts --force-update
# Install needed secrets. Provide the Elasticsearch Endpoint URL and API key you have noted in previous steps
kubectl create ns opentelemetry-operator-system
kubectl create -n opentelemetry-operator-system secret generic elastic-secret-otel \
    --from-literal=elastic_endpoint='YOUR_ELASTICSEARCH_ENDPOINT' \
    --from-literal=elastic_api_key='YOUR_ELASTICSEARCH_API_KEY'
# Install the EDOT Operator
helm install opentelemetry-kube-stack open-telemetry/opentelemetry-kube-stack --namespace opentelemetry-operator-system --create-namespace --values https://raw.githubusercontent.com/elastic/opentelemetry/refs/heads/main/resources/kubernetes/operator/helm/values.yaml --version 0.3.0

values.yaml 文件配置可以在此处找到。

步骤 1b:确保 OTel 数据正在到达 Elastic

最简单的检查方法是转到 “菜单” > “仪表板” > [OTEL][指标 Kubernetes] 集群概览,并确保您看到正在填充的以下仪表板

步骤 2:使用自动检测注释应用程序

在此示例中,我们仅注释一个服务,即 Elastiflix 应用程序中的 favorite-java 服务

使用以下命令启动自动检测

#Annotate Java namespace
kubectl annotate namespace java instrumentation.opentelemetry.io/inject-java="opentelemetry-operator-system/elastic-instrumentation"
#Restart the java-app to get the new annotation
kubectl rollout restart deployment java-app -n java

您也可以使用注释修改 Pod 的 yaml

metadata:
 name: my-app
 annotations:
   instrumentation.opentelemetry.io/inject-python: "true"

这些说明在 UI 中提供

查看 Elastic APM 中的服务数据

一旦 OTel 数据进入 Elastic,您就可以看到

  • 基于 OTel 的 Kubernetes 指标的开箱即用仪表板

  • 发现的资源,例如作为 Kubernetes 集群一部分的服务、主机和容器

  • Kubernetes 指标、主机指标、日志、处理器信息、异常检测和通用分析。

  • Elastic Discover 中的日志分析

  • 显示应用程序概览、事务、依赖关系、错误等的 APM 功能

尝试一下

Elastic 的 OpenTelemetry 发行版 (EDOT) 通过简化 Kubernetes 和应用程序的工具化,改变了可观测性体验。借助 EDOT,SRE 和开发人员可以绕过复杂的设置,立即深入了解 Kubernetes 集群,并捕获关键指标、日志和追踪信息——所有这些都在 Elastic Observability 中进行。只需几个简单的步骤,您就可以获得统一、高效的监控解决方案,将您的 OpenTelemetry 数据直接引入 Elastic。凭借强大的开箱即用仪表板、自动应用程序工具化和无缝集成,EDOT 不仅节省了时间,还提高了整个基础设施可观测性的准确性和可访问性。立即开始利用 EDOT,解锁流畅的可观测性体验,并使您的系统平稳、智能地运行。

其他资源

分享这篇文章