You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Prometheus告警规则中动态展示挂载点剩余磁盘GB值

解决AlertManager告警模板中关联对应挂载点磁盘可用GB值的问题

你遇到的核心问题是:当前的query调用没有过滤出与告警绑定的特定挂载点,导致返回所有挂载点的node_filesystem_avail_bytes数据,无法匹配到当前告警的目标挂载点。

要精准关联到对应挂载点的磁盘可用空间,只需要在query执行的PromQL中加入mountpoint标签的过滤条件,利用告警自带的$labels.mountpoint来锁定对应的指标即可。

修改后的完整告警规则

alert: OutOfDiskSpace
expr: node_filesystem_free_bytes / node_filesystem_size_bytes * 100 < 10
for: 1m
labels:
  severity: Critical
annotations:
  description: |-
    Disk is almost full (< 10% left)
    Instance: {{ $labels.instance_short }}
    Mountpoint: {{ $labels.mountpoint }}
    Available Space: {{ printf "node_filesystem_avail_bytes{mountpoint=\"%s\"} / 1024 / 1024 / 1024" $labels.mountpoint | query | first | value | humanize }} GB

关键修改细节

  1. 挂载点精准过滤:在printf生成的PromQL中,通过{mountpoint=\"%s\"}将当前告警的$labels.mountpoint作为过滤条件,确保query只拉取该挂载点对应的磁盘可用字节数,完美匹配当前告警的上下文。
  2. 友好化数值展示humanize函数会把原始字节计算后的数值转换成易读格式(比如将1288490188转为1.2),最后手动加上GB单位让告警信息更直观。
  3. 排版优化:用|-定义多行的description,让告警内容的层级更清晰,可读性更强。

额外注意事项

  • 确认你的node_exporter确实暴露了mountpoint标签,且标签值与告警规则中$labels.mountpoint完全一致(注意路径格式、大小写,比如//data的区别)。
  • 如果环境中有多台实例,还可以追加instance标签过滤,比如{instance="{{ $labels.instance }}", mountpoint="{{ $labels.mountpoint }}"},避免跨实例的指标混淆。

内容的提问来源于stack exchange,提问作者a1dude

火山引擎 最新活动