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

如何将生产服务器告警日志推送至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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:58:12