弹性平台通过OpenTelemetry实现的独立性

越来越多人追求更快、更具规模可扩展性的服务。我们的日常生活非常依赖于各种应用程序,比如送货上门的外卖应用、管理账户的银行应用,甚至预约医生的应用等。这些应用程序不仅需在功能方面不断发展,还需要满足用户容量的增长。由于云应用需求的高涨,基于其规模和全球化展开的要求,这些应用程序变得越来越复杂。
为了应对需求,大多数这些在线应用和服务(例如移动应用、网页、SaaS)正在迁移到基于分布式微服务的架构和Kubernetes。将应用程序迁移到云端后,我们应该如何管理和监视服务的生产力、规模和可用性?OpenTelemetry正迅速成为Kubernetes应用程序仪器化和应用程序遥测数据收集的事实标准。
OpenTelemetry(OTel)是一个开源项目,提供一套工具、API和软件开发工具包(SDK),用于生成、收集和导出用于理解软件性能和操作的遥测数据(指标、日志、跟踪)。最近,OpenTelemetry成为了CNCF的孵化项目,获得了社区和供应商的大量支持。


基于开源传统,Elastic还支持Prometheus、Fluentd、FluentBit、Istio、Kubernetes(K8S)等其他CNCF基础项目。本博客将以简单的几步介绍如何将流行的OTel示例应用(HipsterShop)集成到Elastic Cloud中。我们将说明Elastic APM关于OTel数据的功能和特点,以及从Elastic中获取的数据可以做什么。在未来的博客中,我们将详细介绍如何使用OTel的遥测数据进行Elastic的机器学习,如何为特定语言的OTel应用程序指标进行仪表化,以及如何使用OTel收集器支持Prometheus摄取等。敬请期待。
前提条件和组成
计划浏览该博客的读者,我们将介绍使用的构成要素和设置的详细信息。
• 请确保您拥有Elastic Cloud帐户和已部署的堆栈(请参考此步骤)。
• 我们使用了热门的HipsterShop演示应用程序。它最初是由Google编写的,旨在介绍多种可用的Kubernetes变体,就像OpenTelemetry演示应用程序一样。要使用此应用程序,请前往此处并按照说明进行部署。
• 此外,我们使用了应用程序的OTel手动仪器化版本。在本博客的配置中,我们没有使用OTel的自动仪器化。
• 我们使用了Google Kubernetes Engine(GKE)作为我们的集群位置,但您可以使用您喜欢的Kubernetes平台。
• Elastic可以直接从OTel测量的服务中获取遥测数据,但在这里我们将重点放在使用OpenTelemetry Collector的更传统部署上。
• Prometheus和FluentD/FluentBit通常用于提取所有Kubernetes数据,但在这里没有用于Kubernetes Agent。我们将在后续的博客中介绍。

配置以获取在这个博客中使用的OpenTelemetry数据。
所有的设置( de )
接下来,我将逐步解释:
• 获取Elastic Cloud帐户
• 启动GKE集群
• 启动应用程序
• 将Kubernetes OTel收集器的配置映射设置为指向Elastic Cloud
• 通过同时使用Elastic Observability APM和OTel数据来提高可见性。
步骤 0: 在Elastic Cloud 上创建一个账户。

步骤1:启动K8S集群
这次我们使用了 Google Kubernetes Engine(GKE),但您可以使用任何您喜欢的 Kubernetes 平台。为了从 Kubernetes 集群中收集 OpenTelemetry 数据,Elastic 没有特殊的要求。只要是符合 Kubernetes 标准的集群(自部署或托管),如 GKE、EKS、AKS 或其他常规 Kubernetes 集群,都可以正常工作。
步骤2: 将HipsterShop应用程序加载到集群中
在您選擇的雲端服務或本地 Kubernetes 平台上,將應用程式部署到 Kubernetes 叢集上。我所使用的應用程式已在此處公開。
當應用程式在 Kubernetes 上啟動時,將會在預設的命名空間中執行以下 Pod(或其變體)。
kubectl get pods -n default
应该产生以下输出。
NAME READY STATUS RESTARTS AGE
adservice-f9bf94d56-5kt89 1/1 Running 0 41h
cartservice-54d5955c59-7lrk9 1/1 Running 0 41h
checkoutservice-57b95c78bb-qqcqv 1/1 Running 0 41h
currencyservice-6869479db8-7tsnj 1/1 Running 0 43h
emailservice-7c95b8766b-mp5vn 1/1 Running 0 41h
frontend-5f54bcb7cf-kxwmf 1/1 Running 0 41h
loadgenerator-bfb5944b6-2qhnw 1/1 Running 0 43h
paymentservice-5bc8f549c8-hkxks 1/1 Running 0 40h
productcatalogservice-665f6879d6-kv29f 1/1 Running 0 43h
recommendationservice-89bf4bfc5-ztcrr 1/1 Running 0 41h
redis-cart-5b569cd47-6wt59 1/1 Running 0 43h
shippingservice-768b94fb8d-8hf9c 1/1 Running 0 41h
在这个版本中,我们只启动了所有的服务和loadgenerator。您可能注意到OpenTelemetry Collector尚未启动。(请参考下一步)。
当我们查看每个服务的yamls时,我们可以看到它们都指向4317端口的OpenTelemetry Collector。
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://otelcollector:4317"
端口4317是OpenTelemetry监听来自服务的遥测数据的默认端口。因此,所有服务都应该指向OTel收集器。
第三步: 启动指定 OpenTelemetry Collector 的 Elastic。
按照 hotelcollector.yaml 文件中的 /deeploy-with-collector-k8s 部分,在 configmap 部分需要设置两个特定的变量。
exporters:
otlphttp/elastic:
endpoint: OTEL_EXPORTER_OTLP_ENDPOINT
headers:
Authorization: OTEL_EXPORTER_OTLP_HEADERS
在Elastic的可观察性UI中,在APM下方添加+数据,将显示下一个屏幕。
移动到OpenTelemetry下。
OTEL_EXPORTER_OTLP_ENDPOINT是Elastic的APM服务器。
OTEL_EXPORTER_OTLP_ENDPOINT提供给客户授权。
有关变量的详细信息,请参阅Elastic文档中有关OTel收集器设置的内容。

变量OTEL_EXPORTER_OTLP_ENDPOINT(您的Elastic APM服务器的端点)和OTEL_EXPORTER_OTLP_HEADERS将显示用于身份认证的值。
如果要在Elastic APM服务器端点上配置OTel Collector,则有两个选项可用:gRPC和http。
在这个otelcollector.yaml中,导出器被设置为http。
如果您想通过gRPC端口将数据发送到APM服务器,则需要相应地修改导出器。
exporters:
otlp/elastic:
endpoint: OTEL_EXPORTER_OTLP_ENDPOINT
headers:
Authorization: OTEL_EXPORTER_OTLP_HEADERS
请注意从 otlphttp 切换到 otlp 的变更。一旦完成以上所需的更改,就可以创建 otelcollector。
kubectl create -f otelcollector.yaml
我們會確認正常運作。
mycomputer% kubectl get pods | grep otelcollector
otelcollector-5b87f4f484-4wbwn 1/1 Running 0 18d
步骤4:打开 Kibana,并使用APM服务地图来展示OTel仪器化的服务。

如果看到这个显示,那么就意味着 OpenTelemetry Collector 正在将数据发送到 Elastic。
恭喜!成功地为 HipsterShop 演示应用程序使用 OpenTelemetry 进行仪表化,并成功地将遥测数据导入到 Elastic 中!现在,您可以对 HipsterShop 演示应用程序进行追踪了。
配置一个特定的环境的方法
在Elastic APM中,可以导入多个应用程序,并根据环境进行过滤。因此,如果开发团队1和开发团队2都在使用UI,则需要正确设置环境变量。
该应用程序的环境变量设置是通过服务的yamls中的deployment.environment变量完成的。
如果要更改此设置,则需要修改此博客中应用程序的git中每个服务yaml的OTEL_RESOURCE_ATTRIBUTES。
下面是内容:
- name: OTEL_RESOURCE_ATTRIBUTES
Value: "service.name=recommendationservice,service.version=
1.0.0,deployment.environment=MY-DEMO"
以以下方式进行更改:
- name: OTEL_RESOURCE_ATTRIBUTES
Value: "service.name=recommendationservice,service.version=
1.0.0,deployment.environment=XXX"
要在所有服务中执行此操作,请按照以下步骤进行操作:
sed -i `s/MY-DEMO/XXX/g` *.yaml
第五步:弹性会展示给你什么?


这个交易的平均等待时间、吞吐量、所有障碍,当然还有追踪信息!

使用Elastic的机器学习(ML)来分析数据。
当您将 OpenTelemetry 的指标导入到 Elastic 中时,可以使用 Elastic 的 ML 功能开始进行数据分析。
您可以在此处查看与这些功能相关的精彩评论:将 APM 遥测与事务的根本原因相关联,以确定根本原因。
此外,Elastic 的博客中还有许多其他视频和博客文章。
我们将继续添加关于如何将 Elastic 的机器学习功能应用于 OpenTelemetry 数据的博客文章。
总结
我相信您已经理解了 Elastic Observability 是如何利用 Elastic 的 APM 功能来捕获和分析 OpenTelemetry 数据的。
下面是简要总结和更具体的学习内容:
– 我们将通过几个简单的步骤来讲解如何将受欢迎的 OTel 示例应用程序(HipsterShop)集成到 Elastic Cloud 中。
– 我们介绍了 Elastic APM 关于 OTel 数据的功能和特点,以及如何利用 Elastic 中捕获的数据进行分析。
现在,让我们开始吧!请注册 Elastic Cloud,并尝试使用上述功能,尽可能地发挥 OpenTelemetry 数据的价值和可视化效果。
弹性技术产品营销经理/推广专员