pm2-health进程终止/异常时重复发邮件,求配置优化方案
解决pm2-health重复发送告警邮件的问题
针对你遇到的重复告警邮件问题,可以通过调整以下配置项来实现每次事件仅发送一封对应告警邮件:
核心配置调整思路
- 优化批量告警设置,将同一事件周期内的多个通知合并为一封邮件
- 避免因PM2自动重启进程导致的多次exit事件告警
- 移除可能导致重复监控的配置项
修改后的module_conf.json配置
{ "pm2-health": { "smtp": { "host": "smtp.gmail.com", "port": 587, "user": "sender@gmail.com", "password": "pass", "disabled": false }, "mailTo": "receiver@gmail.com", "replyTo": "", "batchPeriodM": 3, // 延长批量周期至3分钟,覆盖PM2默认重启周期 "batchMaxMessages": 15, // 调整单批最大消息数 "events": [], // 移除exit事件,改用aliveTimeout监控进程状态 "exceptions": true, "messages": true, "messageExcludeExps": [], "metric": {}, "metricIntervalS": 60, "aliveTimeoutS": 300, // 进程停止5分钟后发送告警(等待PM2重启尝试结束) "addLogs": true, "appsExcluded": [], "snapshot": { "url": "", "token": "", "auth": { "user": "", "password": "" }, "disabled": false } }, "module-db-v2": {} // 移除pm2-health子配置,避免重复监控 }
配置说明
- batchPeriodM: 从1分钟延长至3分钟,确保PM2重启进程产生的多次exit/exception事件能被合并到同一批邮件中
- events: 清空数组,不再监听exit事件。改为依赖
aliveTimeoutS,仅当进程停止且超过设定时间(未恢复)时发送一次告警 - module-db-v2: 移除其中的pm2-health配置,防止启动多个监控实例导致重复发送邮件
- aliveTimeoutS: 保持5分钟,等待PM2完成默认的重启尝试(最多10次)后,确认进程无法恢复再发送告警
可选调整(需即时告警的场景)
如果需要在手动停止进程时立即收到告警,可保留events: ["exit"],但需添加过滤规则排除PM2重启相关的exit事件:
"messageExcludeExps": [ /PM2 restart/ // 根据实际日志内容调整正则,过滤重启触发的exit事件 ]
这种方式需要你根据PM2重启时的日志内容编写匹配规则,确保仅保留真正的进程终止事件。
内容的提问来源于stack exchange,提问作者Phạm Tiến Hải
相关产品推荐
相关产品推荐

