基于Docker部署的Alertmanager能否脱离Prometheus发送邮件告警?
可行,两种常用实现方式
完全可以复用Alertmanager的邮件配置,在Prometheus之外发送自定义告警通知。Alertmanager本身提供了API接口和官方CLI工具,能直接触发告警流程,无需依赖Prometheus的监控数据。
方法1:调用Alertmanager的/api/v2/alerts接口
Alertmanager的REST API支持接收自定义告警数据,只要构造符合格式的请求,就能触发已配置的邮件通知流程。
操作步骤:
- 确定Alertmanager的API访问地址:如果是Docker部署,假设端口映射为9093,地址为
http://<alertmanager容器IP或域名>:9093/api/v2/alerts(容器内部调用可直接用容器名,比如http://alertmanager:9093) - 构造告警JSON数据(保存为
alert.json):
[ { "labels": { "alertname": "定时任务执行异常", "severity": "critical" }, "annotations": { "summary": "数据库备份任务失败", "description": "2024-05-20 02:00执行的每日备份任务出错,错误原因:存储磁盘空间不足" }, "startsAt": "2024-05-20T02:00:00Z" } ]
- 用curl发送请求:
curl -X POST -H "Content-Type: application/json" -d @alert.json http://alertmanager:9093/api/v2/alerts
关键注意事项:
- 自定义告警的
labels必须匹配Alertmanager已配置的路由规则,否则告警会被忽略或者路由到错误的接收器 startsAt字段需遵循RFC3339时间格式(如YYYY-MM-DDTHH:MM:SSZ)
方法2:使用官方CLI工具amtool
Alertmanager提供了amtool命令行工具,可简化自定义告警的发送流程,无需手动构造JSON。
操作步骤:
- 运行
amtool:如果是Docker部署,可直接进入Alertmanager容器执行;宿主机使用则需先安装amtool - 发送告警命令示例:
# 容器内执行 amtool alert add \ alertname="定时任务执行成功" \ severity="info" \ summary="备份任务完成" \ description="2024-05-20 02:05完成数据库备份,文件大小12GB" # 宿主机执行需指定Alertmanager地址 amtool --alertmanager.url=http://127.0.0.1:9093 alert add \ alertname="定时任务执行成功" \ severity="info" \ summary="备份任务完成" \ description="2024-05-20 02:05完成数据库备份,文件大小12GB"
关键注意事项:
- 同样需要确保
alertname、severity等labels匹配已有的路由配置,才能触发邮件通知
内容的提问来源于stack exchange,提问作者Astin Gengo
相关产品推荐
相关产品推荐

