1、添加Prometheus告警规则

$ vi prometheus_config.yaml

找到rules.yaml,将 rules.yaml: '{}' 改为以下内容

  rules.yaml: |
    groups:
    - name: hostStatsAlert
      rules:
      - alert: hostCpuUsageAlert
        expr: 1 - rate(node_cpu_seconds_total{mode="idle"}[2m]) > 0.8
        for: 1m
        labels:
          severity: page
        annotations:
          summary: "Instance {{ $labels.instance }} CPU usgae high"
          description: "{{ $labels.instance }} CPU usage above 85% (current value: {{ $value }})"
      - alert: hostMemUsageAlert
        expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.85
        for: 1m
        labels:
          severity: page
        annotations:
          summary: "Instance {{ $labels.instance }} MEM usgae high"
          description: "{{ $labels.instance }} MEM usage above 85% (current value: {{ $value }})"

配置Prometheus告警规则-1

上面参数说明:

  • groups 是一个规则组的列表,每个规则组包含一组相关的告警规则。
  • name: hostStatsAlert 指定了规则组的名称,这个组中包含了一组与主机统计相关的告警规则。
  • rules 是一个告警规则的列表,每个规则包含以下属性:
  • alert:告警规则的名称,用于唯一标识该规则。
  • expr:用于计算告警状态的表达式。这里的表达式使用 Prometheus 的查询语言来定义,在这个示例中,它们分别用于检测 CPU 使用率和内存使用率是否超过阈值。
  • for:指定触发告警所需的连续时间条件。在这个示例中,如果表达式持续满足 1 分钟(1m)以上,才会触发告警。
  • labels:为告警规则指定标签,用于标识告警的严重性等级。
  • annotations:为告警规则添加注释,提供更多的信息,如告警摘要和描述。

2、重新apply

$ kubectl delete -f  prometheus_config.yaml ; kubectl apply -f  prometheus_config.yaml

3、重启prometheus服务

$ kubectl get po  |grep prometheus-server |awk '{print $1}' |xargs -i  kubectl delete po {}

4、打开浏览器输入http://192.168.1.31:31093访问Prometheus,到Prometheus页面下查看rule已经生效

配置Prometheus告警规则-2

继续查看Alerts

配置Prometheus告警规则-3

一般Alerts这边包含三个状态

  • Inactive : 规则还没有被触发
  • Pending: 规则被触发了,在评估等待时间范围内,比如上面的1m
  • Firing: 规则被触发了,超过了评估等待时间

5、测试规则

在192.168.1.35上模拟CPU使用偏高,需要执行两次

$ cat /dev/zero > /dev/null  &

在192.168.1.35上查看CPU使用率

$ top -c

配置Prometheus告警规则-4

6、等待几分钟后,Prometheus alerts里,cpu那项先变黄色,再变红色

配置Prometheus告警规则-5

7、打开浏览器,输入http://192.168.1.31:32590访问Alertmanager,可以看到告警

image-20231009202546803