当前位置: 首页 > ai >正文

OpenTelemetry × Elastic Observability 系列(一):整体架构介绍

本文是 OpenTelemetry × Elastic Observability 系列的第一篇,将介绍 OpenTelemetry Demo 的整体架构,以及如何集成 Elastic 来采集和可视化可观测性数据。后续文章将分别针对不同编程语言,深入讲解 OpenTelemetry 的集成实践。

程序架构

OpenTelemetry Demo 是由 OpenTelemetry 社区开发的微服务演示应用程序,用于展示 OpenTelemetry (OTel) 的插桩(Instrumentation)和可观测性能力。OpenTelemetry Demo 是一个电子商务网页,由多个通过 HTTP 和 gRPC 相互通信的微服务组成。所有服务都使用 OpenTelemetry 进行插桩,并生成链路追踪(trace)、指标(metric)和日志(log)。

下表列出了应用程序中的各个微服务的介绍及其使用的编程语言:

服务编程语言描述
accounting.NET处理传入的订单并计算所有订单的总和。
adJava根据给定的上下文关键词提供文本广告。
cart.NET在 Valkey 中存储用户购物车中的商品并检索它们。
checkoutGo检索用户购物车,准备订单并协调支付、配送和电子邮件通知。
currencyC++将一种货币金额转换为另一种货币。使用从欧洲中央银行获取的实际汇率。
emailRuby向用户发送订单确认电子邮件。
fraud-detectionKotlin分析传入的订单并检测欺诈尝试。
frontendTypeScript提供 HTTP 服务器来服务网站。不需要注册/登录,自动为所有用户生成会话 ID。
load-generatorPython/Locust持续发送请求,模拟真实用户购物流程到前端。
paymentJavaScript使用给定的信用卡信息收取指定金额并返回交易 ID。
product-catalogGo从 JSON 文件提供产品列表,并能够搜索产品和获取单个产品。
quotePHP根据要运送的商品数量计算运费。
recommendationPython根据购物车中的商品推荐其他产品。
shippingRust根据购物车提供运费估算。将商品运送到指定地址。
react-native-appTypeScriptReact Native 移动应用程序,在购物服务之上提供用户界面。

启动程序

Elastic 提供了 OpenTelemetry Demo 的 Elastic Observability 版本,该版本使用了 Elastic Distributions of OpenTelemetry (EDOT) 来为应用程序进行插桩。Elastic Distributions of OpenTelemetry(EDOT) 是为 Elastic 量身打造的 OpenTelemetry 开源发行版生态,包含定制化的 OpenTelemetry Collector 和多个 OpenTelemetry 语言 SDK。

Elastic 提供的 OpenTelemetry Demo 依赖于 Elastic Cloud,该平台提供开箱即用的 APM Server、Elasticsearch 和 Kibana 等服务。为了方便用户在本地搭建和运行环境,我对该项目进行了一些修改,使其支持本地部署 APM Server、Elasticsearch、Kibana 等组件。你可以直接克隆我修改后的项目来运行:

git clone https://github.com/cr7258/hands-on-lab.git
cd observability/opentelemetry-elastic/opentelemetry-demo
# 使用 Docker Compose 启动项目
make start

网站界面

启动成功后,浏览器输入 http://localhost:8080/ 可以访问网站的前端界面。

你可以在网站上将商品加入购物车并进行结算。

负载测试

Load Generator 基于 Python 负载测试框架 Locust 编写。默认情况下,它将模拟用户请求前端的多个不同路由。浏览器输入 http://localhost:8080/loadgen/ 可以访问 Load Generator 的 Web 界面。

功能标志

Demo 应用提供了多个功能标志(Feature Flag),可用于模拟不同的场景和故障。这些标志由 flagd 管理,这是一个支持 OpenFeature 的简单功能标志服务。

运行 Demo 时,可以通过访问 http://localhost:8080/feature 的用户界面来更改这些标志的值。

Elastic Observability

通过浏览器访问 http://localhost:5601/ 可打开 Kibana 的 Web 界面。在 Observability -> APM 页面中,可以查看与 Elastic Observability 应用相关的可观测性数据。

Elastic Observability 提供全栈可观测性方案,通过支持 APM 和 OpenTelemetry,实现日志、指标和链路追踪的统一分析与可视化。它帮助团队加速故障排查、提升系统透明度,并降低运维成本。

Service Map 是 Elastic Observability 的核心功能之一,它实时地展示了应用程序中各服务之间的依赖关系和交互情况。

Service Inventory 列出了所有的服务以及每个服务的关键指标(延时、吞吐量、失败率等)。

Trace 以瀑布图的形式展示请求在各个微服务间的完整调用链,包含请求方法、耗时、状态码等关键信息,帮助用户快速定位性能瓶颈或异常问题。

如果想要查看某条 trace 关联的信息,可以点击 Investigate 按钮。

然后可以选择查看该 trace 关联的日志。

或者是该 trace 的 Service Map。

总结

本文介绍了 OpenTelemetry Demo 的整体架构,并演示了如何借助 Elastic Observability 实现链路追踪、日志与指标的统一观测。这是 OpenTelemetry × Elastic Observability 实践系列的第一篇文章,在后续的文章中,我们将深入探讨不同编程语言(如 Java、Go、Node.js 和 Python)的 OpenTelemetry 集成实践。

参考资料

  • OpenTelemetry Demo Docs:https://opentelemetry.io/docs/demo/
  • Elastic Distributions of OpenTelemetry:https://www.elastic.co/docs/reference/opentelemetry
  • OpenTelemetry Demo with the Elastic Distributions of OpenTelemetry:https://www.elastic.co/observability-labs/blog/opentelemetry-demo-with-the-elastic-distributions-of-opentelemetry
  • elastic/opentelemetry-demo:https://github.com/elastic/opentelemetry-demo
  • Use OpenTelemetry with APM:https://www.elastic.co/docs/solutions/observability/apm/use-opentelemetry-with-apm
  • Native OpenTelemetry support in Elastic Observability:https://www.elastic.co/observability-labs/blog/native-opentelemetry-support-in-elastic-observability
  • Combining Elastic Universal Profiling with Java APM Services and Traces:https://www.elastic.co/observability-labs/blog/universal-profiling-with-java-apm-services-traces
  • Revealing unknowns in your tracing data with inferred spans in OpenTelemetry:https://www.elastic.co/observability-labs/blog/tracing-data-inferred-spans-opentelemetry
  • elastic/observability-examples:https://github.com/elastic/observability-examples/tree/main/Elastiflix

欢迎关注

http://www.xdnf.cn/news/9963.html

相关文章:

  • rm删除到回收站
  • 【设计模式】策略模式
  • 【软件】在 macOS 上安装 MySQL
  • Python学习(5) ----- Python的JSON处理
  • 分布式存储技术全景解析:从架构演进到场景实践
  • 私有云大数据部署:从开发到生产(Docker、K8s、HDFS/Flink on K8s)
  • docker部署ELK,ES开启安全认证
  • 基于RK3568/RK3588/全志H3/飞腾芯片/音视频通话程序/语音对讲/视频对讲/实时性好/极低延迟
  • 深入链表剖析:从原理到 C 语言实现,涵盖单向、双向及循环链表全解析
  • vue3 项目配置多语言支持,如何从服务端拿多语言配置
  • 智能柜I立控信息I产品介绍
  • ArcGIS Pro 3.4 二次开发 - 布局
  • Spring Boot 应用中实现配置文件敏感信息加密解密方案
  • 通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎
  • 【软件】navicat 官方免费版
  • Flutter 嵌套H5 传参数
  • 生成式人工智能:重塑社会的双刃剑与人类文明的抉择
  • 技术创新如何赋能音视频直播行业?
  • IM系统的负载均衡
  • windows无法安装到这个磁盘,选中的磁盘采用gpt分区仪式
  • C++项目中使用CMake编译
  • WPF响应式UI的基础:INotifyPropertyChanged
  • OpenWebUI(1)源码学习构建
  • 公链地址生成曲线和算法
  • spring-boot redis lua脚本实现滑动窗口限流
  • 如何以 9 种方式将照片从 iPhone 传输到笔记本电脑
  • python打卡day40
  • STM32 搭配 嵌入式SD卡在智能皮电手环中的应用全景评测
  • 30V/150A MOSFET 150N03在无人机驱动动力系统中的性能边界与热设计挑战
  • 鸿蒙 HarmonyOS - SideBarContainer 组件自学指南