Fork me on GitHub

通过shell脚本和企业微信实现报警功能(完整版)

使用微信实现的服务器监控报警的完整脚本

最终效果如图(GIF太大了 就截了两张图)
1.png

2.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/sh

expireTime=7200

dbFile="db.json"

corpid=xxx
corpsecret=xxx

touser="xxx"
toparty="xxx"
agentid="xxx"
content="服务器快崩了,你还在这里吟诗作对?"

# s 为秒,m 为 分钟,h 为小时,d 为日数
interval=1s

## 发送报警信息
sendMsg(){
if [ ! -f "$dbFile" ];then
touch "$dbFile"
fi

# 获取token
req_time=`jq '.req_time' $dbFile`
current_time=$(date +%s)
refresh=false
if [ ! -n "$req_time" ];then
refresh=true
else
if [ $((current_time-req_time)) -gt $expireTime ];then
refresh=true
fi
fi
if $refresh ;then
req_access_token_url=https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid\&corpsecret=$corpsecret
access_res=$(curl -s -G $req_access_token_url | jq -r '.access_token')

## 保存文件
echo "" > $dbFile
echo -e "{" > $dbFile
echo -e "\t\"access_token\":\"$access_res\"," >> $dbFile
echo -e "\t\"req_time\":$current_time" >> $dbFile
echo -e "}" >> $dbFile

echo ">>>刷新Token成功<<<"
fi

## 发送消息
msg_body="{\"touser\":\"$touser\",\"toparty\":\"$toparty\",\"msgtype\":\"text\",\"agentid\":$agentid,\"text\":{\"content\":\"$content\"}}"
access_token=`jq -r '.access_token' $dbFile`
req_send_msg_url=https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$access_token
req_msg=$(curl -s -H "Content-Type: application/json" -X POST -d $msg_body $req_send_msg_url | jq -r '.errmsg')

echo "触发报警发送动作,返回信息为:" $req_msg

}


loopMonitor(){
echo 'loop'
flag=`uptime | awk '{printf "%.2f\n", $11 "\n"}'`


# 0.7 这个阈值可以视情况而定,如cpu核数为n,则可以设置为0.7 * n 具体视情况而定
c=$(echo "$flag > 0.7" | bc)

echo ">>>>>>>>>>>>>>>>>>`date`<<<<<<<<<<<<<<<<<<"
free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
df -h | awk '$NF=="/"{printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5}'
uptime | awk '{printf "CPU Load: %.2f\n", $11 "\n"}'
echo ">>>>>>>>>>>>>>>>>>end<<<<<<<<<<<<<<<<<<"

if [ $c -eq 1 ];then
sendMsg
fi
}


while true; do
loopMonitor
sleep $interval
done

让CPU达到100%的脚本

1
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done

欢迎提PR

CSDN:http://blog.csdn.net/qqhjqs?viewmode=list
博客:http://vector4wang.tk/
简书:https://www.jianshu.com/u/223a1314e818
Github:https://github.com/vector4wang
Gitee:https://gitee.com/backwxc

-------------本文结束感谢您的阅读-------------