今天分享一下prometheus如何将告警发送到邮箱。其他复杂的Alertmanager相关概念先不学习,直接上实战配置。
部署一套完整的prometheus+grafana监控系统详细过程
prometheus主要通过Alertmanager这个服务来转发告警的,要使用 Alertmanager 通过 QQ 邮箱 发送告警通知,你需要正确配置 SMTP 服务器,并启用 QQ 邮箱的 SMTP 服务。
1 获取 QQ 邮箱的 SMTP 授权码
QQ 邮箱默认不允许外部应用直接使用密码登录 SMTP 服务器,因此你需要获取一个 授权码:
登录 QQ 邮箱,进入 设置 -> 账户。 找到 SMTP/IMAP/POP3/Exchange 服务,开启 SMTP 服务。 开启后,会提示你获取一个 授权码(类似 rvghbimmkaopcjii
)。
记录下授权码,后续 Alertmanager 配置会用到。
2 配置 Alertmanager
编辑 **Alertmanager 配置文件 (alertmanager.yml)**,增加 SMTP 相关配置:
global:
resolve_timeout: 5m
# 配置邮件发送信息
smtp_smarthost: 'smtp.qq.com:465'
# 自己的邮箱
smtp_from: 'xxx@qq.com'
# 自己的邮箱
smtp_auth_username: 'xxx@qq.com'
# 这里是SMTP授权码 而不是 QQ 邮箱密码
smtp_auth_password: 'rvghbimmkaopcji'
smtp_hello: 'qq.com'
# 关闭tls认证
smtp_require_tls: false
route:
group_by: ['alertname','severity']
group_wait: 30s
# 发送间隔
group_interval: 1m
repeat_interval: 1m
receiver: 'email'
routes:
- receiver: email
match:
severity: critical
receivers:
- name: 'email'
email_configs:
- to: '1689631919@qq.com'
send_resolved: true
# 告警抑制
inhibit_rules:
# 定义触发抑制的告警条件
- source_match:
severity: 'critical'
# 定义被抑制的告警条件
target_match:
severity: 'warning'
equal: ['alertname', 'severity', 'instance']
# 当一个 severity 为 critical 的告警触发时,所有 severity 为 warning 且 alertname 和 instance 标签与 critical 告警相同的告警将被抑制,不会发送通知。
3 重启 Alertmanager
systemctl restart alertmanager
4 配置告警规则
部署的时候已经写了一个,我修改一下。
groups:
- name: 主机状态监控
rules:
- alert: 主机宕机
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "实例 {{ $labels.instance }} 宕机"
description: "实例 {{ $labels.instance }} 已经宕机超过 1 分钟。请检查服务状态。"
5 测试告警
测试:关掉其中一台主机
prometheus UI上可以看到告警信息

等一会后,就会收到了邮件通知,由于时间间隔设置的比较短,所以可能短信会比较多,这个根据自己需要来设置

将主机开起来后会收到恢复通知:Resolved



6 告警规则拓展
上面的告警规则只是简单的演示是否宕机,生产环境还会有内存,磁盘,CPU等方面的告警,下面将展示一个比较全面的告警规则
groups:
- name: 主机信息监控
rules:
- alert: 主机宕机
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: " {{ $labels.instance }} 主机宕机,请尽快处理"
description: " {{ $labels.instance }} 已经宕机超过 1 分钟。请检查服务状态。"
- alert: 内存使用率告警
expr: 100 - (node_memory_MemAvailable_bytes node_memory_MemTotal_bytes) * 100 > 80
for: 2m
labels:
severity: warning
annotations:
summary: "{{ $labels.instance }} 内存使用率过高, 请尽快处理!"
description: "{{ $labels.instance }} 内存使用率超过80%, 当前使用率{{ $value }}%."
- alert: CPU使用率告警
expr: 100 - (avg by (instance, job)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 1m
labels:
severity: warning
annotations:
summary: "{{ $labels.instance }} CPU使用率过高, 请尽快处理!"
description: "{{ $labels.instance }} CPU使用大于85%, 当前使用率{{ $value }}%."
- alert: 磁盘容量告警
expr: 100 - (node_filesystem_free_bytes{fstype=~"ext4|xfs"} node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100) > 80
for: 1m
labels:
severity: critical
annotations:
summary: "{{ $labels.mountpoint }} 磁盘分区使用率过高,请尽快处理!"
description: "{{ $labels.instance }} 磁盘分区使用大于80%,当前使用率{{ $value }}%."
重启prometheus后,可以看到界面多了几个告警项

本文分享了如何通过配置Alertmanager来实现邮箱告警通知,但是里面的配置文件和告警规则都展开详细讲解,将在下一篇文章讲解,敬请关注!感谢点赞和关注!
往期精彩文章:
文章转载自运维李哥不背锅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




