跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

如何在Linux中安装并配置Prometheus告警 Linux设置邮件通知的方法

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

相关文章