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.mzph.cn/diannao/58096.shtml

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

相关文章

【动态规划】力扣198.打家劫舍

目录 一、题目二、思路1.递归2.递推 三、代码 一、题目 二、思路 1.递归 题目中指出不可以选相邻的房间&#xff0c;说明如果选了第 1 间&#xff0c;那么第 2 间一定不可以选&#xff0c;第 3 间房间可以选&#xff0c;也可以不选……假设是按照从第 1 间房间开始依次往后选…

Vue学习笔记(六)

模板引用(获取DOM 操作) 虽然Vue的声明性渲染模型为你抽象了大部分对DOM的直接操作&#xff0c;但在某些情况下&#xff0c;我们仍然需要直接访问底层DOM元素。要实现这一点&#xff0c;我们可以使用特殊的refattribute。 挂载结束后引用都会被暴露在this.$refs之上。 <s…

QT项目-仿QQ聊天(带宠物系统)

目录 一&#xff0c;项目介绍 二&#xff0c;开发环境 三&#xff0c;涉及技术 四&#xff0c;项目效果示例图 1&#xff0c;登录界面 2&#xff0c;主界面 3&#xff0c;聊天界面 4&#xff0c;功能界面 5&#xff0c;宠物界面 一&#xff0c;项目介绍 这是一个基于u…

Sampling采样与Virtual Columns虚拟列

1.大数据体系下&#xff0c;在真正的企业环境中&#xff0c;很容易出现很大的表&#xff0c;比如体积达到 TB 级别.对这种表一个简单的 SELECT * 都会非常的慢&#xff0c;哪怕 LIMIT 10 想要看 10 条数据&#xff0c;也会走 MapReduce 流程 这个时间等待是不合适的.Hive 提供的…

Kafka之消费者客户端

1、历史上的二个版本 与生产者客户端一样&#xff0c;在Kafka的发展过程当中&#xff0c;消费者客户端主要有两个大的版本&#xff1a; 旧消费者客户端&#xff08;Old Consumer&#xff09;&#xff1a;基于Scala语言开发的版本&#xff0c;又称为Scala消费者客户端。新消费…

蚁剑连接本地木马文件报错

项目场景&#xff1a; 本地搭建php和蚁剑环境&#xff0c;连接本地木马文件ma.php 问题描述 使用蚁剑连接localhost时报错 错误{ "address":"127.0.0.1" "code":"ECONNREFUSED", "errno":"ECONNREFUSED", &qu…

【JVM】——JVM运行机制、类加载机制、内存划分

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;JVM引入 1&#xff1a;编程语言 2&#xff1a;JAVA运行机制 二&#xff1a;JVM中内存…

1U服务器和Hyper-V虚拟机使用记录

记录最近接触服务器和虚拟机的一些使用操作知识 背景&#xff1a;1U服务器上架使用&#xff0c;备份其他服务器vm虚拟机&#xff0c;Hyper-V管理虚拟机使用测试 设备&#xff1a;IBM3550服务器交换机&#xff0c; 移动硬盘&#xff1a;附加存储盘&#xff0c; u盘1&#xff1…

go高并发之路——本地缓存

一、使用场景 试想一个场景&#xff0c;有一个配置服务系统&#xff0c;里面存储着各种各样的配置&#xff0c;比如直播间的直播信息、点赞、签到、红包、带货等等。这些配置信息有两个特点&#xff1a; 1、并发量可能会特别特别大&#xff0c;试想一下&#xff0c;一个几十万…

Anchor DETR:Transformer-Based目标检测的Query设计

写在前面 文中指出之前DETR-like算法存在以下问题&#xff1a; 之前DETR-liked检测算法里&#xff0c;object query是一组可学习的嵌入表示&#xff08;就是一组256-d的向量&#xff09;&#xff0c;缺乏明确的物理意义&#xff0c;不能解释它们会关注什么地方。每个object q…

探索现代软件开发中的持续集成与持续交付(CI/CD)实践

探索现代软件开发中的持续集成与持续交付&#xff08;CI/CD&#xff09;实践 随着软件开发的飞速进步&#xff0c;现代开发团队已经从传统的开发模式向更加自动化和灵活的开发流程转变。持续集成&#xff08;CI&#xff09; 与 持续交付&#xff08;CD&#xff09; 成为当下主…

【SSM-Day5】SpringMVC

【SSM-Day5】SpringMVC Web->Servlet->Servlet容器MVC档案SpringMVC档案SpringMVC核心操作&#x1f4e2;建立连接RequestMapping&#xff1a;实现路由映射Controller/ResponseBody&#xff1a;表示Spring某个类是否可以接收HTTP请求 &#x1f4e2;接收请求1. 直接接收一个…

【skywalking 】选择Elasticsearch存储

介绍 skywalking支持 Elasticsearch 和 OpenSearch 作为存储。 OpenSearch 是 ElasticSearch 7.11 的一个分支&#xff0c;但在 Apache 2.0 中获得许可。 OpenSearch 存储与 ElasticSearch 共享相同的配置。为了激活 OpenSearch 作为存储&#xff0c;请将存储提供程序设置为e…

【QT】Qt窗口(上)

个人主页~ Qt窗口 一、菜单栏二、工具栏三、状态栏四、浮动窗口 Qt窗口是通过QMainWindow类来实现的&#xff0c;我们之前的学习是通过QWidget类实现的 QMainWindow包含一个菜单栏Menu Bar②&#xff0c;多个工具栏Tool Bars③&#xff0c;多个浮动窗口Dock Widgets&#xff0c…

关闭windows更新方法

在windows更新里选择暂停windows更新 然后按下winr&#xff0c;输入regedit 在注册表里找到 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings\PauseUpdatesExpiryTime 修改时间即可

【数据分享】中国汽车市场年鉴(2013-2023)

数据介绍 在这十年里&#xff0c;中国自主品牌汽车迅速崛起。吉利、长城、比亚迪等品牌不断推出具有竞争力的车型&#xff0c;在国内市场乃至全球市场都占据了一席之地。同时&#xff0c;新能源汽车的发展更是如日中天。随着环保意识的提高和政策的大力支持&#xff0c;电动汽车…

第十八届联合国世界旅游组织/亚太旅游协会旅游趋势与展望大会在广西桂林开幕

10月19日&#xff0c;第十八届联合国世界旅游组织/亚太旅游协会旅游趋势与展望大会(以下简称“大会”)在广西桂林开幕&#xff0c;来自美国、英国、德国、俄罗斯、柬埔寨等25个国家约120名政府官员、专家学者和旅游业界精英齐聚一堂&#xff0c;围绕“亚洲及太平洋地区旅游业&a…

Git 创建SSH秘钥

1、命令行输入 ssh-keygen -t rsa -b 4096 2、系统提示你“Enter a file in which to save the key”&#xff0c;直接按回车键 3、再提示你输入密码的时候直接按回车键&#xff0c;创建没有密码的SSH密钥 4、密钥对创建后&#xff0c;可以在自己电脑对应的 ~/.ssh 目录下找到…

【隐私计算篇】全同态加密应用场景案例(隐私云计算中的大模型推理、生物识别等)

1.题外话 最近因为奖项答辩&#xff0c;一直在忙材料准备&#xff0c;过程非常耗费时间和精力&#xff0c;很难有时间来分享。不过这段时间虽然很忙碌&#xff0c;但这期间有很多新的收获&#xff0c;特别是通过与领域内专家的深入交流和评审过程&#xff0c;对密码学和隐私计算…

今日头条APP移动手机端留痕脚本

这两个的脚本目的是什么呢&#xff1f; 很简单&#xff0c;就是批量访问指定用户的首页&#xff0c;在他人访客记录里面留下你的账户信息&#xff0c;可以让对方访问你的头条&#xff0c;概率下会关注你的头条&#xff0c;目的嘛&#xff0c;这个自己细想&#xff01; 第1个是…