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

article/2025/7/21 17:22:37

本文是 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.hkcw.cn/article/HYdmiRTRpU.shtml

相关文章

Cypress API 中文详解

🌐 Cypress API 中文详解(全分类汇总) 📌 Cypress 是一款专为现代 Web 应用构建的前端测试工具,它提供了强大且直观的 API 来模拟用户操作、监听网络请求、控制浏览器行为。**本篇文章将系统梳理 Cypress 所提供的常用命令与 API,帮助你快速掌握自动化测试核心能力。 �…

宇树机器狗go2—slam建图(2)gmapping

0.前言 上一篇番外文章带大家认识了一下slam中常用的一些点云格式,本期文章会教大家如何让宇树的机器狗go2在仿真环境中使用gnaaping进行2d建图,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道。宇树机器狗go2仿真会作为一个长期项目…

CVE-2019-17558源码分析与漏洞复现

漏洞概述 漏洞名称:Apache Solr Velocity 模板注入远程命令执行漏洞 漏洞编号:CVE-2019-17558 CVSS 评分:9.8 影响版本:Apache Solr 5.0.0 - 8.3.1 修复版本:Apache Solr ≥ 8.4.0 漏洞类型:远程代码执行&…

Linux入门——入门常用基础指令(3)

文章目录 入门常用基础指令(3)grep指令压缩解压打包压缩的必要性zip/unzip指令关于rzsz的操作tar指令(重要) bc指令uname指令shutdown指令history指令几个常用的热键ctrl c和ctrl dctrl rTab按键 入门常用基础指令(3) 入门Linux的常用指令还是比较多的。本篇文章是Linux入门部…

常见压缩算法性能和压缩率对比 LZ4 LZO ZSTD SNAPPY

网传压缩算法对比表 算法压缩率压缩速度解压速度支持流式压缩适用场景LZ4低极快极快是实时数据压缩、日志压缩、内存缓存等Zstandard高快快是文件压缩、网络传输、数据库备份等Brotli很高中等快是静态资源压缩(HTML、CSS、JS)等LZO低极快快是嵌入式系统…

Tkinter软件——显示txt标签的目标水平边框图像

代码: import tkinter as tk from tkinter import filedialog from tkinter import messagebox import cv2 from PIL import Image, ImageTk import osclass ImageBoxApp:def __init__(self, master):self.master masterself.master.title("Image Box Drawer…

学习vue3阶段性复习(插槽,Pinia,生命周期)

目录 插槽(匿名插槽,具名插槽) 插槽概述 匿名插槽 具名插槽 Pinia(统一管理,共享数据) pinia概述 安装和使用Pinia 1 使用命令下载Pinia 2 再main.js中导入,注册到vue框架中 3使用pinia 持久化存储插件 1 第一步&…

创建环境 镜像报错UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel...

报错&#xff1a;Platform: win-64 Collecting package metadata (repodata.json): failed UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/main <https://mirrors.aliyun.com/anaconda/pkgs/main> The channel is not accessible or is inva…

小狼毫输入法雾凇拼音输入方案辅码由默认的部件拆字/拼音输入方案修改为五笔画方案

搜狗拼音输入法不单单是弹出广告的问题&#xff0c;还有收集输入习惯等隐私的嫌疑。所以最近彻底删除了这个输入法&#xff0c;改安装了小狼毫输入法。关于小狼毫输入法的安装和使用网上已经有了无数文章&#xff0c;我这里就不重复了。在试用多个拼音方案后&#xff0c;最终我…

车载通信网络 --- OSI模型中传输层、会话层、表示层和应用层

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

Dify理论+部署+实战

概述 一个功能强大的开源AI应用开发平台&#xff0c;融合后端即服务&#xff08;Backend as Service&#xff09;和LLMOps理念&#xff0c;使开发者能够快速搭建生产级的生成式AI应用。 核心优势 直观的用户界面&#xff1a;提供简洁明了的操作界面&#xff0c;使得用户能够…

Java类和对象详解

文章目录 1.初步认识2.类的定义与实例化2.1 类的定义2.2 类的实例化与使用 3.this关键字4.对象的构造和初始化4.1 默认初始化4.2 就地初始化4.3 构造方法初始化 5.对象的打印6.包的理解6.1 导入包中的类6.2 自定义包6.3 包访问权限 7.封装7.1 访问限定符详解 8.static关键字8.1…

【Go语言】Fyne GUI 库使用指南 (面向有经验开发者)

引言 Fyne 是一个使用 Go 语言编写的、易于使用的跨平台 GUI 工具包和应用程序 API。它旨在通过单一代码库构建在桌面和移动设备上运行的应用程序。本文档面向有一定 Go 语言开发经验的开发者&#xff0c;将详细介绍 Fyne 最新版的核心功能&#xff0c;包括基础组件、布局系统…

1. pytorch手写数字预测

1. pytorch手写数字预测 1.背景2.准备数据集2.定义模型3.dataloader和训练4.训练模型5.测试模型6.保存模型 1.背景 因为自身的研究方向是多模态目标跟踪&#xff0c;突然对其他的视觉方向产生了兴趣&#xff0c;所以心血来潮的回到最经典的视觉任务手写数字预测上来&#xff0…

武警智能兵器室系统架构设计与关键技术解析

在现代化武警部队建设中&#xff0c;武器弹药的安全管理与快速响应能力直接影响部队战斗力。本文基于某实战化智能兵器室建设案例&#xff0c;深入解析其系统架构设计、关键技术实现及创新管理机制&#xff0c;为安防领域提供可借鉴的解决方案。 整体拓扑结构 系统采用分层分布…

HTML5 列表、表格与媒体元素、页面结构分析

1. 列表 无序列表 有序列表 定义列表 列表对比 2. 表格 跨列 跨行 跨行和跨列 3. HTML5的媒体元素 视频元素 注意&#xff1a;autoplay现在很多浏览器不支持了&#xff01; 音频元素 4. 页面结构分析 5. 总结

中文文本分析及词云生成

一、代码解析&#xff08;按执行顺序&#xff09; 1. 库导入 import jieba # 中文分词工具 from wordcloud import WordCloud # 词云生成器 from collections import Counter # 词频统计 import matplotlib.pyplot as plt # 可视化 import numpy as np # 图像矩阵处理 f…

芯片手册解读

一&#xff1a; 1.这是一款差分转单端的芯片&#xff1a; 2.给出了逻辑高低的识别门限&#xff1a;并不是大于100mv和小于-100mv就识别不到了——而是大于100mv和小于-100mv都可以识别到&#xff0c;手册的意思仅仅代表门限节点而已&#xff0c;完全可以在进入门限后的其他电…

LangChain-Tool和Agent结合智谱AI大模型应用实例2

1.Tool(工具) 定义与功能 单一功能模块:Tool是完成特定任务的独立工具,每个工具专注于一项具体的操作,例如:搜索、计算、API调用等 无决策能力:工具本身不决定何时被调用,仅在被触发时执行预设操作 输入输出明确:每个工具需明确定义输入、输出参数及格式 2.Agent(…

专业级图片分割解决方案

在日常处理图片的过程中&#xff0c;我们常常会遇到需要将一张图分割成多个小图的情况。这一款高效又实用的图片分割工具——它操作简单、功能强大&#xff0c;关键是完全免费开源&#xff0c;适合所有有图像处理需求的朋友&#xff01; 在使用之前&#xff0c;先花几分钟把它…