UNPKG

pm2-slack-monitor

Version:

A CLI tool to monitor PM2 processes and send error logs to individual Slack channels via webhook.

45 lines (36 loc) 1.7 kB
const pm2 = require('pm2'); const slack = require('./slack'); const config = require('./config'); async function start() { const monitored = config.getProcesses(); pm2.connect(err => { if (err) { console.error('❌ PM2 connection error', err); process.exit(2); } pm2.launchBus((err, bus) => { console.log('✅ Monitoring PM2 process events...'); bus.on('process:event', data => { const { process, event } = data; const name = process.name; if (monitored.includes(name) && ['exit', 'error', 'exception'].includes(event)) { const webhook = config.getWebhookForProcess(name); if (!webhook) return; // Fetch process logs pm2.describe(name, (err, list) => { if (err || !list || list.length === 0) { return slack.send(`🚨 *${name}* had an event: *${event}* (but log fetch failed)`, webhook); } const info = list[0]; const lastLogs = ['exit', 'error', 'exception'].includes(event) ? info.pm2_env?.pm_err_log_path : info.pm2_env?.pm_out_log_path; const fs = require('fs'); const tail = fs.readFileSync(lastLogs, 'utf8').split('\n').slice(-10).join('\n'); const msg = `🚨 *${name}* triggered *${event}*\n\`\`\`\n${tail}\n\`\`\``; slack.send(msg, webhook); }); } }); }); }); } module.exports = { start };