在 Prometheus 生态里查询数据,通常需要编写 PromQL。对普通研发或业务用户来说,PromQL 门槛偏高。
解决这个问题通常有两种思路:一种是用 AI 把自然语言诉求翻译成 PromQL;另一种是在平台里内置常用 PromQL,让用户点击即可查询。夜莺指标视图选择的是第二个方案:预置一批 PromQL,并允许用户自行增删。
指标视图的核心价值是把“会写 PromQL 的专家经验”沉淀为“普通用户可点击查询的指标入口”。
本文重点说明:
- 指标视图有哪些入口。
- 内置指标如何查询。
- 过滤条件如何自动注入 PromQL。
- 如何新增、导出和贡献内置指标。
操作入口
内置 PromQL 有两个查看入口:
- 在即时查询页面,直接点击搜索内置指标。
- 直接进入指标视图页面。
下面是即时查询页面样例:

点击内置查询后,下面会出现一个下拉浮层,展示指标列表。你可以通过上方搜索条件筛选,例如图中选择的是 Linux 类别和 Categraf 采集器。
鼠标 hover 到某个指标上,右侧会展示指标信息,包括类型、采集器、表达式、单位、描述等。
为什么要设计采集器选项?因为夜莺可以接入多个时序库,不同时序库中的采集数据可能不同:有些来自 Categraf,有些来自 Exporter,有些来自自研 agent。采集器字段主要用于搜索过滤,避免用户选到不适用当前数据源的指标。
点击某个指标,就会自动填充到 promql 输入框里并触发查询,效果如下:

另一个操作入口是在指标视图页面。
指标视图
指标视图页面如下:

它的核心逻辑是:把 PromQL 提前内置,配上中文名称,难理解的指标再补充详细解释,同时按类别组织。最终用户点击指标中文名称,就可以直接出图。
点击某个指标,侧拉板里出图,如下:

这样一来,用户不需要懂 PromQL,只需要知道自己要查什么,就可以直接查到结果。
默认提供的 PromQL 都是查询整个时序库,没有过滤条件。对于某个业务的研发人员,可能只想看自己负责服务的指标,此时可以提前配置过滤条件。选中某个过滤条件之后再点击指标,夜莺会自动在 PromQL 中增加过滤条件。
下面的例子中,配置了一个过滤条件:

这里我使用 ident 标签做过滤,值为 categraf01,你完全可以自定义其他标签的过滤条件。再次点击指标,效果如下:

可以看到 promql 已经被自动修改了,添加上了 ident="categraf01" 的过滤条件。
指标视图适合什么场景
指标视图特别适合下面几类场景:
| 场景 | 适合原因 |
|---|---|
| 基础设施指标查询 | Linux、MySQL、Redis 等常用组件指标可以沉淀为固定 PromQL |
| 专业团队服务普通研发 | SRE 或平台团队维护指标,研发人员点击查询即可 |
| 统一指标口径 | 用同一批内置 PromQL 避免不同团队各写各的表达式 |
| 培训和交接 | 新同事可以通过中文指标名称快速理解常用监控项 |
内置的指标如何添加
夜莺内置指标如果不够用,可以自行添加,但需要具备指标视图下的相关写权限。
如果要添加的是自己公司特定指标,在指标视图里添加即可。如果要补充的是通用组件指标,比如 MySQL、Redis 的指标,建议去模板中心添加。比如要添加 Redis 指标:

因为在这里添加的时候,可以省去选择组件字段。
假设你添加了一些指标,觉得整理得很好,想和社区分享,可以选中相关指标,然后使用右上角的导出指标操作,导出一段 JSON 内容。然后把这段内容提交到夜莺 GitHub 即可。
夜莺代码目录中有个 integrations 目录:
里面分门别类放置了各类组件的仪表盘、告警规则、内置指标。其中内置指标位于各个组件目录下的 metrics 目录,你可以参考 Linux 的 metrics 目录里的内容。
一般每个采集器分别有一个 JSON 文件。JSON 文件整体是一个数组,数组里的每个元素就是一个内置指标定义。
FAQ
Q1:指标视图是不是替代即时查询?
A:不是。即时查询适合调试 PromQL 和临时分析;指标视图适合把常用 PromQL 沉淀成可复用入口。
Q2:内置指标能覆盖所有监控指标吗?
A:不能。监控指标非常多,夜莺内置 PromQL 更像样例和常用入口。团队可以根据自己的数据源和组件自行增删。
Q3:为什么点击指标后要自动加过滤条件?
A:默认 PromQL 查询整个时序库。业务研发通常只关心自己负责的服务或机器,过滤条件可以把查询范围缩小到目标对象。
Q4:公司内部指标和社区通用指标应该分别放哪里?
A:公司内部特定指标可以在指标视图里维护;MySQL、Redis 等通用组件指标建议在模板中心添加,并可导出后贡献给社区。
欢迎大家提交 PR,这个事大家多多参与,很快就可以有一个丰富的内置指标库了。
