在 Elastic 中使用 OpenTelemetry 内容包可视化 OpenTelemetry 数据

0 阅读8分钟

作者:来自 Elastic Ishleen Kaur

了解并探索 Elastic 中的 OpenTelemetry 内容包如何为你的遥测数据提供即时仪表板、告警和 SLO。

如果你在过去几年一直关注可观测性领域,你会看到 OpenTelemetry 已经从 “有前景的标准” 变成了收集指标、日志和追踪数据的默认选择。Elastic 很早就参与了这一过程 —— 这也是我们构建 Elastic Distributions of OpenTelemetry( EDOT )的原因:一个经过加固、可用于生产环境的 OTel 组件套件,包括 EDOT Collector 和各语言 SDK,专为基础设施与应用监控进行优化,避免了传统部署中的复杂配置负担。

EDOT 现已正式可用( GA )。Collector、SDK 以及整个技术栈——均已生产就绪,企业级支持,没有任何附加条件。

但问题在于:将数据接入 Elastic 只是完成了一半工作。实际更困难的另一半,是接入之后的事情。仍然需要有人构建仪表板、编写告警规则,并确定哪些 SLO 值值得追踪——在这些变得有用之前。

OpenTelemetry 内容包正是为了解决这一鸿沟而设计的。

什么是 OpenTelemetry 内容包?

Elastic 传统的基于 Beats 的集成通常会将数据采集和可视化打包在一起 —— 当你启用某个功能时,就会立即获得精心设计的仪表板和告警。随着 Elastic 向 OpenTelemetry 优先的架构演进,这一理念被延续下来,但模型变得更加清晰。

OpenTelemetry 内容包专注于某一特定服务的可观测性资产。不再包含任何数据采集配置,因为在 OTel 体系中,这部分由 Collector 负责。每个包包含:

  • 仪表板 —— 为所监控服务定制的预构建 Kibana 可视化
  • 告警规则 —— 预先配置好的告警规则,在关键阈值触发时提醒团队,从而减少平均检测时间( MTTD )和平均修复时间( MTTR )
  • SLO 模板 —— 可直接使用的服务级别目标定义,用于跟踪可靠性目标、错误预算和消耗速率

随着内容包模型的持续演进,未来的版本还将支持更多类型的资产。

如何工作?

核心理念很简单:一旦数据进入 Elastic,对应的仪表板、告警规则和 SLO 模板就会立即可用。内容包会根据传入的数据自动激活,而不依赖这些数据是如何被采集的。

这个系统最强大的特性之一是自动安装。当 Elastic 检测到某个特定服务的数据开始进入 Elasticsearch 时,相应的内容包会自动安装 —— 无需任何手动步骤,也无需在集成目录中查找。当你打开 Kibana 时,你的仪表板已经在那里等你,告警规则也已准备好启用,SLO 模板也已预先加载。

为了让数据真正流动起来,我们需要配置 Collector —— 一个 YAML 文件,用于定义遥测管道的构建模块:

  • Receivers —— 定义要采集什么数据以及从哪里采集。每个服务都有自己的 receiver(例如 MySQL receiver 会直接从数据库抓取指标)。
  • Exporters —— 定义采集到的数据发送到哪里。在这里,我们使用 Elasticsearch exporter,将遥测数据以 OpenTelemetry 原生格式直接发送到 Elasticsearch。
  • Pipelines —— 将 receivers 和 exporters 连接起来,定义数据在 Collector 中的流动路径。

完成这些配置并启动 Collector 后,数据就会开始流入 Elasticsearch —— 然后由内容包接管后续工作。

数据来源

OpenTelemetry 数据可以通过以下方式进入 Elastic:

  • EDOT Collector —— Elastic 分发版 OpenTelemetry Collector,可嵌入 Elastic Agent 或与其配合使用
  • 上游 OTel Collector —— 标准的社区版 OpenTelemetry Collector( Contrib 或自定义构建版本)
  • EDOT Cloud Forwarder( ECF )—— 一种无服务器 OpenTelemetry Collector,可从 AWS、GCP 和 Azure 收集遥测数据(如 VPC Flow Logs、CloudTrail、CloudWatch 等),并直接转发到 Elastic Observability,无需管理基础设施

内容包不关心数据如何到达 —— 只关心数据是否已经存在。

实践示例:MySQL 监控

假设有一个团队在运行 MySQL,他们希望跟踪查询吞吐量、连接数、缓冲池利用率以及慢查询速率——并在小问题演变成凌晨 2 点事故之前收到告警。传统做法意味着需要花费大量时间构建仪表板、编写自定义告警查询,并且很大程度依赖经验去判断哪些指标真正重要。

使用 MySQL OpenTelemetry 资产包,这些工作已经提前完成。下面来看整体是如何组合在一起的。

步骤 1:获取数据

数据管道由一个 Collector 配置驱动,该配置定义了 receivers(从哪里抓取数据)、processors(如何增强或转换数据)以及 exporters(将数据发送到哪里 —— 在这里是 Elasticsearch)。

无论你使用 EDOT Collector 还是 Upstream OTel Collector,基础配置结构都是一致的。下面的配置为主实例和副本实例分别使用了不同的 receiver,因为复制指标仅在副本上可用。请将其中的占位符替换为你的实际端点、凭据以及 Elasticsearch 配置信息。

`

1.  receivers:
2.    mysql/primary:
3.      endpoint: <MYSQL_PRIMARY_ENDPOINT>
4.      username: <MYSQL_USER>
5.      password: <MYSQL_PASSWORD>
6.      collection_interval: 10s
7.      statement_events:
8.        digest_text_limit: 120
9.        limit: 250
10.      query_sample_collection:
11.        max_rows_per_query: 100
12.      events:
13.        db.server.query_sample:
14.          enabled: true
15.        db.server.top_query:
16.          enabled: true
17.      metrics:
18.        mysql.client.network.io:
19.          enabled: true
20.        mysql.connection.errors:
21.          enabled: true
22.        mysql.max_used_connections:
23.          enabled: true
24.        mysql.query.client.count:
25.          enabled: true
26.        mysql.query.count:
27.          enabled: true
28.        mysql.query.slow.count:
29.          enabled: true
30.        mysql.table.rows:
31.          enabled: true
32.        mysql.table.size:
33.          enabled: true

35.  processors:
36.    resourcedetection:
37.      detectors: [system, env]

39.  exporters:
40.    elasticsearch/otel:
41.      endpoint: <ES_ENDPOINT>
42.      api_key: <ES_API_KEY>
43.      mapping:
44.        mode: otel

46.  service:
47.    pipelines:
48.      metrics:
49.        receivers: [mysql/primary, mysql/replica]
50.        processors: [resourcedetection]
51.        exporters: [elasticsearch/otel]

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)收起代码块![](https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-top-White.png)

MySQL receiver 会按照配置的时间间隔从数据库中抓取指标和事件,并将其作为 OpenTelemetry metrics 输出。这些数据会流经 pipeline 并进入 Elasticsearch,随后即可用于可视化。

步骤 2:打开 Kibana —— 一切已就绪

仪表板

一旦 MySQL 的指标和事件进入 Elasticsearch,MySQL OpenTelemetry 资产包就会在后台自动安装。当你进入 Kibana 时,仪表板已经被填充好并等待使用。

用户可以立即获得以下可观测性视图:

  • 活跃连接数与最大连接数
  • 查询吞吐量——每秒执行的语句数
  • InnoDB 缓冲池命中率与内存使用情况
  • 慢查询数量与趋势
  • 表锁等待与资源争用情况
  • 随时间变化的发送与接收字节数
  • 复制延迟(用于主从架构)

无需手动字段映射,无需从零构建仪表板。只需数据进入,即可获得洞察。

下面是 Kibana 中 MySQL OpenTelemetry 仪表板的截图,展示了当数据开始流动时即可自动使用的开箱即用可视化内容。

概览仪表板

查询仪表板

可用性仪表板

告警规则,已准备启用

该内容包包含六条预构建告警规则 —— 涵盖高连接错误率、慢查询激增、线程饱和、复制延迟、缓冲池脏页比例(buffer pool dirty page ratio)以及行锁竞争 —— 每一条都带有推荐阈值和严重级别。这些规则在安装后即可使用,并且可以在 Kibana 中直接启用、调整和扩展,无需编写任何自定义查询。下面是其中一条告警的示例。

SLO 模板,已预加载

开箱即用包含四个 SLO 模板,用于跟踪复制延迟、连接耗尽错误、慢查询速率以及已连接线程数——每个模板都预先配置了目标值和 30 天滚动窗口。团队可以直接采用这些模板,也可以调整阈值以匹配自身的可靠性需求。

当前可用内容

MySQL OpenTelemetry 资产包只是 Elastic 已构建的不断增长的 OpenTelemetry 内容包库中的一个示例。内容包已覆盖多种服务——同时我们也开始将其扩展到云端,初步支持云服务提供商集成,通过 EDOT Cloud Forwarder( ECF )将 AWS、GCP 和 Azure 的遥测数据引入 Elastic,并提供现成的仪表板。

这一模式在所有内容包中都是一致的——数据进入后,一个完整的可观测性套件(仪表板、告警规则、SLO 模板)会立即可用——无论你是在监控自建数据库,还是来自你首选云服务提供商的云原生服务。

未来的发展方向

值得关注的下一步是 OTel 集成包,它将允许你直接从 Kibana UI 推送 Collector 配置——让整个设置体验变为点选式操作,从数据采集到可视化全流程完成,无需编辑 YAML。

开始使用

准备好尝试了吗?从 EDOT Collector 文档开始,并在 Kibana 的 Integrations 页面中探索不断扩展的 OpenTelemetry 内容包库。

原文:www.elastic.co/observabili…