You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PM2 Health批量告警配置失效,请求优化异常告警频率

解决PM2-health告警频率过高的问题

问题背景

我需要限制PM2发送异常告警的频率:应用崩溃触发异常时立即发送告警,但下一次告警需至少间隔5分钟。目前异常发生时,每分钟都会收到告警邮件,甚至1秒内产生1000次请求时,会收到pm2-health发来的1000条告警,完全不符合预期。

我已经配置了batchPeriodM: 5和batchMaxMessages: 1,本以为能将5分钟内的消息批量聚合只发1条,但配置未生效。

当前配置文件

module_conf.json

{
    "pm2-health": {
        "smtp": {
            "host": "",
            "port": 465,
            "user": "",
            "password": "",
        "secure": true,
            "disabled": false
        },
        "mailTo": "",
        "replyTo": "",
        "batchPeriodM": 5,
        "batchMaxMessages": 1,
        "events": [
            "exit"
        ],
        "exceptions": true,
        "messages": true,
        "messageExcludeExps": [],
        "metric": {},
        "metricIntervalS": 60,
        "aliveTimeoutS": 300,
        "addLogs": true,
        "appsExcluded": [],
        "snapshot": {
            "url": "",
            "token": "",
            "auth": {
                "user": "",
                "password": ""
            },
            "disabled": false
        }
    }
}    

ecosystem.config.js

{
    "apps":[
    {
        "name":"Server",
        "script":"server.js",
        "exec_mode":"fork",
        "merge_logs":true,
        "cwd":"/home/ubuntu/code/apps/server",
        "error_file":"/var/log/pm2/service/server-error.log",
            "out_file":"/var/log/pm2/service/server-out.log",
            "env":{
                    "NODE_ENV":"production",
            "PORT" : "5002"
            }
        }
        ]
}

解决方案

1. 升级pm2-health到最新版本

部分旧版本的pm2-health对批量告警逻辑存在bug,先升级到最新稳定版:

pm2 uninstall pm2-health
pm2 install pm2-health@latest
pm2 reload ecosystem.config.js

2. 调整pm2-health配置,添加去重与聚合逻辑

修改module_conf.json,补充关键参数来限制告警频率:

{
    "pm2-health": {
        // 保留原有SMTP、收件人等配置
        "smtp": { /* ... */ },
        "mailTo": "",
        "replyTo": "",
        
        // 批量聚合配置(保留原有设置)
        "batchPeriodM": 5,
        "batchMaxMessages": 1,
        
        // 新增:设置事件冷却时间,同一事件5分钟内仅触发一次告警
        "eventCoolDownM": 5,
        
        // 确保仅监听必要事件,避免冗余触发
        "events": ["exit"],
        
        // 关闭单独的消息告警(若告警主要来自exit事件)
        "messages": false,
        
        // 开启异常聚合,合并同周期内的同类异常
        "aggregateExceptions": true,
        
        // 保留其他原有配置
        "exceptions": true,
        "messageExcludeExps": [],
        "metric": {},
        "metricIntervalS": 60,
        "aliveTimeoutS": 300,
        "addLogs": true,
        "appsExcluded": [],
        "snapshot": { /* ... */ }
    }
}

3. 优化PM2应用重启策略,减少崩溃触发次数

在ecosystem.config.js中添加重启限制,避免应用短时间内反复崩溃:

{
    "apps":[
        {
            "name":"Server",
            "script":"server.js",
            "exec_mode":"fork",
            "merge_logs":true,
            "cwd":"/home/ubuntu/code/apps/server",
            "error_file":"/var/log/pm2/service/server-error.log",
            "out_file":"/var/log/pm2/service/server-out.log",
            // 崩溃后延迟3秒重启,避免瞬间重复崩溃
            "restart_delay": 3000,
            // 5分钟内最多重启5次,超过则停止应用(避免无限循环)
            "max_restarts": 5,
            "env":{
                "NODE_ENV":"production",
                "PORT" : "5002"
            }
        }
    ]
}

4. 验证配置生效

修改完成后,重启PM2和pm2-health模块:

pm2 restart all
pm2 reload pm2-health

手动模拟应用崩溃(比如pm2 delete Server再重启后触发崩溃),观察5分钟内是否仅收到1条告警。

内容的提问来源于stack exchange,提问作者Anjali Rajput

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:24:52