对更快、更可扩展的服务的需求正在上升。我们的日常生活依赖于应用程序,从用于交付您最喜欢的餐点的外卖应用程序,到用于管理您的帐户的银行应用程序,甚至是用于安排医生预约的应用程序。这些应用程序不仅需要从功能角度增长,还需要在用户容量方面增长。全球覆盖范围的规模和需求推动了这些高需求云应用程序的复杂性不断增加。
为了跟上需求的步伐,大多数这些在线应用程序和服务(例如,移动应用程序、网页、SaaS)正在转向基于分布式微服务的架构和 Kubernetes。将您的应用程序迁移到云后,如何管理和监控服务的生产、扩展和可用性?OpenTelemetry 正迅速成为 Kubernetes 应用程序的检测和收集应用程序遥测数据的实际标准。
OpenTelemetry (OTel) 是一个开源项目,提供一组可用于生成、收集和导出遥测数据(指标、日志和跟踪)以了解软件性能和行为的工具、API 和 SDK。OpenTelemetry 最近成为 CNCF 孵化项目,并获得了大量不断增长的社区和供应商支持。
虽然 OTel 提供了一种使用标准遥测格式来检测应用程序的标准方法,但它不提供任何后端或分析组件。因此,在应用程序、基础设施和用户体验监控中使用 OTel 库可以灵活地选择合适的可观测性工具。可观测性工具。应用程序性能监控 (APM) 不再有任何供应商锁定。
Elastic Observability 原生支持 OpenTelemetry 及其 OpenTelemetry 协议 (OTLP),以摄取跟踪、指标和日志。所有 Elastic Observability 的 APM 功能都可用于 OTel 数据。因此,以下功能(以及更多)可用于 OTel 数据
- 服务地图
- 服务详细信息(延迟、吞吐量、失败的事务)
- 服务之间的依赖关系
- 事务(跟踪)
- ML 相关性(特别是针对延迟)
- 服务日志
除了 Elastic 的 APM 和遥测数据的统一视图外,您现在还可以使用 Elastic 强大的机器学习功能来减少分析和警报,以帮助减少 MTTR。
鉴于其开源传统,Elastic 还支持其他基于 CNCF 的项目,例如 Prometheus、Fluentd、Fluent Bit、Istio、Kubernetes (K8S) 等等。
此博客将展示
- 如何配置一个流行的 OTel 检测演示应用程序 (Hipster Shop),通过几个简单的步骤将其摄取到 Elastic Cloud 中
- 重点介绍 Elastic APM 的一些功能以及围绕 OTel 数据的功能,以及在 Elastic 中使用此数据可以做什么
在后续的博客中,我们将详细介绍如何将 Elastic 的机器学习与 OTel 遥测数据一起使用,如何检测特定语言的 OTel 应用程序指标,如何通过 OTel 收集器支持 Prometheus 摄取等等。请继续关注!
先决条件和配置
如果您计划跟随本博客,以下是我们用于设置配置的一些组件和详细信息
- 确保您在 Elastic Cloud 上拥有帐户和一个已部署的堆栈(请参阅此处的说明)。
- 我们使用了 OpenTelemetry 演示。有关将 Elastic 与 OpenTelemetry 演示一起使用的说明,请参阅此处。
- 确保您还在本地安装了 kubectl 和 helm。
- 此外,我们正在使用应用程序的手动检测 OTel 版本。在此博客配置中未使用 OTel 自动检测。
- 我们的集群位置。虽然我们使用了 Google Kubernetes Engine (GKE),但您可以使用您选择的任何 Kubernetes 平台。
- 虽然 Elastic 可以直接从 OTel 检测的服务中摄取遥测数据,但我们将重点介绍使用 OpenTelemetry Collector 的更传统的部署。
- Prometheus 和 FluentD/Fluent Bit(传统上用于提取所有 Kubernetes 数据)与 Kubernetes Agent 相比,此处未使用。后续博客将展示这一点。
这是我们将在本博客中设置的配置
全部设置
在接下来的几个步骤中,我将逐步介绍 Opentelemetry 可视化
- 在 Elastic Cloud 上获取一个帐户
- 启动 GKE 集群
- 启动应用程序
- 配置 Kubernetes OTel Collector configmap 以指向 Elastic Cloud
- 将 Elastic Observability APM 与 OTel 数据结合使用以提高可见性
步骤 0:在 Elastic Cloud 上创建一个帐户
按照说明开始使用 Elastic Cloud。
步骤 1:启动 K8S 集群
我们使用了 Google Kubernetes Engine (GKE),但您可以使用您选择的任何 Kubernetes 平台。
Elastic 从 Kubernetes 集群收集 OpenTelemetry 数据没有任何特殊要求。GKE、EKS、AKS 或 Kubernetes 兼容集群(自部署和管理)上的任何普通 Kubernetes 集群都可以工作。
步骤 2:在集群上加载 OpenTelemetry 演示应用程序
将你的应用程序部署到你选择的云服务或本地 Kubernetes 平台的 Kubernetes 集群上。我使用的应用程序可以在这里找到。
首先,将目录克隆到本地
git clone https://github.com/elastic/opentelemetry-demo.git
这些说明使用了针对 Elastic 的特定 opentelemetry-collector 配置。本质上,elastic/opentelemetry-demo 中指定的 Elastic values.yaml 文件,通过两个主要值配置 opentelemetry-collector 指向 Elastic APM Server。
OTEL_EXPORTER_OTLP_ENDPOINT 是 Elastic 的 APM Server。
OTEL_EXPORTER_OTLP_HEADERS 是 Elastic 授权。
这两个值可以在你的 Elastic 云中的 APM 集成说明(集成->APM)下的 OpenTelemetry 设置说明中找到。
一旦你获得这些值,第一步是使用你的 Elastic APM 服务器端点和你的 APM 密钥令牌,在集群上创建一个密钥,使用以下说明:
kubectl create secret generic elastic-secret \
--from-literal=elastic_apm_endpoint='YOUR_APM_ENDPOINT_WITHOUT_HTTPS_PREFIX' \
--from-literal=elastic_apm_secret_token='YOUR_APM_SECRET_TOKEN'
不要忘记替换
- YOUR_APM_ENDPOINT_WITHOUT_HTTPS_PREFIX: 你的 Elastic APM 端点(不带 https:// 前缀),使用 OTEL_EXPORTER_OTLP_ENDPOINT。
- YOUR_APM_SECRET_TOKEN: 你的 Elastic APM 密钥令牌,使用 OTEL_EXPORTER_OTLP_HEADERS。
现在执行以下命令
# switch to the kubernetes/elastic-helm directory
cd kubernetes/elastic-helm
# add the open-telemetry Helm repostiroy
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
# deploy the demo through helm install
helm install -f values.yaml my-otel-demo open-telemetry/opentelemetry-demo
一旦你的应用程序在 Kubernetes 上启动,你将在 default 命名空间中运行以下 Pod(或某些变体)。
kubectl get pods -n default
输出应类似于以下内容
NAME READY STATUS RESTARTS AGE
my-otel-demo-accountingservice-5c77754b4f-vwph6 1/1 Running 0 5d4h
my-otel-demo-adservice-6b8b7c7dc5-mb7j5 1/1 Running 0 5d4h
my-otel-demo-cartservice-76d94b7dcd-2g4lf 1/1 Running 0 5d4h
my-otel-demo-checkoutservice-988bbdb88-hmkrp 1/1 Running 0 5d4h
my-otel-demo-currencyservice-6cf4b5f9f6-vz9t2 1/1 Running 0 5d4h
my-otel-demo-emailservice-868c98fd4b-lpr7n 1/1 Running 6 (18h ago) 5d4h
my-otel-demo-featureflagservice-8446ff9c94-lzd4w 1/1 Running 0 5d4h
my-otel-demo-ffspostgres-867945d9cf-zzwd7 1/1 Running 0 5d4h
my-otel-demo-frauddetectionservice-5c97c589b9-z8fhz 1/1 Running 0 5d4h
my-otel-demo-frontend-d85ccf677-zg9fp 1/1 Running 0 5d4h
my-otel-demo-frontendproxy-6c5c4fccf6-qmldp 1/1 Running 0 5d4h
my-otel-demo-kafka-68bcc66794-dsbr6 1/1 Running 0 5d4h
my-otel-demo-loadgenerator-64c545b974-xfccq 1/1 Running 1 (36h ago) 5d4h
my-otel-demo-otelcol-fdfd9c7cf-6lr2w 1/1 Running 0 5d4h
my-otel-demo-paymentservice-7955c68859-ff7zg 1/1 Running 0 5d4h
my-otel-demo-productcatalogservice-67c879657b-wn2wj 1/1 Running 0 5d4h
my-otel-demo-quoteservice-748d754ffc-qcwm4 1/1 Running 0 5d4h
my-otel-demo-recommendationservice-df78894c7-lwm5v 1/1 Running 0 5d4h
my-otel-demo-redis-7d48567546-h4p4t 1/1 Running 0 5d4h
my-otel-demo-shippingservice-f6fc76ddd-2v7qv 1/1 Running 0 5d4h
第 3 步:打开 Kibana 并使用 APM 服务地图查看你的 OTel 检测服务
在 Elastic 可观测性 UI 的 APM 下,选择服务地图以查看你的服务。
如果你看到这些,则说明 OpenTelemetry Collector 正在向 Elastic 发送数据
恭喜你, 你已使用 OpenTelemetry 检测演示应用程序,并成功将遥测数据摄取到 Elastic 中!
第 4 步:Elastic 可以向我展示什么?
现在 OpenTelemetry 数据已摄取到 Elastic 中,你可以做什么?
首先,你可以查看 APM 服务地图(如上一步所示)——这将让你全面了解所有服务以及服务之间的事务流。
接下来,你现在可以查看各个服务和正在收集的事务。
正如你所见,前端详细信息已列出。包括从
- 平均服务延迟
- 吞吐量
- 主要事务
- 失败牵引率
- 错误
- 依赖项
让我们进入跟踪。在“事务”选项卡中,你可以查看与前端服务相关的所有类型的事务
选择 HTTP POST 事务,我们可以看到包含所有跨度的完整跟踪
你不仅可以查看跟踪,还可以分析与 HTTP POST 的高于正常延迟相关的内容。
Elastic 使用机器学习来帮助识别跟踪中各个服务的任何潜在延迟问题。只需选择“延迟相关性”选项卡并运行相关性即可。
这表明高延迟事务发生在结账服务中,具有中等相关性。
然后,你可以直接从跟踪视图深入查看日志,并查看与跟踪相关的日志,以帮助识别和查明潜在问题。
使用 Elastic 机器学习 (ML) 分析你的数据
一旦 OpenTelemetry 指标进入 Elastic,就开始通过 Elastic 的 ML 功能分析你的数据。
有关这些功能的精彩回顾,请访问此处:关联 APM 遥测以确定事务中的根本原因。 在Elastic 博客上还有更多视频和博客。我们将跟进更多关于利用 Elastic 的机器学习功能处理 OpenTelemetry 数据的博客。
结论
我希望你已经了解 Elastic 可观测性如何帮助你使用 Elastic 的 APM 功能摄取和分析 OpenTelemetry 数据。
简要回顾一下课程,更具体地说,学习了
- 如何通过几个简单的步骤,将一个流行的 OTel 检测演示应用程序 (Hipster Shop) 配置为摄取到Elastic Cloud中。
- 重点介绍一些围绕 OTel 数据的 Elastic APM 功能和特性,以及将其放入 Elastic 后可以执行的操作
准备好开始了吗?注册 Elastic Cloud,并试用我上面概述的功能和特性,以最大程度地发挥 OpenTelemetry 数据的价值和可见性。