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.git

cd 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: debug
    otlp/ls:
      endpoint: ingest.lightstep.com:443
      headers: 
        "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/grafanacloud
    endpoint: ${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: strict
      services:
        - frontend-proxy
    actions:
      - key: "net.component"
        value: "proxy"
        action: insert
service:
  pipelines:
    metrics:
      exporters:
        - prometheus
        - logging
        - otlp/honeycomb
    traces:
      exporters:
        - otlp
        - logging
        - spanmetrics
        - otlp/honeycomb
      processors:
        - 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 的可能性有所了解,并了解它是如何改变可观察性格局的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开挖 Domain - 前奏

WPF App 主机配置 Microsot.Extension.Hosting 一键启动&#xff08;配置文件、依赖注入&#xff0c;日志&#xff09; // App.xaml.cs 中定义 IHost private readonly IHost _host Host.CreateDefaultBuilder().ConfigureAppConfiguration(c > {_ c.SetBasePath(Envi…

JVM(HotSpot):GC之G1垃圾回收器

文章目录 一、简介二、工作原理三、Young Collection 跨代引用四、大对象问题 一、简介 1、适用场景 同时注重吞吐量&#xff08;Throughput&#xff09;和低延迟&#xff08;Low latency&#xff09;&#xff0c;默认的暂停目标是 200 ms超大堆内存&#xff0c;会将堆划分为…

CentOS 7 上安装 MySQL 8.0 教程

&#x1f31f; 你好 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

C#使用log4net结合sqlite数据库记录日志

0 前言 为什么要把日志存到数据库里&#xff1f; 因为结构化的数据库存储的日志信息&#xff0c;可以写专门的软件读取历史日志信息&#xff0c;通过各种条件筛选&#xff0c;可操作性极大增强&#xff0c;有这方面需求的开发人员可以考虑。 为什么选择SQLite&#xff1f; …

node和npm

背景&#xff08;js&#xff09; 1、为什么js能操作DOM和BOM? 原因&#xff1a;每个浏览器都内置了DOM、BOM这样的API函数 2、浏览器中的js运行环境&#xff1f; v8引擎&#xff1a;负责解析和执行js代码 内置API&#xff1a;由运行环境提供的特殊接口&#xff0c;只能在所…

Java面向对象编程高阶(一)

Java面向对象编程高阶&#xff08;一&#xff09; 一、关键字static1、static修饰属性2、静态变量与实例变量的对比3、static修饰方法4、什么时候将属性声明为静态的&#xff1f;5、什么时候将属性声明为静态的&#xff1f;6、代码演示 一、关键字static static用来修饰的结构…

从0到1学习node.js(npm)

文章目录 一、NPM的生产环境与开发环境二、全局安装三、npm安装指定版本的包四、删除包 五、用npm发布一个包六、修改和删除npm包1、修改2、删除 一、NPM的生产环境与开发环境 类型命令补充生产依赖npm i -S uniq-S 等效于 --save -S是默认选项npm i -save uniq包的信息保存在…

首席数据官和首席数据分析官

根据分析人士的预测&#xff0c;首席数据官&#xff08;CDO&#xff09;和首席数据分析官&#xff08;CDAO&#xff09;必须更有效地展示他们对企业和AI项目的价值&#xff0c;以保障其在高管层的地位。Gartner的最新报告指出&#xff0c;CDO和CDAO在AI时代需要重新塑造自身定位…

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException 异常信息&#xff1a; Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /xxxdir is exceeded: quota10000 file count15001N…

【Python】为Pandas加速(适合Pandas中级开发者)

非常好的一篇文章&#xff0c;解决问题的方式和思路层层递进&#xff0c;透彻深刻。 Pandas是个好工具&#xff0c;好工具要用正确高效的方式使用&#xff0c;才能发挥出万钧之力。 英文水平较高可直接阅读原文。Fast, Flexible, Easy and Intuitive: How to Speed Up Your p…

linux创建自定义服务部署项目

1.进入linux单元服务文件夹 cd /etc/systemd/system/ 2.创建一个文件以.service结尾的文件 C#(.Net Core)、 Java、Python等语言&#xff0c;都可以通过linux自定义服务来部署项目&#xff0c;实现守护进程、实现开机自启 2.1例如创建my.service文件 这里以部署python项目为…

新华三H3CNE网络工程师认证—OSPF路由协议

OSPF是典型的链路状态路由协议&#xff0c;是目前业内使用非常广泛的IGP协议之一。本博客将对OSPF路由协议进行总结。 OSPF目前针对IPv4协议使用的是OSPFVersion2(RFC2328)&#xff1b; 针对IPv6协议使用OSPFVersion3(RFC2740)。如无特殊说明本章后续所指的OSPF均为OSPF Versi…

HBase2.4.17 修改znode后master初始化失败

正常运行的hbase服务&#xff0c;修改zookeeper.znode.parent后&#xff0c;重启。hbase master服务可以启动成功&#xff0c;但是仅有meta表上线&#xff0c;且hbase:meta表中元数据丢失。仅残留table:state列的值&#xff0c;其他列的值全部丢失。 有大佬知道是怎么回事嘛

(二十四)、在 k8s 中部署自己的 jar 镜像(以 springcloud web 项目为例)

文章目录 1、环境陈述2、前期准备2.1、将一个 SpringCloud 微服务运行 以 jar 方式运行2.2、为 SpringCloud 项目生成 Docker 镜像2.3、推送镜像2.4、从宿主机访问 k8s(minikube) 发布的 redis 服务2.5、k8s(minikube) 部署mysql 3、本期关键3.1、打 jar 包需要修改的地方3.2、…

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

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

禾川SV-X2E A伺服驱动器参数设置——脉冲型

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff01;人工智能学习网站 前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任…

PHPOK 4.8.338 后台任意文件上传漏洞(CVE-2018-12941)复现

PHPOK企业站(简称PHPOK&#xff09;建设系统是一套基于PHP和MySQL构建的高效企业网站建设方案之一&#xff0c;全面针对企业网&#xff08;以展示为中心&#xff09;进行合理的设计规划。 PHPOK是一套开源免费的建站系统&#xff0c;可以在遵守LGPL协议的基础上免费使用。系统具…

浅析正交投影矩阵和透视投影矩阵的推导

先上矩阵的内容。在opengl中&#xff0c;分别通过glOrtho函数和glFrustum函数得到正交投影矩阵和透视投影矩阵。 glOrtho 函数描述生成正交投影矩阵。 (左、 下、 近) 和 (右、 上、 近) 参数分别指定近剪裁平面上映射到窗口左下角和右上角的点&#xff0c;假定眼睛位于 (0、0…

Vue104 vue3 组合式API的优势 对比配置式API

笔记 1.Options API 存在的问题 使用传统OptionsAPI中&#xff0c;新增或者修改一个需求&#xff0c;就需要分别在data&#xff0c;methods&#xff0c;computed里修改 。 2.Composition API 的优势 我们可以更加优雅的组织我们的代码&#xff0c;函数。让相关功能的代码更…