OpenTelemetry 实际应用

介绍

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

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

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

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

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

开始使用 OpenTelemetry Demo

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

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

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

什么是 OpenTelemetry 演示应用程序?

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

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

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

您可以在DockerKubernetes上运行演示应用程序。

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

服务角色

设想

演示应用程序中包含的服务之一是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

启动演示应用程序

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

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

截图

网上商店

格拉法纳

功能标志 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,因此您可以自由使用任何您想要的可观察性后端。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huainian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值