为报警规则添加标签

当检测到系统异常时,报警的处理是多样化的。举个简单的例子:

  • 当检测到内存使用率在70%-80%之间时,报警级别为warning,发送邮件报警;
  • 当检测到内存使用率在80%-100%之间时,报警级别为critical,发送电话报警;

对于同一个应用监控指标,也有可能根据当前的状态,来决定将报警发送到不同的团队。

这就引出了基于标签的告警路由 ,以确定在接收到告警后Alertmanager需要如何对其进行处理。

为报警规则添加标签

计算当前内存使用率的表达式:

(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100

image-20210510161810607 下面通过规则标签实现上面的要求,检测到不同的内存使用率时,触发不同级别的报警。更新rules/myrules.yml文件:

groups:
  - name: my-rules
    rules:
    - alert: NodeExporterDown
      expr: up{job='node_exporter'}  == 0
      for: 1m  # 持续检测到异常超过1m后才触发firing
      
    - alert: MemoryWarning
      expr: 10 < (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 < 20  # 当前内存使用率为16%,根据实际情况更改阈值以触发此条件。
      for: 1m
      labels:
        severity: warning  # 级别为warning
        
    - alert: MemoryCritical
      expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 >= 20  
      for: 1m
      labels:
        severity: critical # 级别为critical

重新启动prometheus服务。通过Prometheus WEB界面中的Alerts菜单查看当前Prometheus告警规则的活动状态:

image-20210510161723121 在Labels里,severity=warning表示当前所处的级别。当内存使用率大于20%时,这个标签会更新为severity=critical