介绍
代码语言:javascript复制Prometheus是一个按功能划分的凭条,指标的收集和存储与警报是分开的。警报管理功能是由Alertmanager的工具提供,该工具是监控体系中的独立组件。
在Prometheus上定义警报规则后,这些规则可以出发事件,然后传播到Alertmanager,Alertmanager会决定如何处理相应的警报。Alertmanager对警报进行去重、分组,然后路由到不同的接收器,如电子邮件、短信或SaaS服务(PagerDuty等)。我们将在Prometheus服务器上编写警报规则 [2] ,这些规则将使用我们收集的指标并在指定的阈值或标准上触发警报。我们还将看到如何为警报添加一些上下文。当指标达到阈值或标准时,会生成一个警报并将其推送到Alertmanager。与Prometheus一样,Alertmanager配置也是基于YAML的配置文件。
prometheus本身不支持告警功能,主要通过插件alertmanage来实现告警。AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户。
prometheus触发一条告警的过程:
prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等。
一、安装promethus的监控alertmanager插件
代码语言:javascript复制wget https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz
tar zxvf alertmanager-0.20.0.linux-amd64.tar.gz
cd alertmanager-0.20.0.linux-amd64
mv alertmanager-0.20.0.linux-amd64 /usr/local/prometheus/alertmanager
nohup /usr/local/prometheus/alertmanager/alertmanager --config.file="/usr/local/prometheus/alertmanager/alertmanager.yml" &
访问:http://IP:9093
二、prometheus集成alertmanager
- 1、部署完毕alertmanager, 需要告知prometheus告警信息推送的位置, 通过如下配置即可完成
[root@k8s-test-01 alertmanager]# cat /usr/local/prometheus/prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 114.67.94.33:9093
- 2、创建报警规则
[root@node00 prometheus]# vim prometheus.yml
rule_files:
- "rules/*rules.yml"
# - "second_rules.yml"
[root@node00 prometheus]# mkdir rules
[root@node00 prometheus]# cat rules/node_rules.yml
groups:
- name: node-alert
rules:
- alert: disk-full
expr: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"})
for: 1m
labels:
serverity: page
annotations:
summary: "{{ $labels.instance }} disk full "
description: "{{ $labels.instance }} disk > {{ $value }} "
解释: expr 相当于表示,表示磁盘使用率是多少的值(5%) ,for 持续时间为1分钟就会报警.(上面规则只要重启动aletemanger 就会报警)
- 如果想要恢复的话的,可以使用 数值比较。
[root@node00 prometheus]# cat rules/node_rules.yml
groups:
- name: node-alert
rules:
- alert: disk-full
expr: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"}) > 8
for: 1m
labels:
serverity: page
annotations:
summary: "{{ $labels.instance }} disk full "
description: "{{ $labels.instance }} disk > {{ $value }} "
- 3、重启动promethus /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &
查看规则
查看报警信息
三、测试邮件报警问题
- 1、alertmanger 配置文件修改(邮件发送相关) 上面的消息信息已经从prometheus推送给alertmanager了, 我们已经可以在alertmanager的web管理界面看到对应的报警信息,但是我们还没有配置如何让alertmanager把这些信息推送我们的社交软件上面去。
[root@k8s-test-01 alertmanager]# more /usr/local/prometheus/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
###################################
smtp_auth_username: "xxx@126.com"
smtp_auth_password: "*******"
#smtp_auth_secret: ""
smtp_require_tls: false
smtp_smarthost: "smtp.126.com:465"
smtp_from: "xxx@126.com"
####################################
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'email-caozm'
receivers:
- name: 'email-xxx'
email_configs:
- send_resolved: true
to: xxx@126.com
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
解释: 分组(group): 将类似性质的警报合并为单个通知。
代码语言:javascript复制group_by: ['alertname'] # 以标签作为分组依据
group_wait: 10s # 分组报警等待时间
group_interval: 10s # 发送组告警间隔时间
repeat_interval: 1h # 重复告警发送间隔时间
抑制(inhibition): 当警报发出后,停止重复发送由此警报引发的其他警报。可以消除冗余告警
代码语言:javascript复制
inhibit_rules:
- source_match: # 当此告警发生,其他的告警被抑制
severity: 'critical'
target_match: # 被抑制的对象
severity: 'warning'
equal: ['id', 'instance']
重启动alertmanger 进程。
- 2、故障邮件
- 3 恢复邮件