一个计算机技术爱好者与学习者

0%

Promtheus配置告警规则

1. 前言

本文中,我们学习配置Prometheus的告警规则。

参考文档:

2. Prometheus告警流程

2.1. 1. 定义告警规则

告警规则是通过PromQL表达式来定义的,当表达式查询结果满足一定条件时,就会触发告警。告警规则通常包括以下几个部分:

  • 告警名称
  • PromQL表达式
  • 持续时间(duration)
  • 标签(labels)
  • 注解(annotations)

告警规则可以定义在Prometheus的配置文件中,也可以通过API动态添加。

2.2. 2. Prometheus Server触发告警

Prometheus Server会定期(默认每分钟)评估所有的告警规则,如果某个规则的PromQL表达式在持续时间内一直满足,就会触发相应的告警。

2.3. 3. 告警发送到Alertmanager

Prometheus Server将触发的告警发送到Alertmanager组件。Alertmanager负责对告警进行去重、分组、路由等处理。

2.4. 4. Alertmanager发送告警通知

Alertmanager根据配置的路由规则,将告警发送到指定的接收器,如邮件、PagerDuty、Slack、Webhook等。

2.5. 5. 消息中转服务

如果Alertmanager把消息发送到了Webhook(消息中转服务),那么消息中转服务会再次进行消息转发,转发给微信、钉钉、飞书等平台。

3. 配置告警规则

3.1. 配置告警规则概述

从上一节【Prometheus告警流程】中我们可以得知,Prometheus的告警流程跑通后,后续增删改告警,实际上就是配置告警规则。
配置告警规则的一般流程为:
1、准备告警语句
2、Prometheus添加告警规则
3、模拟告警

3.2. 准备告警语句

准备告警语句有两种方法:一种是从网上获取成熟的告警语句;另一种是自己调试告警语句。

自己调试告警语句的方法如下:

1、查看监控指标
访问Grafana Dashboard,点击一个panel的Edit,可以看到panel使用的变量,以及变量的PromQL计算方法。

2、编写PromQL语句
访问Grafana Explore页面,左上角数据源选择Prometheus。
参考panel,选择合适的指标,编写PromQL,计算出自己想要用来报警的指标

以CPU使用率为例:

1
100 - (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="idle"}[5m])))  * 100

以内存使用率为例:

1
100 - ((node_memory_MemAvailable_bytes * 100) / node_memory_MemTotal_bytes)

3.3. 配置告警

假设规则文件路径为 /opt/prometheus/conf/rules

1、创建告警规则

1
vim /opt/prometheus/conf/rules/host.rules

host.rules内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
groups:
- name: hostStatsAlert
rules:
- alert: hostCpuUsageAlert
expr: 100 - (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="idle"}[5m]))) * 100 > 85
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: 100 - ((node_memory_MemAvailable_bytes * 100) / node_memory_MemTotal_bytes) > 85
for: 1m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} MEM usgae high"
description: "{{ $labels.instance }} MEM usage above 85% (current value: {{ $value }})"

告警规则里的expr,是根据【准备告警语句】一节中获取到的PromQL语句改写的。

2、修改prometheus server配置
prometheus.yml 修改为:

1
2
3
4
5
6
alerting:
alertmanagers:
- static_configs:
- targets: ['192.168.56.101:9093'] #告警信息会发送给alertmanager
rule_files:
- /etc/prometheus/rules/*.rules #告警规则文件路径,对应宿主机 /opt/prometheus/rules/*.rules

3、重载或者重启prometheus server

1
2
curl -X POST http://localhost:9090/-/reload
docker restart prometheus

3.4. 模拟告警

1、模拟CPU使用率升高

1
2
yum install stress-ng
stress-ng --cpu 7 --verbose --timeout 2m

2、查看告警触发情况
http://192.168.56.101:9090/alerts
http://192.168.56.101:9093/#/alerts

3、查看群能否收到告警