企业微信消息推送服务器故障实时告警通知配置
服务器出现故障时,如果没人立刻知道,一个小问题可能拖成大事故。
通过企业微信的消息推送功能,配合一个简单的Shell脚本,就能让故障告警实时发到你手机上。
下面按零基础可操作的方式,一步步讲清楚怎么配。
准备工作:创建企业微信群机器人
告警通知依赖企业微信的“群机器人”能力。
你需要先有一个企业微信账号,然后创建一个群聊(可以只拉自己一个人),接着在群聊中添加机器人。
操作路径:打开企业微信 → 进入群聊 → 点击右上角“… → 群机器人 → 添加机器人 → 给机器人起名(比如“服务器告警”)→ 确定 → 复制Webhook地址。
这个Webhook地址是一个URL,格式类似 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?。
key=xxxx
保存好,后面脚本里要用。
核心配置:编写服务器监控脚本
监控脚本的作用是定期检查服务器关键指标,当指标异常时,通过curl命令把告警消息发送到企业微信。
创建一个脚本文件,比如 /opt/server_monitor.sh,内容如下:
#!/bin/bash
# 企业微信机器人Webhook地址
WEBHOOK_URL="你的Webhook地址"
# 检测CPU使用率(超过90%告警)
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "$CPU_USAGE > 90" | bc -l) )); then
curl -s -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"⚠️ CPU告警:使用率已超过90%,当前:'$CPU_USAGE'%"}}' $WEBHOOK_URL
fi
# 检测内存使用率(超过90%告警)
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}' | cut -d'.' -f1)
if [ $MEM_USAGE -gt 90 ]; then
curl -s -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"⚠️ 内存告警:使用率已超过90%,当前:'$MEM_USAGE'%"}}' $WEBHOOK_URL
fi
# 检测根分区磁盘使用率(超过85%告警)
DISK_USAGE=$(df -h / | awk 'NR==2{print $5}' | cut -d'%' -f1)
if [ $DISK_USAGE -gt 85 ]; then
curl -s -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"⚠️ 磁盘告警:根分区使用率已超过85%,当前:'$DISK_USAGE'%"}}' $WEBHOOK_URL
fi
# 检测关键进程是否运行(以nginx为例)
if ! pgrep -x nginx > /dev/null; then
curl -s -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"❌ 进程告警:nginx服务未运行"}}' $WEBHOOK_URL
fi
保存后,赋予执行权限:chmod +x /opt/server_monitor.sh。
这个脚本默认只做检查,你要根据自己的服务器环境调整阈值和检测项(比如MySQL、Java进程等)。
避坑与优化:让告警稳定可靠
Webhook地址不要泄露
Webhook地址就像群聊的一个“钥匙”,任何人知道后都能往群里发消息。
不要把地址写在Git仓库或公开论坛中。
建议放在/opt之类的非Web可访问目录。
消息频率限制
企业微信机器人单条消息限制2KB,每分钟最多发20条。
如果脚本检测项多且都在同一时间触发,可能丢消息。
可以加个“告警去重”逻辑:比如用临时文件记录上次告警状态,避免重复发送。
脚本定时执行
手动运行一次 bash /opt/server_monitor.sh 测试没问题后,需要让它定期自动跑。
编辑crontab:crontab -e,添加一行:
*/5 * * * * /opt/server_monitor.sh
这样每5分钟检查一次。
如果服务器故障持续,每次检查都会发告警,请酌情调整间隔。
脚本执行日志
建议在脚本开头添加日志记录,方便排查:exec >> /var/log/server_monitor.log 2>&1。
这样每次运行的结果都会写入日志,查错更容易。
效果验证:手动触发告警
执行脚本,人工制造一个故障来验证。
例如故意停止一个监控的进程:
systemctl stop nginx
然后马上运行脚本:bash /opt/server_monitor.sh。
正常会在几秒内收到企业微信群的告警消息。
你也可以临时把CPU阈值调低(比如改成10%),然后运行大型任务(dd if=/dev/zero of=/dev/null &),观察是否触发CPU告警。
告警消息格式为文本,内容清晰明了。
收到消息后,意味着整套通知链路已通。
如果你在配置过程中遇到什么问题,可以先检查脚本是否可执行、Webhook地址是否正确、crontab服务是否运行(systemctl status cron)。
按照本文步骤操作,大多数情况下都能正常工作。