公司官网突然打不开,客户开始投诉,你还在地铁上——这种事谁没遇到过?以前得连VPN、开终端、查日志,等你赶到公司,故障都自愈了。现在,把网络告警直接推到微信里,手机一震,就知道是交换机掉线、Nginx 502 还是 MySQL 连接池爆了。
为什么选微信?
不是因为微信多高级,而是它最接地气:不用装新App、不用记新账号、群聊/私聊/公众号全支持,运维同事、开发、值班经理都能第一时间看到。而且,微信消息打开率接近100%,比邮件强太多。
三步搞定微信告警(以Zabbix为例)
Zabbix 是很多中小团队的监控主力,它原生不支持微信,但加个脚本就成:
1. 注册一个企业微信,创建「告警机器人」,获取 Webhook 地址(形如:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx);
2. 在 Zabbix Server 上写个 Python 脚本 /usr/lib/zabbix/alertscripts/wechat.py:
#!/usr/bin/env python3
import requests
import sys
webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key"
data = {
"msgtype": "text",
"text": {
"content": f"【{sys.argv[1]}】\n{sys.argv[2]}\n时间:{sys.argv[3]}"
}
}
requests.post(webhook, json=data)
3. Zabbix 告警媒介里新增「微信通知」,类型选「脚本」,脚本名填 wechat.py,参数依次填:{ALERT.SENDTO}(其实是标题)、{ALERT.MESSAGE}、{EVENT.DATE} {EVENT.TIME}。
其他监控也能接
Prometheus + Alertmanager?配个 webhook_configs 指向一个中转服务就行;Nagios、Cacti、甚至自己写的 ping 脚本,只要能执行 shell 或发 HTTP 请求,就能往微信推。关键是把告警内容精简:别一股脑塞200行日志,只留关键字段——主机名、错误码、发生时间、建议动作(比如「重启 nginx.service」)。
小技巧防打扰
值班期间才推送?用企业微信「应用可见范围」+「审批流」控制权限;非工作时间只发严重告警?在脚本里加判断:if 'PROBLEM' in sys.argv[2] and '严重' in sys.argv[2]: send();想带链接直达 Grafana 图表?把 URL 放进 text.content 里,微信会自动识别成可点击链接。
说白了,微信不是万能胶,但它确实是目前把告警从服务器拉到人手边最快的一条路。试一次,你就会发现:原来半夜三点被电话叫醒,真没必要。