运维同学常写的是Shell脚本:日志巡检、磁盘清理、定时备份、端口监控。这些脚本出问题时,直接的方式就是用一行curl调用互亿无线预警通知接口,把告警短信或语音发出去。Shell接入不依赖任何语言环境,服务器自带curl即可。本文给出可直接…
运维同学常写的是Shell脚本:日志巡检、磁盘清理、定时备份、端口监控。这些脚本出问题时,直接的方式就是用一行curl调用互亿无线预警通知接口,把告警短信或语音发出去。Shell接入不依赖任何语言环境,服务器自带curl即可。本文给出可直接放进脚本的命令与函数。
Shell接入的接口与参数
短信接口 https://api.ihuyi.com/sms/Submit.json ,语音接口 https://api.ihuyi.com/voice/vm 。用curl -d以表单方式POST参数account、password、mobile、content。
- account:APIID,password:APIKEY;
- mobile:接收手机号;
- content:告警内容;
- 返回JSON中code=2为提交成功。
一行curl发告警
下面这行命令直接发送短信告警,可放在脚本的失败分支里:
curl -s -X POST https://api.ihuyi.com/sms/Submit.json \
-d "account=你的APIID" \
-d "password=你的APIKEY" \
-d "mobile=13800138000" \
-d "content=定时备份脚本backup.sh执行失败,请尽快查看日志"
更优雅的做法是封装成一个shell函数,在脚本source后随时调用:
notify_sms() {
curl -s -X POST https://api.ihuyi.com/sms/Submit.json \
-d "account=$IHUYI_APIID" \
-d "password=$IHUYI_APIKEY" \
-d "mobile=$1" \
-d "content=$2"
}
# 用法:备份失败时调用
notify_sms "13800138000" "数据库备份失败,主机db-01"
APIID与APIKEY通过环境变量IHUYI_APIID注入脚本,避免写死。
Shell接入注意事项
- content含空格与中文时要用双引号包裹,必要时用curl --data-urlencode;
- curl加--max-time 10,避免网络问题让脚本卡住;
- 密钥放在~/.bashrc或受保护的配置文件里,不写入共享脚本仓库;
- 语音告警把URL换成/voice/vm即可,参数相同。
带返回码判断的Shell脚本
巡检脚本通常用Shell编写,下面这个版本加上了返回JSON解析与失败提示,可直接放进crontab:
#!/bin/bash
APIID="你的APIID"
APIKEY="你的APIKEY"
MOBILE="13800138000"
CONTENT="服务器内存使用率超过90%,请尽快处理"
RESP=$(curl -s -X POST https://api.ihuyi.com/sms/Submit.json \
-d "account=${APIID}" \
-d "password=${APIKEY}" \
-d "mobile=${MOBILE}" \
--data-urlencode "content=${CONTENT}" \
--max-time 10)
echo "返回: ${RESP}"
echo "${RESP}" | grep -q '"code":2' && echo "提交成功" || echo "提交失败,请查看返回"
运行方式与注意点
- 用--data-urlencode处理中文content,避免手工编码出错;
- --max-time限制超时,避免脚本卡死在告警环节;
- APIID与APIKEY建议从配置文件读取,不要写死在脚本里;
- 用grep判断code=2即可满足简单场景,复杂解析可配合jq工具。
常见报错排查
- curl: command not found:确认系统已安装curl;
- 返回空:检查网络与DNS,加-v参数查看握手过程;
- 返回code非2:打印RESP,按msg定位;
- 语音通道:URL换成 https://api.ihuyi.com/voice/vm ,参数相同。
一行curl就能让运维脚本具备主动告警能力。前往注册免费试用领取测试额度。