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