如何调试AlertManager?配置邮件告警未接收问题排查
我来帮你一步步排查AlertManager邮件告警的问题,这些都是我日常调试这类问题时常用的思路:
第一步:先查AlertManager日志(最核心的排查入口)
日志会直接告诉你告警触发、邮件发送的详细过程,包括失败原因,首先得找到日志位置:
- 如果你是用systemd管理AlertManager(绝大多数Linux发行版的默认方式),直接用这个命令实时查看日志:
建议把日志级别调到journalctl -u alertmanager -fdebug(在启动参数里加--log.level=debug),这样能看到更细的细节,比如SMTP连接的每一步 - 如果是手动启动的AlertManager,默认日志会输出到控制台;如果配置了日志文件,看启动命令里的
--log.file参数指定的路径 - 另外,AlertManager自带的状态页面也很有用:默认访问
http://<alertmanager-ip>:9093,在Alerts页面能看到当前活跃的告警,Silences页面可以检查有没有静默规则误挡住了告警
第二步:检查AlertManager配置文件
配置错误是最常见的原因,重点看这两部分:
邮件接收器(Receiver)的SMTP配置
确认SMTP参数是否正确,比如:
receivers: - name: 'email-alert-receiver' email_configs: - to: 'your-target-email@example.com' from: 'alertmanager-sender@example.com' smarthost: 'smtp.example.com:587' # 注意端口:587是TLS,465是SSL,别搞混 auth_username: 'alertmanager-sender@example.com' auth_password: 'your-smtp-password' # 像Gmail这类服务商需要用应用专用密码,不是登录密码 auth_identity: 'alertmanager-sender@example.com' require_tls: true # 大部分SMTP服务器强制要求TLS,除非你确定不需要,否则别设为false
路由(Route)规则
确认告警有没有匹配到你的邮件接收器:
- 检查路由的
match/match_re规则是否正确,比如有没有把severity: critical的告警路由到了其他接收器 - 用官方工具验证配置语法:
这个命令能快速发现语法错误、配置冲突amtool check-config /path/to/your/alertmanager.yml
第三步:手动测试邮件发送
如果日志里没看到邮件发送记录,或者想单独验证SMTP连通性:
- 用
swaks或sendemail工具直接测试SMTP服务器(先安装工具):
如果这个测试都失败,那问题肯定在SMTP服务器或网络(比如防火墙挡住了端口),和AlertManager无关;如果测试成功,再回到AlertManager的配置和日志找问题swaks --to your-target-email@example.com --from alertmanager-sender@example.com --server smtp.example.com:587 --auth-user alertmanager-sender@example.com --auth-password your-smtp-password --tls - 用AlertManager API手动触发测试告警:
发送POST请求到http://<alertmanager-ip>:9093/api/v2/alerts,请求体是:
然后看日志里有没有处理这条告警并发送邮件的记录[ { "labels": { "alertname": "TestDebugAlert", "severity": "critical" }, "annotations": { "summary": "这是一条测试告警,用于调试邮件发送" } } ]
第四步:排查收件端问题
如果AlertManager日志显示“邮件发送成功”,但你没收到:
- 先检查邮箱的垃圾邮件/垃圾箱,很多邮件服务商把自动化告警归为垃圾邮件
- 确认收件邮箱地址有没有拼写错误
- 如果是自己的邮件服务器,检查服务器的投递日志,看邮件是否被拒收、延迟或者退回
关于AlertManager的存储
AlertManager会存储告警状态、静默规则等数据,默认存在和二进制同目录的data/文件夹,或者启动时用--storage.path指定的路径。这个存储主要影响告警的状态跟踪(比如是否已经发送过告警),一般不会直接导致邮件发送失败,但如果存储目录权限不足(比如AlertManager运行用户没有读写权限),可能会导致服务异常,所以也可以检查一下目录权限:
ls -ld /path/to/alertmanager/data/
内容的提问来源于stack exchange,提问作者Mit94
相关产品推荐
相关产品推荐

