You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes中基于Prometheus Community Helm Chart自动生成持久化卷使用率告警规则?

问题:如何自动生成Kubernetes PV使用率的Prometheus告警规则?

我已经通过Prometheus Community Helm Chart在Kubernetes中部署了Prometheus实例,目前实现了当持久化卷(Persistent Volume)使用率达到70%时,通过Slack发送告警通知。这个功能是在Helm Chart的values文件中添加告警规则实现的,相关配置示例如下:

additionalPrometheusRulesMap:
  rule-name:
    groups:
    - name: storage
      rules:
      - alert: grafanaStorageAt70%
        expr: ( sum(kubelet_volume_stats_capacity_bytes{job="kubelet", namespace="kube-logging", persistentvolumeclaim="prom-grafana"}) - sum(kubelet_volume_stats_available_bytes{job="kubelet", namespace="kube-logging", persistentvolumeclaim="prom-grafana"})) / sum(kubelet_volume_stats_capacity_bytes{job="kubelet", namespace="kube-logging", persistentvolumeclaim="prom-grafana"}) > 0.7
        for: 15m
        labels:
          severity: warning
        annotations:
          summary: The Storage of Grafana is 70% full. Maybe increase the storage size?
      - alert: lokiStorageAt70%
        expr: ( sum(kubelet_volume_stats_capacity_bytes{job="kubelet", namespace="kube-logging", persistentvolumeclaim="storage-loki-0"}) - sum(kubelet_volume_stats_available_bytes{job="kubelet", namespace="kube-logging", persistentvolumeclaim="storage-loki-0"})) / sum(kubelet_volume_stats_capacity_bytes{job="kubelet", namespace="kube-logging", persistentvolumeclaim="storage-loki-0"})> 0.7
        for: 15m
        labels:
          severity: warning
        annotations:
          summary: The Storage of Loki is 70% full. Maybe increase the storage size?

当前方案运行正常,但有个痛点:每新增一个持久化卷,我都得手动添加一条对应的告警规则。想请教有没有更高效的方式,能自动生成这类告警规则(或者通过变量定义通用规则)?


回答

当然有!你可以利用Prometheus的向量运算和标签变量来写一条通用的告警规则,这样不管新增多少PV,都不需要手动修改规则。核心思路是去掉persistentvolumeclaim的固定值,让Prometheus自动遍历所有符合条件的PVC,然后基于每个PVC的指标计算使用率并触发告警。

下面是修改后的通用告警规则,直接替换你values文件里的rules部分即可:

additionalPrometheusRulesMap:
  rule-name:
    groups:
    - name: storage
      rules:
      - alert: PersistentVolumeUsageAt70%
        # 去掉固定PVC筛选,让Prometheus自动处理所有符合条件的PVC指标
        expr: (kubelet_volume_stats_capacity_bytes{job="kubelet", namespace="kube-logging"} - kubelet_volume_stats_available_bytes{job="kubelet", namespace="kube-logging"}) / kubelet_volume_stats_capacity_bytes{job="kubelet", namespace="kube-logging"} > 0.7
        for: 15m
        labels:
          severity: warning
        annotations:
          # 用标签变量动态生成告警内容
          summary: "Storage of PVC {{ $labels.persistentvolumeclaim }} is 70% full"
          description: "PVC {{ $labels.persistentvolumeclaim }} in namespace {{ $labels.namespace }} has reached 70% usage. Current usage: {{ $value | humanizePercentage }}. Consider increasing storage size."

关键细节说明:

  1. 移除硬编码PVC筛选:原来的规则里固定了persistentvolumeclaim的值,现在去掉后,Prometheus会自动遍历kube-logging命名空间下的所有PVC指标。
  2. 保留维度计算:不需要用sum()聚合(除非你有同PVC的多副本指标需要合并),直接用原始指标运算,Prometheus会自动按persistentvolumeclaim、namespace等标签维度分别计算每个PVC的使用率。
  3. 动态告警内容:通过{{ $labels.persistentvolumeclaim }}和{{ $labels.namespace }}可以自动插入PVC和命名空间名称,{{ $value | humanizePercentage }}还能把数值转换成易读的百分比格式,让告警信息更直观。

进阶优化(可选):

  • 如果想监控所有命名空间的PVC,直接去掉namespace="kube-logging"的筛选条件即可。
  • 可以添加存储类筛选,只监控特定类型的PVC:storageclass="your-storage-class"。
  • 若有不需要监控的PVC,用!=排除:persistentvolumeclaim!="exclude-this-pvc"。

这样以后新增PVC时,只要符合规则的标签筛选条件,就会自动被纳入监控,完全不用手动修改告警规则啦!

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:02:50