Prometheus告警实战:通过配置Alertmanager实现邮箱告警通知

艺帆风顺 发布于 2025-04-07 21 次阅读


今天分享一下prometheus如何将告警发送到邮箱。其他复杂的Alertmanager相关概念先不学习,直接上实战配置。

本文是基于下面两个文章的续写:

部署一套完整的prometheus+grafana监控系统详细过程

Prometheus监控Linux服务器

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

往期精彩文章:


K8S命令详解汇总【自用珍藏版】K8S集群部署 | K8S存储实战案例 |
K8S证书续签十年 | K8S部署Prometheus | Rancher部署并接管K8S |
Jenkins安装部署 | Gitlab安装部署 | 服务网格Istio安装及实战 |
搭建企业级Harbor仓库 | K8S对接Harbor仓库 | Docker常用命令汇总 |
Docker无法下载镜像解决办法 | 安装Docker的三种方法 | Docker基础概念汇总 |

Oralce19C RAC集群搭建 | Oracle集群管理命令汇总 | MySQL集群安装部署 |
MySQL一键备份脚本 | MySQL集群目录迁移 | Redis三主三从集群部署 | 

150个Linux常用命令 |  8个有趣的Linux命令 | Vim编辑器的常用操作汇总  |
Firewalld防火墙详细讲解 |  构建内部Yum源 | 超全的磁盘扩容方法 | 服务器带外管理知识 | Linux文件系统选择指南:XFS还是EXT4?安装完操作系统后建议做这些优化工作!