当检测到系统异常时,报警的处理是多样化的。举个简单的例子:
对于同一个应用监控指标,也有可能根据当前的状态,来决定将报警发送到不同的团队。
这就引出了基于标签的告警路由 ,以确定在接收到告警后Alertmanager需要如何对其进行处理。
计算当前内存使用率的表达式:
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
下面通过规则标签实现上面的要求,检测到不同的内存使用率时,触发不同级别的报警。更新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告警规则的活动状态:
在Labels里,severity=warning
表示当前所处的级别。当内存使用率大于20%时,这个标签会更新为severity=critical
。