对更快、更可扩展的服务的需求正在不断增长。我们的日常生活依赖于各种应用程序,从外卖应用程序订购喜欢的食物,到银行应用程序管理账户,甚至预约医生看诊的应用程序。这些应用程序不仅需要在功能方面不断发展,还需要在用户容量方面扩展。规模和全球覆盖范围的需求导致了这些高需求云应用程序的日益复杂。
为了跟上需求的步伐,大多数这些在线应用程序和服务(例如,移动应用程序、网页、SaaS)正在转向基于分布式微服务的架构和 Kubernetes。将应用程序迁移到云端后,如何管理和监控生产环境、扩展和服务的可用性?OpenTelemetry 正在迅速成为 Kubernetes 应用程序仪器化和收集应用程序遥测数据的实际标准。
OpenTelemetry (OTel) 是一个开源项目,提供了一套工具、API 和 SDK,可用于生成、收集和导出遥测数据(指标、日志和跟踪),以了解软件性能和行为。OpenTelemetry 最近成为 CNCF 的孵化项目,并拥有大量不断增长的社区和供应商支持。
虽然 OTel 提供了一种使用标准遥测格式对应用程序进行仪器化的标准方法,但它不提供任何后端或分析组件。因此,在应用程序、基础设施和用户体验监控中使用 OTel 库,可以灵活地选择合适的可观测性工具。应用程序性能监控 (APM) 也不再存在供应商锁定。
Elastic 可观测性原生支持 OpenTelemetry 及其 OpenTelemetry 协议 (OTLP) 来摄取跟踪、指标和日志。Elastic 可观测性的所有 APM 功能都可用于 OTel 数据。因此,以下功能(以及更多功能)可用于 OTel 数据
- 服务地图
- 服务详细信息(延迟、吞吐量、失败的事务)
- 服务之间的依赖关系
- 事务(跟踪)
- ML 关联(特别是针对延迟)
- 服务日志
除了 Elastic 的 APM 和对遥测数据的统一视图之外,您现在还能够使用 Elastic 强大的机器学习功能来减少分析和警报,从而帮助缩短 MTTR。
鉴于其开源传承,Elastic 还支持其他基于 CNCF 的项目,例如 Prometheus、Fluentd、Fluent Bit、Istio、Kubernetes (K8S) 等等。
本博客将展示
- 如何通过几个简单的步骤配置一个流行的 OTel 仪器化演示应用程序 (Hipster Shop) 以将其摄取到Elastic Cloud 中
- 重点介绍围绕 OTel 数据的一些 Elastic APM 功能和特性,以及将这些数据放入 Elastic 后可以执行的操作
在后续博客中,我们将详细介绍如何将 Elastic 的机器学习与 OTel 遥测数据结合使用,如何针对特定语言对 OTel 应用程序指标进行仪器化,以及我们如何通过 OTel 收集器支持 Prometheus 摄取等等。敬请期待!
先决条件和配置
如果您计划遵循本博客,以下是一些我们用于设置配置的组件和详细信息
- 确保您在Elastic Cloud 上拥有一个帐户和一个已部署的堆栈(请参阅此处的说明)。
- 我们使用了 OpenTelemetry 演示。有关将 Elastic 与 OpenTelemetry 演示结合使用的说明请参阅此处。
- 确保您已在本地安装了kubectl 和helm。
- 此外,我们正在使用应用程序的手动仪器化版本的 OTel。在本博客配置中未使用任何 OTel 自动仪器化。
- 我们集群的位置。虽然我们使用了 Google Kubernetes Engine (GKE),但您可以使用您选择的任何 Kubernetes 平台。
- 虽然 Elastic 可以直接从 OTel 仪器化服务摄取遥测数据,但我们将重点关注更传统的部署,该部署使用 OpenTelemetry 收集器。
- Prometheus 和 FluentD/Fluent Bit — 传统上用于提取所有 Kubernetes 数据 — 在此处未使用,而是使用了 Kubernetes 代理。后续博客将展示这一点。
这是我们将在本博客中设置的配置
全部设置
在接下来的几个步骤中,我将逐步介绍Opentelemetry 可视化
- 在 Elastic Cloud 上获取账户
- 启动 GKE 集群
- 启动应用程序
- 配置 Kubernetes OTel Collector configmap 以指向 Elastic Cloud
- 使用 Elastic Observability APM 和 OTel 数据增强可视化
步骤 0:在 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 values.yaml 文件(在 elastic/opentelemetry-demo 中指定)配置 opentelemetry-collector 以使用两个主要值指向 Elastic APM 服务器
OTEL_EXPORTER_OTLP_ENDPOINT 是 Elastic 的 APM 服务器
OTEL_EXPORTER_OTLP_HEADERS Elastic 授权
这两个值可以在您的 Elastic Cloud 中的 OpenTelemetry 设置说明(在 APM 集成说明下(集成 -> APM))中找到。
获得这些值后,第一步是在集群上使用您的 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 上启动,您将在**默认**命名空间中运行以下 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 Observability UI 的 APM 下,选择 servicemap 以查看您的服务。
如果您看到此内容,则 OpenTelemetry Collector 正在将数据发送到 Elastic
恭喜您,您已使用并成功将遥测数据摄取到 Elastic 中,从而检测了 OpenTelemetry 演示应用程序!
步骤 4:Elastic 可以向我展示什么?
现在 OpenTelemetry 数据已摄取到 Elastic 中,您可以做什么?
首先,您可以查看 APM 服务映射(如上一步所示)——这将为您提供所有服务以及服务之间事务流的完整视图。
接下来,您现在可以查看各个服务和正在收集的事务。
如您所见,列出了前端详细信息。从以下方面入手:
- 平均服务延迟
- 吞吐量
- 主要事务
- 事务失败率
- 错误
- 依赖项
让我们进入跟踪。在“事务”选项卡中,您可以查看与前端服务相关的所有事务类型
选择 HTTP POST 事务,我们可以看到包含所有跨度的完整跟踪
您不仅可以查看跟踪,还可以分析与 HTTP POST 的高于正常延迟相关的内容。
Elastic 使用机器学习来帮助识别跨服务跟踪中出现的任何潜在延迟问题。只需选择“延迟关联”选项卡并运行关联即可。
这表明高延迟事务发生在结账服务中,且关联度中等。
然后,您可以直接从跟踪视图深入钻取日志,并查看与跟踪关联的日志,以帮助识别和查明潜在问题。
使用 Elastic 机器学习 (ML) 分析您的数据
一旦 OpenTelemetry 指标进入 Elastic,就开始通过 Elastic 的 ML 功能分析您的数据。
有关这些功能的详细回顾,请参阅此处:关联 APM 遥测以确定事务中的根本原因。Elastic 的博客上还有许多其他视频和博文Elastic 的博客。我们将后续发布更多关于利用 Elastic 的机器学习功能处理 OpenTelemetry 数据的博文。
结论
希望您已经了解了 Elastic Observability 如何帮助您使用 Elastic 的 APM 功能摄取和分析 OpenTelemetry 数据。
快速回顾课程和更具体的学习内容
- 如何通过几个简单的步骤将一个流行的 OTel 检测演示应用程序(Hipster Shop)配置为摄取到Elastic Cloud中
- 重点介绍了围绕 OTel 数据的 Elastic APM 功能和特性,以及将其摄取到 Elastic 后您可以执行的操作
准备开始了吗?注册Elastic Cloud并试用我上面概述的功能和特性,以充分利用您的 OpenTelemetry 数据并获得最佳的可视化效果。