如何将生产服务器告警日志推送至Slack频道实现实时故障通知
实现生产服务器告警日志推送至Slack频道的方案
一、前期准备:创建Slack Webhook
- 登录目标Slack团队,进入指定频道的「设置」-「集成」选项
- 添加「Incoming WebHooks」应用,生成专属Webhook URL并保存(后续所有告警推送都会用到这个地址)
二、针对不同告警场景的落地实现
1. CPU负载过高告警
通过系统工具+定时脚本实现实时检测:
- 编写Shell脚本
check_cpu.sh:
#!/bin/bash # 获取1分钟内CPU平均使用率 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}') # 设定告警阈值(示例为90%) THRESHOLD=90 if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then # 推送告警至Slack curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"⚠️ 生产服务器CPU负载过高,当前使用率:${CPU_USAGE}%\"}" YOUR_SLACK_WEBHOOK_URL fi
- 配置
crontab定时执行,比如每分钟检测一次:
* * * * * /path/to/check_cpu.sh >> /var/log/cpu_alarm.log 2>&1
2. 服务器崩溃/进程异常告警
两种可靠实现方式:
方式一:定时进程检测脚本
编写check_process.sh:
#!/bin/bash PROCESS_NAME="你的应用进程名" if ! pgrep -x "$PROCESS_NAME" > /dev/null; then curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"🚨 生产服务器应用进程[$PROCESS_NAME]已崩溃,请立即排查!\"}" YOUR_SLACK_WEBHOOK_URL fi
- 通过
crontab每分钟执行一次监控
方式二:Systemd服务监控(更稳定)
创建应用的systemd服务文件/etc/systemd/system/your_app.service:
[Unit] Description=生产环境应用服务 [Service] ExecStart=/path/to/your/application Restart=on-failure # 进程停止时推送告警 ExecStopPost=/bin/bash -c 'curl -X POST -H "Content-type: application/json" --data "{\"text\":\"🚨 应用进程已停止,退出码:$EXIT_CODE\"}" YOUR_SLACK_WEBHOOK_URL' [Install] WantedBy=multi-user.target
3. API错误告警
方式一:代码埋点(直接在应用中触发)
以Node.js/Express框架为例,在全局错误捕获中添加Slack推送:
// 捕获未处理的全局异常 process.on('uncaughtException', (err) => { const slackMsg = { text: `🚨 API发生未捕获异常:${err.message}\n堆栈片段:${err.stack.slice(0, 500)}` }; fetch('YOUR_SLACK_WEBHOOK_URL', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(slackMsg) }); }); // 捕获HTTP 5xx错误 app.use((err, req, res, next) => { if (err.statusCode >= 500) { const slackMsg = { text: `⚠️ API出现5xx错误\n请求路径:${req.path}\n错误信息:${err.message}` }; fetch('YOUR_SLACK_WEBHOOK_URL', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(slackMsg) }); } res.status(err.statusCode || 500).send('服务器内部错误'); });
方式二:日志文件监控
如果API错误日志输出到指定文件(如/var/log/api_errors.log),用tail实时监控并推送:
#!/bin/bash tail -F /var/log/api_errors.log | while read LINE; do curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"⚠️ API错误日志:${LINE}\"}" YOUR_SLACK_WEBHOOK_URL done
三、规模化监控可选方案(多服务器场景)
如果有多台生产服务器,推荐用Prometheus+Grafana+Alertmanager组合:
- 用Node Exporter采集服务器CPU、内存等硬件指标,用自定义Exporter采集API运行指标
- 在Prometheus中配置告警规则(如CPU使用率>90%持续1分钟触发告警)
- 配置Alertmanager,通过Webhook将告警推送到Slack,可自定义告警模板实现更丰富的通知内容
四、告警验证
- 手动触发测试:用
stress工具模拟CPU满载,或手动杀掉应用进程,检查Slack频道是否收到告警 - 查看脚本/服务日志,确认推送命令无执行错误
内容的提问来源于stack exchange,提问作者Daxesh Italiya
相关产品推荐
相关产品推荐

