脚本监控服务状态 微信-钉钉告警
介绍说明
公司需要监控北京机房的一台服务器的服务状态,服务器在北京机房内网中,由于策略问题不能装agant和暴露端口。
通过脚本服务器的服务/端口状态,并告警通知到企业微信中
准备环境
服务器需要能访问外网
需要企业微信以下信息
CropID、Secret、agentid、User
微信
脚本内容
[root@shvm01 scripts]# cat wechat_alarm.sh #!/bin/bash ############################################ #通过企业微信接口发送服务状态到企业微信 #cnsre.cn 2020-4-8 V1 # #修改者:xxx #修改时间:2020-xx-xx #修改内容:修改内容描述 ############################################ #配置 TCP="80" ifconfig="eth0" #主机信息 Date=`date +%Y-%m-%d` Date_time=`date "+%Y-%m-%d--%H:%M:%S"` Host_name=`hostname` IP_addr=`ifconfig $ifconfig | grep "inet" |awk 'NR==1{ print $2}'` #监控项 Port_status=`netstat -lntup |grep -w "$TCP" |wc -l` #日志目录 if [ ! -d "/var/log/monitor_check" ]; then mkdir /var/log/monitor_check; fi Logs_file='/var/log/monitor_check' #微信接口 CropID='ww022bebbexuewenlong' Secret='RauJ_-t-LxBhfEN7g1sh4OhVB_vRxuewenlong' GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}') PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" Agentid="1000004" #添加多个收信人要以|分隔."user1|user2" senduser="xuewenlong" #01告警推送消息 if [ $Port_status -lt 1 ] then echo "$Date_time $TCP 端口 Down" >> $Logs_file/$Date.Port_status.log /usr/bin/curl --data-ascii '{ "touser": "'${senduser}'", "toparty": "2","msgtype": "text","agentid": "'${Agentid}'","text": {"content": "'${TCP}端口down,请尽快处理!'\n'故障时间:${Date_time}'\n'主机名称:${Host_name}'\n'IP地址:${IP_addr}'\n'${TCP}端口状态:${Port_status}'"}' $PURL else echo "$Date_time $TCP 端口 UP:$Port_status" >> $Logs_file/$Date.Port_status.log fi
日志展示
企业微信消息展示
钉钉
钉钉接口文档
#!/bin/bash ############################################ #通过钉钉监控服务可用性 #cnsre.cn 2020-4-10 V1 # #修改者:xxx #修改时间:2020-xx-xx #修改内容:修改内容描述 ############################################ #配置 TCP="80" ifconfig="eth0" user="xuewenlong" #主机信息 Date=`date +%Y-%m-%d` Date_time=`date "+%Y-%m-%d--%H:%M:%S"` Host_name=`hostname` IP_addr=`ifconfig $ifconfig | grep "inet" |awk 'NR==1{ print $2}'` #监控项 Port_status=`netstat -lntup |grep -w "$TCP" |wc -l` function SendMessageToDingding(){ #钉钉webhook Dingding_Url="https://oapi.dingtalk.com/robot/send?access_token=732b97ff63d6bce620025c3eb973ca39c668847260exuewenlong" #发送钉钉消息 curl "${Dingding_Url}" -H 'Content-Type: application/json' -d " { 'msgtype': 'text', 'text': {'content': '${TCP}端口down,请尽快处理!\n故障时间:${Date_time}\n主机名称:${Host_name}\nIP地址:${IP_addr}\n${TCP}端口状 态:${Port_status}\n'}, 'at': {'atMobiles': ['${user}' ], 'isAtAll': false} }" } if [ $Port_status -lt 1 ] then SendMessageToDingding fi