Alertmanager是独立于Prometheus的告警管理服务,负责接收、去重、分组、抑制和路由告警至邮件、钉钉等渠道;必须单独安装配置,通过systemd托管,且需严格校验SMTP参数、label匹配与YAML语法。
AlertManager 必须独立安装,不能靠 Prometheus 自带
AlertManager 不是 Prometheus 的子进程或内置模块,它是个完全独立的服务。Prometheus 只负责“发现告警”,真正“发通知”的是 AlertManager。装错位置、漏启服务、或误以为改完
就能发邮件,是新手最常卡住的点。
实操建议:
去
https://www.php.cn/link/0b3246fe110a20162bb905e1baa06e50
下载对应架构的 tar.gz 包(如
)
解压后把
二进制文件复制到
,确保有执行权限
别直接运行裸命令;用 systemd 托管更稳,配置
,关键项包括:
和
启动后访问
,能打开页面且右上角显示 “Status → Configuration” 可读,才算真正跑起来了
邮件发不出?先盯死 smtp_smarthost、auth_username 和 from 三者一致性
QQ/163/126 邮箱发信失败,90% 是因为
、
、
这三个字段没对齐。比如用 QQ 邮箱,
必须是
或
,端口错一个就 TLS 握手失败;
和
必须**完全相同**,否则 QQ/163 会静默拒收(错误不报,日志里也看不到)。
实操建议:
对 587 端口;
对 465 端口(实际走 SSL)
密码字段填的是“授权码”,不是邮箱登录密码——QQ/163/126 后台要单独开通 SMTP 服务并生成授权码
测试时在
里加
,这样恢复通知也能收到,方便确认链路通不通
模板里所有 label 引用必须加默认值,例如
,否则某条告警缺
,整封邮件内容会塌掉
route 配置写错,告警根本进不了 email_configs
AlertManager 的
是树状匹配,不是规则列表。一旦某条告警匹配到某个
,就立刻停止向下查找。所以如果
,但实际告警里根本没有
这个 label(比如你用的是
或
),那这条 route 根本不会命中,自然不会走到
。
Docker Desktop(linux)
当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。
下载
实操建议:
先用
查看真实告警数据,确认 label 键名(注意大小写和下划线)
是精确字符串匹配,
才是正则;比如
要求 label 值**字面等于**
,多一个空格或大小写不对都失败
别把
设太大(比如 5m),而告警本身只持续 10 秒——它等不到聚合就直接发了,但可能被静默规则拦住,你以为没发,其实是被吞了
根 route 的
字段必须指向下面
里定义的 name,拼错一个字母(比如写成
vs
)就静默失败
改完 alertmanager.yml 后必须重载,不是改完就生效
AlertManager 默认不监听文件变化,
修改后,既不会自动加载,也不会热更新。常见错误是改完配置、systemctl restart 失败,就放弃排查,其实只是忘了开
。
实操建议:
启动参数里必须加
,否则
会返回 404
检查配置语法用
,比靠启动报错快得多
YAML 缩进是硬要求:两个空格和四个空格混用、tab 和空格混用,都会导致
,错误信息不指明哪一行,只能逐行查缩进
修改后别只 reload —— 先
,再
,最后
看
是否变了
AlertManager 的路由逻辑和 SMTP 校验是两套独立又咬合的机制,调通其中一个不等于告警能落地;最容易忽略的是:告警 label 名称来自 Prometheus 的
,而 route 匹配依赖这些 label,中间任何一环命名不一致,整条链路就断在半路,连错误日志都安静得像没发生过。
prometheus.ymlalertmanager-0.27.0.linux-amd64.tar.gzalertmanager/usr/local/bin//etc/systemd/system/alertmanager.service--config.file=/etc/alertmanager/alertmanager.yml--web.listen-address=:9093http://localhost:9093smtp_smarthostsmtp_auth_usernamesmtp_fromsmtp_smarthostsmtp.qq.com:587smtp.qq.com:465auth_usernamesmtp_fromsmtp_require_tls: truesmtp_require_tls: falseemail_configssend_resolved: true{{ .Labels.severity | default "unknown" }}severityroutereceivergroup_by: ['alertname']alertnamejobinstanceemail_configscurl http://localhost:9093/api/v2/alertsmatchmatch_reseverity: "warning"warninggroup_waitreceiverreceiversmailmail1alertmanager.yml--web.enable-lifecycle--web.enable-lifecyclecurl -X POST http://localhost:9093/-/reloadamtool check-config /etc/alertmanager/alertmanager.ymlyaml: unmarshal errorsamtool check-configcurl -X POST ... /-/reloadcurl http://localhost:9093/api/v2/statusconfig_hashrule_files