如何通过一条 ES|QL 查询为 Elasticsearch 中的每个指标构建指标图表

作者:来自 Elastic Katerina Patticha

METRICS_INFO 会报告你的数据中有哪些指标,以及如何聚合每个指标,因此 Kibana Discover 可以正确地为计数器、仪表和直方图绘制图表,无需任何配置,也无需查找字段名称。

在 Kibana Discover 中输入 TS metrics-*,你就会获得数据中每个指标的图表,并且已经使用正确的聚合方式和单位。无需字段名称,也无需针对每个指标进行单独设置。

METRICS_INFO 是一个 ES|QL 命令,用于报告当前查询范围内存在哪些指标和时间序列,每个指标占一行。Discover 会在后台将它附加到你的查询中,根据这一次返回的结果构建每个指标的图表,并且可以按照你的数据所提供的任意维度拆分这些图表。仪表会计算平均值,计数器使用 SUM(RATE()),直方图则使用百分位数。你永远不需要知道某个指标需要使用哪种聚合方式。

有关设计和内部实现,包括按序列返回的兄弟命令 TS_INFO,请参阅 METRICS_INFO 和 TS_INFO 深入解析。

METRICS_INFO 返回什么

METRICS_INFO 会检索你的时间序列数据流中可用指标的信息,以及适用的维度和其他元数据,所有这些信息都限定在当前 TS 查询的范围内。

复制代码
TS metrics-* | METRICS_INFO

你会得到一行,用于描述查询范围内的每个指标:

metric_name data_stream unit metric_type field_type dimension_fields
system.cpu.user.pct metrics-system.cpu-default percent gauge double [host.name, cloud.region]
activemq.broker.connections.count metrics-activemq.broker-default null counter long [activemq.broker.mbean,agent.id]

有关语法,请参阅 METRICS_INFO 命令。有关设计和内部实现,包括按序列返回的兄弟命令 TS_INFO,请参阅 METRICS_INFO 和 TS_INFO 深入解析。

Discover 如何将 TS 查询转换为指标图表

Discover 提供了专门用于探索指标数据的体验。当它检测到 TS 查询时,会自动为你的数据中可用的指标构建图表清单。

你的原始查询保持不变,并继续按照通常的方式运行。在后台,Discover 会在原始查询后追加 | METRICS_INFO,由此生成第二个请求。

例如,如果你运行:

复制代码
TS metrics-*
| WHERE `cloud.provider` == "gcp" AND `cloud.region` == "us-central1"

Discover 会在后台生成第二个请求:

复制代码
TS metrics-*
| WHERE `cloud.provider` == "gcp" AND `cloud.region` == "us-central1"
| METRICS_INFO

METRICS_INFO 的响应只会被解析一次,并成为 Discover 中专用指标体验的数据源。基于这个指标清单,Discover 可以生成图表,并提供搜索和筛选指标、按照维度拆分指标、查看每个图表背后的 ES|QL 查询,以及将指标添加到仪表板等功能。

每个 METRICS_INFO 列控制什么

Discover 使用一次 METRICS_INFO 响应来生成指标清单中的每个图表。该响应会告诉 Discover 要呈现哪些指标、在哪里找到这些指标的数据、如何聚合它们的值,以及如何显示这些值。

响应中的每一列都发挥着特定作用:

列名称 它在指标清单中控制的内容
metric_name 呈现哪些指标面板
data_stream 每个面板从哪里获取数据
metric_type 如何聚合每个指标
field_type 字段的类型,例如 double、long
unit 如何格式化值
dimension_fields 哪些维度可用于筛选和拆分图表

呈现哪些指标图表:metric_name

METRICS_INFO 响应中的每个条目代表一个 Discover 可以进行可视化的指标。

Discover 会遍历解析后的响应,并为每个指标创建一个图表面板。因此,指标清单会直接反映响应中的内容。

每个图表从哪里获取数据:data_stream

每个图表都会独立查询自己的数据,即使所有指标元数据都来自同一个 METRICS_INFO 请求。

data_stream 值决定了用于构建图表 ES|QL 查询的数据源。

例如:

复制代码
TS metrics-system.cpu-default
| STATS AVG(system.cpu.user.pct) BY TBUCKET(100)

对于跨越多个项目的搜索,分别查询每个数据流尤其重要。

当相同的 metric_name 出现在多个 data_stream 值中时,Discover 会为每个数据流创建一个单独的面板。例如,在支持跨项目搜索的无服务器环境中,每个面板都会查询自己的底层数据,并标识它所代表的数据流。

此指标存在于多个数据流中。此图表仅显示来自 metrics-system.cpu-default 的数据。

Discover 会有意将这些面板分开。将不同数据流中的结果合并可能会掩盖它们之间的差异,而这些差异在跨项目或跨环境调查指标时可能非常重要。

如何聚合计数器、仪表和直方图指标:metric_type、field_type

metric_type 告诉Lens 图表如何聚合指标,而 field_type 描述字段的类型。

目前支持三种指标类型:

metric_type 图表计算的内容 示例
gauge AVG(field),表示某个时间点的水平 CPU 使用率
counter SUM(RATE(field)),表示变化速率 每秒发送的字节数
histogram PERCENTILE(field, p),概括一个分布 p99 延迟

如何显示值:unit

unit 列控制 Y 轴上的值如何进行格式化。Lens 是每个面板背后的图表库,它负责应用格式化。

例如:

  • bytes:1,024 显示为 1 KB。

  • percent:0.75 显示为 75%。

  • 没有单位:显示原始值,不进行特定于单位的格式化。

如何按照维度筛选和拆分图表:dimension_fields

dimension_fields 列标识与每个指标关联的维度,例如 host.name、cloud.region 或 service.name。

Discover 会将 METRICS_INFO 响应中的这些值合并起来,用于填充指标清单工具栏中的维度下拉菜单。

选择一个维度会通过两种方式影响指标清单:

  1. 它会筛选指标清单。 Discover 会使用类似 WHERE MV_CONTAINS(dimension_fields, "host.name") 的条件重新运行 METRICS_INFO,移除不支持所选维度的指标。

  2. 它会拆分每个图表。 Discover 会将所选维度添加到每个图表 ES|QL 查询的 BY 子句中,为每个维度值生成一个序列。

例如:

复制代码
TS metrics-system.cpu-default
| STATS AVG(system.cpu.user.pct)
  BY TBUCKET(100), host.name

结果是一个图表,其中每个 host.name 都对应一个单独的序列,同时指标清单会确保只包含支持该维度的指标。

当你查询不同的数据流时,如果之前选择的某些维度并未由新的数据流提供,这些维度会被自动清除,因此每个图表的查询都不会引用在那里不存在的字段。

在 Kibana Discover 中试用

可视化你的指标无需任何配置、无需设置仪表板,也无需为每个指标编写查询。只需要一条 TS 查询即可。

步骤 1:摄取指标数据

如果你是从头开始,可以使用Prometheus Remote Write将 Prometheus 指标发送到 Elasticsearch。任何用于收集系统或应用程序指标的 Elastic 集成 都可以采用相同的方式。一旦数据进入由 TSDB 支持的 metrics-* 数据流,Discover 就会自动获取这些数据,无需进行任何额外设置。

步骤 2:打开 Discover 并运行 TS 查询

  1. 打开 Kibana -> Discover。

  2. 切换到 ES|QL 模式。

  3. 输入 TS metrics-* 并运行查询。

步骤 3:探索你的指标图表

Discover 会自动构建指标清单。之后,你可以:

  • 按指标名称搜索指标,以缩小指标清单范围。

  • 从工具栏中选择一个维度,按照 host.name、cloud.region 或你的数据所提供的任何维度拆分每个图表。

  • 点击图表面板,打开其背后的完整 ES|QL 查询。

  • 将单独的面板添加到仪表板。

你的指标可以立即进行探索,因此运行查询后,你就可以开始调查你的数据。

有关如何在 Kibana 中使用 Discover 探索指标数据,请参阅文档。

原文:How Kibana turns one ES|QL query into metrics charts | Elastic Observability Labs

相关推荐
XiaoMaqqqq8 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
阿部多瑞 ABU8 小时前
复杂社会关系、三层结构与自反性
大数据·人工智能·ai写作
许彰午8 小时前
01-Oracle数据库简介与版本选择
数据库·oracle
菜鸟~noob2338 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
huainingning8 小时前
RJ SW Console口忘记密码处理方法
linux·运维·服务器
布裘9 小时前
【银河麒麟】桌面系统循环登录,无法进入桌面?
linux·运维·服务器
慧都小项9 小时前
程序到了Linux才出错?用CLion把调试接到目标环境
linux·运维·服务器
鲲穹AI种草9 小时前
小红书 AI 创作工具怎么选?鲲穹 RedNote 功能实测与横向对比
大数据·人工智能
Lsetea9 小时前
OpenSSL verify报unhandled critical extension:error 34与关键扩展排查
运维·https·ssl证书·openssl·证书链
guo_wen_qiang10 小时前
docker的备份与迁移
运维·docker·容器