OpenTelemetry 实际应用

介绍

  OpenTelemetry“动手”指南适用于想要开始使用 OpenTelemetry 的人。

如果您是 OpenTelemetry 的新手,那么我建议您从OpenTelemetry 启动和运行帖子开始,我在其中详细介绍了 OpenTelemetry。

OpenTelemetry开始改变可观察性格局,它提供了一种与供应商无关的方法来检测和收集数据。过去通常需要在机器上运行的专有代理,现在可以由 SDK/API 和 OpenTelemetry 的收集器来处理。这样,我们可以将检测与存储后端分离,这很好,因为这意味着我们不受任何工具的约束,从而避免了从商业供应商那里购买的潜在成本。

通过使用OpenTelemetry,您可以要求开发人员一次性地检测他们的代码(无需知道数据将存储在何处)。遥测数据(日志指标跟踪)将发送到您拥有的收集器,然后您可以从那里将其发送给您喜欢的任何供应商。您甚至可以使用多个供应商并进行比较,而无需要求开发人员更改任何内容。

您甚至可以使用多个供应商并进行比较,而无需要求开发人员进行任何更改。

开始使用 OpenTelemetry Demo

为了了解OpenTelemetry 的实际运行,我们将使用OpenTelemetry Astronomy Shop Demo应用程序。

在这里,我将使用Jaeger,它是一款非常流行的开源产品,用于分析和查询,但您可以使用 OpenTelemetry 收集器将遥测数据导出到多个可观察性后端,如Lightstep、Grafana、Honeycomb和New Relic,通过将它们添加到导出器文件中,这会告诉 OpenTelemetry 应该将数据发送到哪里。

我将在下面进一步展示这看起来是怎样的;我们将注册一个测试帐户并将数据发送给上述供应商。之后,我们将登录并在每个工具的 UI 中查看数据。

什么是 OpenTelemetry 演示应用程序?

该演示应用程序是 OpenTelemetry 项目提供的应用程序,可以用作展示OpenTelemetry 的实际运行

该应用程序本身模拟了一个网店,目前使用 15 种不同的服务,并采用 10 多种不同的编程语言。它使用负载生成器 ( Locust)不断向前端发送模拟真实用户购物流程的请求。

对于想要了解 OpenTelemetry 实际运行情况的每个人来说,这个应用程序都很有用。

您可以在Docker和Kubernetes上运行演示应用程序。

该应用程序的架构可以这样说明:

服务角色

设想

演示应用程序中包含的服务之一是featureflagservice这是一个CRUD 功能标志服务,我们可以使用它来演示各种场景,如故障注入以及如何从依赖功能标志的服务发出遥测。

来源

我们可以浏览http://localhost:8080/feature/上的服务的 UI ,并启用一个或多个功能标志来控制故障情况,然后使用我们选择的工具来帮助我们诊断问题并确定根本原因。

这使其成为观察 OpenTelemetry 实际运行的完美示例。

先决条件

要遵循本教程,您需要在计算机上安装 Docker。请参阅此处的安装说明。

设置演示

安装说明很好,因此请转到 GitHub repo并将其克隆到您的计算机。

git clone https://github.com/open-telemetry/opentelemetry-demo.gitcd opentelemetry-demo/docker compose up --no-build

请注意,如果您使用的是 Apple Silicon,则需要使用此命令:

docker compose build

启动演示应用程序

一旦所有图像都构建完毕并且容器启动完毕,您可以通过以下方式访问它们:

  • 网上商店:http://localhost:8080/
  • Grafana:http://localhost:8080/grafana/
  • 功能标志 UI:http://localhost:8080/feature/
  • 负载生成器 UI:http://localhost:8080/loadgen/
  • Jaeger 用户界面:http://localhost:8080/jaeger/ui/

验证您是否可以通过浏览器访问它们。

截图

网上商店

格拉法纳

功能标志 UI

在这里,我们可以启用adServcieFailure功能标志,这将使GetAds 有十分之一的时间产生错误

负载生成器 UI

Jaeger 用户界面

使用 Jaeger UI 查看和分析

启用功能标志后adServcieFailure,让我们看看如何使用Jaeger 诊断问题以确定根本原因。 请记住,该服务将在 1/10 的时间内为 GetAds 生成错误。

当您开始接触分布式跟踪领域时, Jaeger通常是您接触的第一个工具。借助 Jaeger,我们可以可视化整个事件链。有了这种可见性,当出现问题时,我们可以更轻松地隔离问题。

让我们更详细地查看 Jaeger UI 中的数据。

单击Find Traces即可查看生成的所有跟踪。

现在让我们adservice从下拉列表中检查服务,看看是否发现任何错误。

在这里您可以看到 Jaeger发现了包含错误的跟踪。

该跟踪包含父子关系中的跨度列表,表示执行顺序以及每个跨度所花费的时间。

单击跟踪,获取其中的详细信息。您将看到跟踪由跨度组成,每个跨度代表服务执行的一项操作。

从下面的屏幕截图中,我们可以看到具有跨度的轨迹的瀑布视图。

如果您单击服务中的跨度adservice,您将看到导致错误的原因:Resource_Exhausted

我们也可以使用左侧的面板。在字段中tags输入,errors=true您应该会看到以下内容。

有向无环图 (DAG) 图

您可以使用有向无环图(DAG)图来查看微服务之间的依赖关系。

RED(请求、错误、持续时间)指标

该功能在 Jaeger UI 中显示为“监控”选项卡,其目的是帮助识别有趣的跟踪(例如高 QPS、缓慢或错误的请求),而无需预先知道服务或操作名称。

它本质上是通过聚合跨度数据来生成 RED(请求、错误、持续时间)指标来实现的。

提示:USE、RED 与四大黄金信号——最有用的指标

单击Monitor选项卡并选择adservice,您应该会看到以下指标。

供应商——可观察性后端

到目前为止,我们已经使用了Jaeger,但由于每个主要供应商都支持 OpenTelemetry,因此您可以自由使用任何您想要的可观察性后端。

在这里,我将在Lightstep、Grafana Cloud、Honeycomb和New Relic注册一个测试帐户。然后,我将更新演示应用程序的 opentelemetry 配置文件以添加必要的导出器。一旦数据流动起来,我将登录到每个供应商的 UI 来查看数据。

轻步

要开始使用 Lightstep,您需要有一个帐户。在此演示中,我使用了名为Community 的免费套餐帐户。登录后,我们需要创建一个API Key以便将遥测数据发送到 Lightstep。将令牌otelcol-config.yml与以下配置一起添加到。

  exporters:logging:logLevel: debugotlp/ls:endpoint: ingest.lightstep.com:443headers: "lightstep-access-token": <lightstep_access_token>service:pipelines:traces:receivers: [otlp]processors: [batch]exporters: [logging, otlp/ls]metrics:receivers: [otlp]processors: [batch]exporters: [logging, otlp/ls]

docker compose up在文件夹中运行opentelemetry-demo

数据现在应该流入我们的 Lightstep 后端。

当你登录Lightstep时,你应该会看到类似这样的内容:

Grafana

  要开始使用 Grafana,您需要有一个帐户。Grafana 提供 Grafana Pro 计划的 14 天试用版,我将在此演示中使用该计划。在开始页,我们可以找到我们的 Grafana Stack,其中包含有关如何设置和管理不同 Grafana 产品的信息。

单击详细信息页面以查找端点。您可以使用Tempo进行跟踪、使用Loki进行日志记录和使用Prometheus进行指标记录。您需要生成Grafana API 密钥otelcol-config.yml才能将遥测数据发送到 Grafana。生成密钥后,将该密钥与以下配置一起添加到。

extensions:basicauth/grafanacloud:client_auth:username: ${GRAFANA_INSTANCE_ID}password: ${GRAFANA_CLOUD_APIKEY}exporters:otlphttp/grafanacloud:auth:authenticator: basicauth/grafanacloudendpoint: ${GRAFANA_OTLP_ENDPOINT}service:extensions: [basicauth/grafanacloud]pipelines:traces:receivers: [otlp]processors: [batch]exporters: [logging, otlphttp/grafanacloud, spanmetrics]metrics:receivers: [otlp, spanmetrics]processors: [batch]exporters: [prometheus, logging, otlphttp/grafanacloud]logs:receivers: [otlp]processors: [batch]exporters: [logging]

docker compose up在文件夹中运行opentelemetry-demo

数据现在应该流入我们的后端 Grafana。

当你登录Grafana时,你应该看到类似这样的内容:

Loki — 用于日志

Tempo — for the traces

点击蓝色按钮可以并显示跟踪信息。

Prometheus — 用于指标

Honeycomb

要开始使用 Honeycomb,您需要有一个帐户。Honeycomb 提供免费套餐,我将在本演示中使用它。登录后,我们需要创建一个Honeycomb API 密钥,以便将遥测数据发送到 Honeycomb。将令牌otelcol-config.yml与以下配置一起添加到。

exporters:otlp/honeycomb:endpoint: "api.honeycomb.io:443"headers:"x-honeycomb-team": "<HONEYCOMB_API_KEY>""x-honeycomb-dataset": "webstore-metrics"
processors:attributes:include:match_type: strictservices:- frontend-proxyactions:- key: "net.component"value: "proxy"action: insert
service:pipelines:metrics:exporters:- prometheus- logging- otlp/honeycombtraces:exporters:- otlp- logging- spanmetrics- otlp/honeycombprocessors:- attributes- batch

docker compose up在文件夹中运行opentelemetry-demo

数据现在应该流入我们 Honeycomb 的后端。

当你登录到 Honeycomb 时,你应该会看到类似这样的内容:

New Relic

要开始使用 New Relic,您需要有一个帐户。New Relic 提供免费套餐,我将在本演示中使用它。登录后,我们需要创建一个New Relic 许可证密钥,以便将遥测数据发送到 New Relic。除了密钥之外,您还需要知道要使用哪些端点,您可以在此处找到。

将令牌和端点otelcol-config.yml与以下配置一起添加到。

exporters:otlp/newrelic:endpoint: ${NEWRELIC_OTLP_ENDPOINT}headers:api-key: ${NEWRELIC_LICENSE_KEY}service:pipelines:traces:receivers: [otlp]processors: [batch]exporters: [otlp/newrelic]metrics:receivers: [otlp]processors: [batch]exporters: [otlp/newrelic]

docker compose up在文件夹中运行opentelemetry-demo

数据现在应该流入我们的 New Relic 后端。

当你登录 New Relic 时,你应该会看到类似这样的内容:

您可以在 OpenTelemetry 演示存储库中找到更多示例

结论

现在您应该对 OpenTelemetry 的可能性有所了解,并了解它是如何改变可观察性格局的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457833.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AAPL: Adding Attributes to Prompt Learning for Vision-Language Models

文章汇总 当前的问题 1.元标记未能捕获分类的关键语义特征 如下图(a)所示&#xff0c; π \pi π在类聚类方面没有显示出很大的差异&#xff0c;这表明元标记 π \pi π未能捕获分类的关键语义特征。我们进行简单的数据增强后&#xff0c;如图(b)所示&#xff0c;效果也是如…

RestHighLevelClient操作es查询文档

目录 利用RestHighLevelClient客户端操作es查询文档 查询match_all dsl语句&#xff1a; ​编辑 java代码 小结 match字段全文检索查询 dsl语句 java代码 multi_match多字段全文检索查询 dsl语句 java代码 term精确查询 dsl语句 java代码 range范围查询 dsl语句 j…

鸿蒙是必经之路

少了大嘴的发布会&#xff0c;老实讲有点让人昏昏入睡。关于技术本身的东西&#xff0c;放在后面。 我想想来加把油~ 鸿蒙发布后褒贬不一&#xff0c;其中很多人不太看好鸿蒙&#xff0c;一方面是开源性、一方面是南向北向的利益问题。 不说技术的领先点&#xff0c;我只扯扯…

破解API加密逆向接口分析,看这篇就够了

破解API加密逆向接口分析&#xff0c;看这篇就够了 每日一练&#xff1a;API接口数据逆向&#xff0c;看完这篇&#xff0c;就能学会找到逆向的入口函数、调试js代码、分析js代码、还原加解密算法&#xff01;为了能及时获取后续的爬虫及逆向的技术分享文章&#xff0c;请先关注…

qt EventFilter用途详解

一、概述 EventFilter是QObject类的一个事件过滤器&#xff0c;当使用installEventFilter方法为某个对象安装事件过滤器时&#xff0c;该对象的eventFilter函数就会被调用。通过重写eventFilter方法&#xff0c;开发者可以在事件处理过程中进行拦截和处理&#xff0c;实现对事…

代码随想录算法训练营第46期

class Solution { public: // 决定dp[i]的因素就是第i房间偷还是不偷。 // 偷第i房间&#xff0c;那么dp[i] dp[i - 2] nums[i] 即&#xff1a;第i-1房一定是不考虑的&#xff0c;找出 下标i-2&#xff08;包括i-2&#xff09;以内的房屋&#xff0c;最多可以偷窃的金额为dp[…

Unity插件-Intense TPS 讲解

目录 关于TPS 打开场景&#xff1a;WeaponTest.unity&#xff0c; 只要把这些枪点&#xff0c;打开&#xff08;默认隐藏&#xff0c;不知道为何), 一开始不能运行如何修复 总结 关于TPS 个人不是TPS&#xff0c;FPS的射击游戏爱好者&#xff0c; 不过感觉这个枪感&…

riscv uboot 启动流程分析 - SPL启动流程

分析uboot 启动流程硬件&#xff1a;启明智显推出M4核心板 &#xff08;https://gitee.com/qiming-zhixian/m4-openwrt&#xff09; 1.U-boot和SPL概述 U-Boot 分为 uboot-spl 和 uboot 两个组成部分。SPL 是 Secondary Program Loader 的简称&#xff0c;第二阶段程序加载器。…

springboot083基于springboot的个人理财系统--论文pf(论文+源码)_kaic

基于springboot的个人理财系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了个人理财系统的开发全过程。通过分析个人理财系统管理的不足&#xff0c;创建了一个计算机管理个人理财系统的方案。文章介绍了个…

JavaEE初阶---多线程(三)---内存可见性/单例模式/wait,notify的使用解决线程饿死问题

文章目录 1.volatile关键字1.1保证内存的可见性--引入1.2保证内存的可见性--分析1.3保证内存的可见性--解决1.4内存可见性-JMM内存模型 2.notify和wait介绍2.1作用一&#xff1a;控制调度顺序2.2作用二&#xff1a;避免线程饿死2.3notify和notifyAll区分 3.单例模式--经典设计模…

GoogleChrome的安装和使用

Google Chrome 文章目录 Google Chrome安装主页设置扩展程序 安装 chrome官网 正规的下载好之后logo是这样的 主页设置 说明 正常情况下, GoogleChrome是无法正常访问的, 因为chrome的搜索引擎默认使用的是谷歌搜索, 而在国内是无法正常访问谷歌搜索的, 所以需要更改一下主页…

【C语言】预处理(预编译)详解(上)(C语言最终篇)

文章目录 一、预定义符号二、#define定义常量三.、#define定义宏四、带有副作用的宏参数五、宏替换的规则六、宏和函数的对比1.宏的优势2.函数的优势3.宏和函数的命名约定 一、预定义符号 学习本篇文章的内容推荐先去看前面的编译和链接&#xff0c;才能更好地理解和吸收&#…

基于springboot+vue的高校就业管理系统,

基于springbootvue的高校就业管理系统, 分为管理员&#xff1a;测试账号:10086/123 学生&#xff1a;测试账号:10087/123 包含个人信息、查看企业岗位信息、简历信息管理、我的应聘企业&#xff1a;测试账号:10070/123 包含企业信息、岗位企业信息管理、查看学生简历信息…

颠覆级AI:10秒生成超清视频

颠覆级AI&#xff1a;10秒生成超清视频 Pyramid-Flow 是一款开源 AI 视频生成神器&#x1f4bb;&#xff0c;只需文字或图片即可极速生成高清视频&#x1f3a5;&#xff01;高效、高清、资源需求低&#xff0c;适合创作广告、教学视频等多种用途&#x1f680;&#xff0c;快来…

VIVO售后真好:屏幕绿线,4年免费换屏

只要亮屏就有。这也太影响使用了。 本来想换趁机换手机&#xff0c;看了VIVO发布的X200&#xff0c;决定等明年的X200 ULTRA。手头这个就准备修。 查了一下价格&#xff0c;换屏1600&#xff0c;优惠1100。咸鱼上X70 PRO也就800。能不能简单维修就解决呢&#xff1f;于是联系…

4款免费恢复工具,一键拯救你的重要资料

不管是学习的资料、工作的文件&#xff0c;还是重要的照片和视频&#xff0c;要是丢了或者不小心删了&#xff0c;我们肯定急得像热锅上的蚂蚁。不过好在科技发达了&#xff0c;出现了一些能找回数据的神奇工具。今天&#xff0c;我就带你去看看四款免费数据恢复的工具&#xf…

【无人机设计与控制】改进人工势场法,引入模糊控制实现无人机路径规划和避障

摘要 本文提出了一种基于改进人工势场法并结合模糊控制的无人机路径规划和避障方法。传统的人工势场法在处理障碍物时易出现局部极小值问题&#xff0c;且对动态障碍物的应对能力有限。为了解决这些问题&#xff0c;我们引入了模糊控制来调整势场参数&#xff0c;从而使无人机…

Mybatis中的参数占位符:${...} 、#{...}的区别

Mybatis中的参数占位符&#xff1a;${...} 、#{...}的区别 在Mybatis中提供的参数占位符有两种&#xff1a;${…} 、#{…} #{…} 执行SQL时&#xff0c;会将#{…}替换为?&#xff0c;生成预编译SQL&#xff0c;会自动设置参数值使用时机&#xff1a;参数传递&#xff0c;都使…

Java面试题——微服务篇

1.微服务的拆分原则/怎么样才算一个有效拆分 单一职责原则&#xff1a;每个微服务应该具有单一的责任。这意味着每个服务只关注于完成一项功能&#xff0c;并且该功能应该是独立且完整的。最小化通信&#xff1a;尽量减少服务之间的通信&#xff0c;服务间通信越少&#xff0c…

C++11实践指北

C11&#xff1a;书、在线工具、库。 书 1. 《现代C语言核心特性解析》 覆盖 C11~C20 特性的讲解。 视频跟读&#xff1a;https://www.bilibili.com/video/BV1nN4y1j7fv 现代CPP随笔_0CCh - 每天5分钟了解现代C新特性 2. 《C Primer》第五版 基于 C11 的 C 入门书。 正在看…