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

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 的可能性有所了解,并了解它是如何改变可观察性格局的。


http://www.kler.cn/news/368295.html

相关文章:

  • SpringBoot核心框架之AOP详解
  • ML 系列:机器学习和深度学习的深层次总结(17)从样本空间到概率规则概率
  • 清华面试文稿
  • vue通过JSON文件生成WPML文件源码
  • 【C++单调栈 贡献法】907. 子数组的最小值之和|1975
  • 配置smaba (Linux与windows通信)
  • C++ (10) 软件工程实践:塑造魔法世界的工匠
  • YOlO系列——yolo v3
  • 构建高效租房平台:Spring Boot租房管理系统详解
  • esp32学习:语音识别教程esp-skainet库的使用
  • 【AIGC】2024-ECCV-ControlNet++:通过有效的一致性反馈改进条件控制
  • LINUX基于多IP访问多网站练习
  • 计算机的错误计算(一百三十六)
  • light-task-scheduler的dockerfile打包配置
  • B+树(B树的改进)
  • (九)Proteus仿真STM32单片机硬件I2C和模拟I2C读写PCF8563时钟
  • 【路径跟踪控制:Pure Pursuit控制与车辆运动学模型】
  • Web应用框架-Django应用基础(3)-Jinja2
  • HTML 基础:构建网页结构的基石
  • Java中的反射(3)——反射的应用场景
  • 微信小程序的日期区间选择组件的封装和使用
  • 重学SpringBoot3-Spring WebFlux之SSE服务器发送事件
  • 【jellyfin】解决Edge 浏览器播放 jellyfin 的 hevc/h265 视频“该客户端与媒体不兼容,服务器未发送兼容的媒体格式”错误
  • Vue.js 把字典类型的数据转化为键值对数据,符合echart格式,key-value键值对
  • 微信小程序瀑布流实现,瀑布流长度不均等解决方法
  • 【AI辅助】AWS Toolkit+AmazonQ