今天分享一下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: falseroute: 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来实现邮箱告警通知,但是里面的配置文件和告警规则都展开详细讲解,将在下一篇文章讲解,敬请关注!感谢点赞和关注!
往期精彩文章: