Kustomize配置Prometheus告警:如何按告警名修改优先级?
可行,两种主流方案解决你的问题
方案1:利用PrometheusRule的Strategic Merge特性(推荐)
Prometheus Operator定义的PrometheusRule CRD中,spec.groups[].rules数组的合并策略是基于alert字段的——也就是说,Kustomize的strategic merge补丁会自动匹配相同alert值的规则项,只修改你指定的字段,不会覆盖base层的summary、description等通用配置。
操作步骤:
- Base层保留完整通用配置(比如
base/prometheus-rules.yaml):
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: common-alerts spec: groups: - name: resource-alerts rules: - alert: HighCPUUsage expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 70 labels: severity: warning annotations: summary: "High CPU usage on {{ $labels.instance }}" description: "CPU usage is above 70% for 5 minutes" - alert: HighMemoryUsage expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 80 labels: severity: warning annotations: summary: "High Memory usage on {{ $labels.instance }}" description: "Memory usage is above 80% for 5 minutes"
- Overlay层创建针对性补丁文件(比如
overlay/prod/high-cpu-patch.yaml),只写需要修改的字段:
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: common-alerts spec: groups: - name: resource-alerts rules: - alert: HighCPUUsage expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 90 labels: priority: critical
- 在Overlay的kustomization.yaml中引用补丁:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base patches: - path: high-cpu-patch.yaml target: group: monitoring.coreos.com version: v1 kind: PrometheusRule name: common-alerts
执行kustomize build overlay/prod后,你会看到HighCPUUsage规则的expr和priority被修改,而summary、description等通用配置完全保留。
方案2:拆分告警为独立PrometheusRule资源
如果不想依赖数组操作,可以将base层的每个告警拆成单独的PrometheusRule资源,每个文件只定义一条规则。这样overlay层可以直接通过资源名称精准修改,完全不用管数组索引。
操作步骤:
- Base层拆分资源:
比如base/high-cpu-alert.yaml:
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: high-cpu-usage-alert spec: groups: - name: resource-alerts rules: - alert: HighCPUUsage expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 70 labels: severity: warning annotations: summary: "High CPU usage on {{ $labels.instance }}" description: "CPU usage is above 70% for 5 minutes"
base/high-memory-alert.yaml同理。
- Overlay层针对单个资源修改:
在overlay/prod/kustomization.yaml中添加补丁:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base patches: - target: group: monitoring.coreos.com version: v1 kind: PrometheusRule name: high-cpu-usage-alert patch: |- - op: replace path: /spec/groups/0/rules/0/expr value: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 90 - op: replace path: /spec/groups/0/rules/0/labels/priority value: critical
这种方式更适合告警数量较多的场景,每个告警独立管理,修改时不会影响其他规则。
内容的提问来源于stack exchange,提问作者Homer
相关产品推荐
相关产品推荐

