作者:Elastic 平台团队
使用 Elastic 实现基于原生 OTel 的 K8s 和应用可观测性
最近,Elastic 发布了其 OpenTelemetry (OTel) 的 Elastic 发行版(EDOT),旨在增强标准 OpenTelemetry 发行版的能力,并改进现有的 Elastic 对 OpenTelemetry 的支持。EDOT 帮助 Elastic 提供了全新的统一 OpenTelemetry 体验。SRE 不再需要通过繁琐的步骤来配置和摄取 OTel 数据到可观测性中,而是可以通过简单的步骤来配置 OTel 收集器和应用程序,并将所有 OTel 数据摄取到 Elastic 中。这一体验的组成部分包括(详细信息请参阅概述博客):
• Elastic 的 OpenTelemetry 发行版 (EDOT)[1]
• 提供 OpenTelemetry Operator 配置的 Elastic:
• OTel 收集器和 SDK 的生命周期管理
• 应用程序的自动化插桩,大多数开发人员不需要手动插桩
• 预包装的接收器、处理器、导出器和 OTel Kubernetes 收集器的配置
• 基于 OTel 的开箱即用的 K8S 仪表板,用于度量和日志
• 服务、主机和容器的自动发现视图
• 直接将 OTel 数据摄取到 Elasticsearch(绕过 APM)——所有数据(日志、度量和跟踪)现在都存储在 Elastic 的 Search AI Lake 中
本文将介绍如何通过三个简单步骤将 OTel 数据摄取到 K8S 和应用程序中:
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 操作符进行自动插桩。在此示例中,我们将使用 Elastiflix[2] 应用程序
3. 一个 Kubernetes 集群,我们在设置中使用了 EKS
4. 已安装 Helm 和 Kubectl
您可以在 Elastic 的集成部分找到认证信息。更多信息也可以在文档[3]中找到。

在 Elastic 中实现 K8S 和应用程序可观测性
在介绍步骤之前,我们先来看看在 Elastic 中可以看到的内容。
一旦 Operator 启动 OTel 收集器,您可以在 Elastic 中看到以下内容:
Kubernetes 度量
使用开箱即用的仪表板,您可以查看节点度量、整体集群度量和状态,如 pods、部署等。

主机、服务和容器的自动发现视图
可以在 UI 的 Observability->Inventory 中找到

主机的详细度量、日志和处理器信息
可以在 Observability->Infrastructure->Hosts 中找到

Elastic 新 Discover(称为 Explorer)中的 K8S 和应用程序日志
可以在 Observability->Discover 中找到

应用程序服务视图(日志、度量和跟踪)
可以在 Observability->Application 中找到
然后选择服务并深入了解不同方面。

上图展示了使用原生 OTel 数据显示的跟踪。
安装步骤
步骤 0. 按照 UI 中列出的命令操作
在 Add data->Kubernetes->Kubernetes Monitoring with EDOT 下
您将找到以下指令,我们将在这里遵循。

步骤 1. 安装 OpenTelemetry Operator 的 EDOT 配置
运行以下命令。请确保您已经在 K8s 集群中进行了认证,并在此处运行下面提供的 Helm 命令。
# 添加所需的 helm 仓库
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts --force-update
# 创建所需的密钥。提供之前记录的 Elasticsearch 端点 URL 和 API 密钥
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'
# 安装 EDOT 操作符
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复制
可以在这里[4]找到 values.yaml 文件的配置。
步骤 1b: 确保 OTel 数据到达 Elastic
最简单的方法是转到菜单 > 仪表板 > [OTEL][Metrics Kubernetes] 集群概览,确保您看到以下仪表板正在填充

步骤 2: 使用自动插桩注释应用程序
在此示例中,我们只注释 Elastiflix[5] 应用程序中的一个服务,即 favorite-java 服务
使用以下命令启动自动插桩:
# 注释 Java 命名空间
kubectl annotate namespace java instrumentation.opentelemetry.io/inject-java="opentelemetry-operator-system/elastic-instrumentation"
# 重新启动 java-app 以获取新的注释
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,体验无摩擦的可观测性,保持系统的顺畅和洞察力。
引用链接
[1]
Elastic 的 OpenTelemetry 发行版 (EDOT): https://www.elastic.co/observability-labs/blog/elastic-distributions-opentelemetry[2]
Elastiflix: https://github.com/elastic/observability-examples/tree/main/Elastiflix[3]
文档: https://www.elastic.co/guide/en/kibana/current/api-keys.html[4]
这里: https://github.com/elastic/opentelemetry/blob/main/resources/kubernetes/operator/helm/values.yaml[5]
Elastiflix: https://github.com/elastic/observability-examples/tree/main/Elastiflix