如何通过一条 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

相关推荐
乐迪绘防伪油墨技术分享几秒前
水性刮刮银油墨印刷工艺解析:遮盖力与刮感的参数平衡
全文检索
weixin_177297220699 分钟前
成立三年估值80亿美元:法律AI公司Harvey给中国企业的四个启发
大数据·人工智能
ha_lydms12 分钟前
MaxCompute中窗口函数
大数据·hadoop·阿里云·云计算·dataworks·maxcompute·odps
2601_9672127216 分钟前
国际品质电源轨道系统供应商技术评估维度
大数据·网络·经验分享
锅巴编程20 分钟前
nginx-413-client-max-body-size
运维·nginx
我是小白呀34 分钟前
n8n 实战:把 AcmeFlow 的 READY 事件接到 CRM 通知
数据库·人工智能·workflow
蓝速科技40 分钟前
仓储盘点移动终端选型与蓝速科技 K10 实战方案
运维·数据库·人工智能·科技·材质
溜达的大象44 分钟前
极空间部署Traggo时间追踪工具:Docker安装、标签管理与cpolar远程访问
运维·docker·容器
TLA技术1 小时前
LogMiner vs 裸日志解析(六):想提速,只能“堆实例”,结果把源库拖垮
数据库·oracle·flink·dba·迁移学习
wjjzhbb1 小时前
Jenkins到ArgoCD——GitOps持续交付实践
运维·缓存·jenkins·argocd