暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 Elastic:3 个步骤实现基于原生 OTel 的 K8s 和应用可观测性

Elastic搜索 2024-12-26
15

 

作者: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. 1. 从 UI 复制安装命令

  2. 2. 添加 OpenTelemetry Helm 图表,使用 Elastic 的 Helm 配置安装 OpenTelemetry Operator,并设置 Elastic 端点和认证

  3. 3. 注释您希望自动插桩的应用程序服务

然后,您可以轻松地在 Elastic Observability 中查看 K8S 的度量、日志以及应用程序的日志、度量和跟踪。

OpenTelemetry 统一可观测性体验

要跟随本文,您需要具备以下条件:

  1. 1. 在 cloud.elastic.co 上拥有一个账户,并获取 Elasticsearch 端点和认证(API 密钥)

  2. 2. 一个未插桩的应用程序,服务基于 Go、dotnet、Python 或 Java。通过 OTel 操作符进行自动插桩。在此示例中,我们将使用 Elastiflix[2] 应用程序

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

  4. 4. 已安装 Helm 和 Kubectl

您可以在 Elastic 的集成部分找到认证信息。更多信息也可以在文档[3]中找到。

OpenTelemetry API 密钥

在 Elastic 中实现 K8S 和应用程序可观测性

在介绍步骤之前,我们先来看看在 Elastic 中可以看到的内容。

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

Kubernetes 度量

使用开箱即用的仪表板,您可以查看节点度量、整体集群度量和状态,如 pods、部署等。

基于 OTel 的 Kubernetes 仪表板

主机、服务和容器的自动发现视图

可以在 UI 的 Observability->Inventory 中找到

基于 OTel 的 Kubernetes 清单

主机的详细度量、日志和处理器信息

可以在 Observability->Infrastructure->Hosts 中找到

基于 OTel 的 Kubernetes 主机度量

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

可以在 Observability->Discover 中找到

基于 OTel 的 Kubernetes 日志

应用程序服务视图(日志、度量和跟踪)

可以在 Observability->Application 中找到

然后选择服务并深入了解不同方面。

基于 OTel 的应用程序 Java 跟踪

上图展示了使用原生 OTel 数据显示的跟踪。

安装步骤

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

在 Add data->Kubernetes->Kubernetes Monitoring with EDOT 下

您将找到以下指令,我们将在这里遵循。

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] 集群概览,确保您看到以下仪表板正在填充

基于 OTel 的 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 中提供:

使用 EDOT SDK 注释应用程序

在 Elastic APM 中查看服务数据

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

  • • 基于 OTel 的 Kubernetes 度量的开箱即用仪表板

  • • 发现的资源,如 Kubernetes 集群中的服务、主机和容器

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

  • • Elastic Discover 中的日志分析

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

Elastic APM 中的 Java 服务
基于 OTel 的应用程序 Java 跟踪

尝试一下

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

 


文章转载自Elastic搜索,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论