作者:来自 Elastic Miguel Sánchez,Vinay Chandrasekhar 及 Felix Barnsteiner

随着 PromQL 现在在 Kibana 中得到原生支持,你可以在 Discover 中编写并执行 PromQL,用于分析指标,也可以在 Dashboards 可视化、告警规则以及任何支持 ES|QL 的地方使用。PromQL 目前以技术预览(Tech Preview)形式提供,适用于常见的指标分析场景。
自 2012 年与 Prometheus 一起最初开发以来,PromQL 在过去十多年中一直是时序监控的基石。虽然 Kibana 已经通过 ES|QL TS 命令全面支持时序分析,但我们很高兴为常见的指标分析用例引入原生 PromQL 支持。对于已经熟悉 PromQL 的团队来说,这一支持意味着几乎零学习成本,并能显著降低直接接入 Elastic 生态的上手难度。
在 Kibana 中运行 PromQL 查询
在 Kibana 的 ES|QL 编辑器中,输入 PROMQL 命令,并在该代码块中编写你的 PromQL。PROMQL 会标记该片段,使 Elasticsearch 在 Kibana 发送的完整 ES|QL 请求中将其解析为 PromQL。

你可以查询的内容
以下是一些入门模式。
原始指标
go
`PROMQL container.cpu.usage` AI写代码
所有容器的平均值
scss
`PROMQL avg(container.cpu.usage)` AI写代码
对 counter 使用 rate()
scss
`PROMQL rate(docker.network.inbound.bytes)` AI写代码
聚合速率(Aggregated rate)
python
`PROMQL sum(rate(docker.network.inbound.bytes))` AI写代码
按 label 分组(Group by a label)
python
`PROMQL sum by (agent.id) (rate(docker.network.inbound.bytes))` AI写代码
你可能会注意到,上述示例中没有在每个 rate() 中包含 start、end、step 或 lookback window。这些参数都是可选的:时间选择器和 Kibana 的默认设置会帮你处理大部分情况。
你也可以选择在 index= 参数中包含数据流名称。例如:PROMQL index=metrics-docker.cpu-default container.cpu.usage。添加该参数可以帮助缩小查询扫描的数据范围。
当前 PromQL 技术预览版本在覆盖率上已超过 80%,该指标基于对主流 Grafana dashboards 的基准测试。更高级的修饰符和特定函数正在考虑在未来版本中支持。
查找你的数据流和指标名称
如果你已有 PromQL 查询,可以直接在 PROMQL 命令中使用,无需修改。如果你是从头编写查询并需要查找准确的字段名称,可以在 Discover 中运行 TS metrics-* 来查看所有 metrics 数据流。每个 metric 会以小图表形式展示,方便你快速识别哪些是活跃的。将鼠标悬停在某个 metric 上,并点击 "View details" 操作,即可查看字段名称以及它所属的数据流。
更深入的讲解可以参考 Kibana 中使用 Discover 探索指标数据(在 Kibana 中使用 Discover 探索指标数据)。
时间选择器与查询时间处理
Kibana 中的时间选择器会设置查询的时间范围。Dashboard 面板和告警规则的处理方式相同,它们各自使用自己的时间范围,因此你不需要在查询中写 start= 或 end=。
step 是图表中两个连续数据点之间的间隔。step 越小,在相同时间跨度内数据点越多。如果不设置 step= 或 buckets=,默认值为 buckets=100。你可以将 step= 设置为固定宽度,例如 1m,或者使用 buckets= 来指定期望的最大数据点数量。
Discover 和 Dashboards
在 Discover 中,切换到 ES|QL 模式并运行你的 PROMQL 查询,这样你可以以时间序列图的形式查看指标在所选时间范围内的行为。当你想保存该可视化时,可以选择 "Save visualization to dashboard",并将其添加到新的或已有的 dashboard。
或者直接进入 Dashboards:添加一个 panel,选择 ES|QL,然后编写你的 PROMQL 查询。

告警(Alerting)
你可以使用 PromQL 创建告警规则。进入 Alerts,打开 Manage rules,然后创建一个规则。搜索 Elasticsearch query 并选择它,将查询类型设为 ES|QL。
编写你的 PromQL 查询,但需要将指标赋值给一个变量,这样你就可以在 WHERE 子句中用于告警条件:
python
`
1. PROMQL metric_value=(sum by (agent.id) (rate(docker.network.inbound.bytes)))
2. | WHERE metric_value >= 500
`AI写代码
选择 @timestamp 作为时间字段,然后继续完成规则配置的其余部分。

试试看
- 在 Elastic Cloud Serverless 中打开一个 Observability 项目,或者使用 Elastic Stack 9.4。
- 编写你的查询:在 Kibana 的 ES|QL 编辑器中,通过 PROMQL 运行你的 PromQL。你也可以进入 Dashboards,添加一个 panel,选择 ES|QL,并在那里编写查询。
- 如果你是从头开始编写并需要查找 metric 名称,可以在 Discover 中运行 TS metrics-*(见上文 "查找你的数据流和指标名称")。
- 检查结果并根据需要调整查询。
Elasticsearch 和 Kibana 中的 PromQL 支持将持续演进。请关注 Observability Labs feed,以获取后续文章,了解覆盖范围和易用性改进。