说明
这篇文章介绍prometheus和alertmanager的报警和通知规则,prometheus的配置文件名为prometheus.yml
,alertmanager的配置文件名为alertmanager.yml
报警:指prometheus将监测到的异常事件发送给alertmanager,而不是指发送邮件通知
通知:指alertmanager发送异常事件的通知(邮件、webhook等)
报警规则
在prometheus.yml
中指定匹配报警规则的间隔
1 | # How frequently to evaluate rules. |
在prometheus.yml
中指定规则文件(可使用通配符,如rules/*.rules)
1 | # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. |
在rules目录中添加mengyuan.rules
1 | ALERT goroutines_gt_70 |
配置文件设置好后,需要让prometheus重新读取,有两种方法:
- 通过HTTP API向
/-/reload
发送POST请求,例:curl -X POST http://localhost:9090/-/reload
- 向prometheus进程发送SIGHUP信号
将邮件通知与rules对比一下(还需要配置alertmanager.yml
才能收到邮件)
通知规则
设置alertmanager.yml
的的route与receivers
1 | route: |
名词解释
Route
route
属性用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。
1 | // Match does a depth-first left-to-right search through the route tree |
Alert
Alert是alertmanager接收到的报警,类型如下。
1 | // Alert is a generic representation of an alert in the Prometheus eco-system. |
具有相同Lables
的Alert(key和value都相同)才会被认为是同一种。在prometheus rules文件配置的一条规则可能会产生多种报警
Group
alertmanager会根据group_by
配置将Alert分组。如下规则,当go_goroutines等于4时会收到三条报警,alertmanager会将这三条报警分成两组向receivers发出通知。
1 | ALERT test1 |
主要处理流程
- 接收到Alert,根据labels判断属于哪些Route(可存在多个Route,一个Route有多个Group,一个Group有多个Alert)
- 将Alert分配到Group中,没有则新建Group
- 新的Group等待
group_wait
指定的时间(等待时可能收到同一Group的Alert),根据resolve_timeout
判断Alert是否解决,然后发送通知 - 已有的Group等待
group_interval
指定的时间,判断Alert是否解决,当上次发送通知到现在的间隔大于repeat_interval
或者Group有更新时会发送通知
TODO
- 重启对发送报警与通知的影响
- 能否组成集群