监控流程
prometheus ----> 触发阈值 ----> 超出持续时间 ----> alertManager ----> 分组|抑制|静默 ---> 媒体类型 ----> 邮件|微信|钉钉
sh
分组(group): 将类似性质的警报合并为单个通知,比如网络通知、主机通知、服务通知
静默(silences): 是一种简单的特定时间静音的机制,例如:服务器要升级维护可以先设置这个时间段告警静默
抑制(inhibition):当警报发出后,停止重复发送由此警报引发的其他警报即合并一个故障引起的多个警报时间,可以消除冗余警告
服务器配置信息
系统 | IP | 服务 |
---|---|---|
Ubuntu22.04 | 192.168.202.221 | Prometheus, grafana, blackbox exporter, node exporter ,k8s master |
Ubuntu22.04 | 192.168.202.222 | node exporter , k8s worker, alertmanager |
Ubuntu22.04 | 192.168.202.223 | node exporter, k8s worker |
Ubuntu22.04 | 192.168.202.224 | node exporter , k8s worker |
下载并安装aleretmanager
sh
# 下载alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
解压alertmanager
sh
tar -xf alertmanager-0.26.0.linux-amd64.tar.gz -C /usr/local/
创建软链接
sh
ln -s /usr/local/alertmanager-0.26.0.linux-amd64/ /usr/local/alertmanager
创建一个Service文件
sh
tee /etc/systemd/system/alertmanager.service <<EOF
[Unit]
Description=Prometheus Server
After=network.target
[Service]
Restart=on-failure
WorkingDirectory=/usr/local/alertmanager
ExecStart=/usr/local/alertmanager/alertmanager
[Install]
WantedBy=multi-user.target
EOF
重载并启动
sh
systemctl daemon-reload
systemctl start alertmanager
systemctl enable alertmanager
修改alertmanager的配置文件
本示例使用邮箱告警
yaml
global:
smtp_from: # 发件人邮箱地址
smtp_smarthost: # 邮箱smtp地址
smtp_auth_username: # 发件人登录的用户名,默认和发件人地址一致
smtp_auth_passwd: # 发件人登录密码,有时候是授权码
smtp_require_tls: # 是否需要tls协议,默认是true
resolve_timeout: # 在指定时间内没有产生新的事件就发送恢复通知
配置示例
yaml
global:
smtp_smarthost: 'smtp.qq.com:465' # 发件人邮箱地址
smtp_from: '3513784343@qq.com' # 邮箱smtp地址
smtp_auth_username: '3513784343@qq.com' # 发件人登录的用户名,默认和发件人地址一致
smtp_auth_passwordd: 'yjdsdihwqecfdsds' # 发件人登录密码,有时候是授权码
smtp_require_tls: false # 是否需要tls协议,默认是true
resolve_timeout: 5m # 在指定时间内没有产生新的事件就发送恢复通知
route: # 用来设置报警的分发策略
group_by: ['alertname'] # 采用哪个标签来作为分组的依据
group_wait: 30s # 组警告等待时间,也就是告警产生后等待30s,如果有同组告警一起发出
group_interval: 2s # 两组告警的间隔时间
repeat_interval: 2m # 重复告警的间隔时间,减少相同邮件的发送频率
receiver: 'web.hook' # 设置接收人
receivers:
- name: 'web.hook'
# webhook_configs:
# - url: 'http://127.0.0.1:5001/'
email_configs:
- to: '3513784343@qq.com'
inhibit_rules: # 抑制的规则
- source_match: # 源匹配级别,当匹配成功发出通知,但是其他的通知将被抑制
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
重启服务
sh
systemctl restart alertmanager
查看服务
alertmanager 监听在9093端口
sh
root@node2:/usr/local/alertmanager# ss -tunlp | grep 9093
tcp LISTEN 0 4096 *:9093 *:* users:(("alertmanager",pid=131133,fd=8))
验证报警匹配规则
sh
./amtool alert --alertmanager.url=http://192.168.202.222:9093
Alertname Starts At Summary State
在Prometheus配置文件中添加alertmanager的地址
yaml
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.202.222:9093 # 配置alertmanager地址
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "/usr/local/prometheus/rule.yml" # 告警规则文件
添加报警规则
在/usr/local/prometheus目录下创建rule.yaml文件,/usr/local/prometheus目录为prometheus解压后的工作目录
yaml
#rule.yml
groups:
- name: pod_rules
rules:
- alert: Node Memery Size
expr: node_memory_MemFree_bytes > 1
for: 2m
labels:
severity: critical
annotations:
description: Pod memory size is less
检查配置文件
sh
root@node1:/usr/local/prometheus# ./promtool check config prometheus.yml
Checking prometheus.yml
SUCCESS: 1 rule files found
SUCCESS: prometheus.yml is valid prometheus config file syntax
Checking rule.yml
SUCCESS: 1 rules found
重启Prometheus
sh
systemctl restart prometheus
查看规则
查看告警
可以看到邮箱里面也收到了告警通知