前言
大家好,这里是浩道linux,主要给大家分享linux、python、网络通信相关的IT知识平台。
今天浩道跟大家分享硬核监控干货,一文带大家学习系统监控相关知识及钉钉机器人告警脚本编写!
一、背景
当前不同的公司服务器较多,在项目开发、部署和演示过程多次遇到服务器无故宕机的情况,另外各服务器上部署的中间件也存在无故下线的情况,如果出现以上情况就特别棘手,而技术人员无法第一时间感知。
二、操作说明
1、检查服务器curl命令是否可用
(1)调用相关命令进行检查
#查看当前版本 curl--version #检查网站是否可达,若html显示在屏幕上则证明命令可用 curlhttp://www.baidu.com
(2)如果无法调用,则可参照文章进行curl安装
https://blog.csdn.net/qq_38215042/article/details/108768839
2、shell文件配置
(1)当前是将服务器CPU相关监听和中间件的Shell脚本文件分开设置的,主要是考虑到文件过大,在配置修改和定时命令执行时出现问题不好排查,执行时间也会比较耗时。
(2)在相应的shell脚本文件中,已经将配置可能要修改点作了标记,可根据实际情况进行针对性修改。
(3)在shell脚本修改完成后,查看脚本是否执行权限,没有则调用命令进行设置
#将sh文件添加可执行权限 chmodu+xdingtalk.sh #或设置全部权限 chmod777dingtalk.sh
(4)权限设置后,可先调用执行一下,检查下是否有格式问题
./dingtalk.sh或相对路径执行./home/admin/server/dingtalk.sh
3、定时任务创建
定时任务常用命令如下
crontab-u//设定特定用户的定时服务 crontab-l//列出当前用户定时服务内容 crontab-r//删除当前用户的定时服务 crontab-e//编辑当前用户的定时服务 在设定编辑之前都建议列出服务查看一下:crontab -l #对cron定时任务列表进行编辑 crontab-e #i进行修改,ESC键退出编辑,;wq保存并退出 #每五分钟执行一次 */5****shxx.sh #每半小时执行一次 */30****shxx.sh #每天的15时25分执行一次 2515***shxx.sh #中间件脚本文件 */5****sh/home/admin/server/dingtalk.sh #服务器脚本文件 */5****sh/home/admin/server/dingtalk_server.sh
命令说明
4、定时任务执行情况检查
#进入定时任务log下 cd/var/log #查看定时任务是否调用 tail-fcron
三、Shell配置说明
1、服务器CPU、内存、磁盘监控脚本
#!/bin/bash #【配置1】要@的人员手机号码,此处的手机号必须和钉钉上的一致 user="17858888888" #user1="13888888888" #user2="XXXX" #【配置2】网卡配置(可选),此处配置的是想要展示的ip地址,使用ifconfig查看inet对应的ip 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}'` #获取cpu使用率 cpuUsage=`top-b-n1|fgrep"Cpu(s)"|tail-1|awk-F'id,''{split($1,vs,",");v=vs[length(vs)];sub(/s+/,"",v);sub(/s+/,"",v);printf"%d",100-v;}'` #获取磁盘使用率 data_name="/" diskUsage=`df-h|grep-w$data_name|awk-F'[%]+''{print$5}'` #统计内存使用率 mem_used_persent=`free-m|awk-F'[:]+''NR==2{printf"%d",($2-$7)/$2*100}'` #【配置3】钉钉webhook Dingding_Url="https://oapi.dingtalk.com/robot/send?access_token=xxxxxx" #【配置4】服务监听-发送钉钉消息,消息内容可修改 #at中atMobiles为数组结构,可添加上面配置的user1、user2等,可根据不同的业务@指定的人员,isAtAll是否@所有人设置 functionSendServerMessageToDingding(){ curl${Dingding_Url}-H'Content-Type:application/json'-d'{ "msgtype":"text", "text":{"content":"服务监控: 服务器资源耗尽警告,请尽快处理! 巡查时间:'${Date_time}' IP地址:'${IP_addr}' 资源状况如下: 【CPU可用:'${cpuUsage}'%】 【磁盘使用率:'${diskUsage}'%】 【内存使用率:'${mem_used_persent}'%】"}, "at":{"atMobiles":['${user}'],"isAtAll":false} }' } #【配置5】此处可根据服务器的实际情况,进行阈值调整 functionserverCheck(){ if[["$cpuUsage">75]]||[["$diskUsage">90]]||[["$mem_used_persent">90]]; then SendServerMessageToDingding fi } serverCheck
2、中间件监控脚本
#!/bin/bash #【配置1】中间件端口设置 Port_Nginx="80" Port_MySQL="3306" #...此处省略多个端口,可添加该服务器上的其他中间件配置 #Port_Nacos="xxx" #Port_ElesticSearch="xxx" #【配置2】网卡配置(可选),此处配置的是想要展示的ip地址,使用ifconfig查看inet对应的ip ifconfig="eth0" #【配置3】要@的人员手机号码,此处的手机号必须和钉钉上的一致 user="17858888888" #user1="13888888888" #user2="XXXX" #主机信息 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}'` #【配置4】中间件监控项 Nginx_status=`netstat-lntup|grep-w"$Port_Nginx"|wc-l`':Nginx' MySQL_status=`netstat-lntup|grep-w"$Port_MySQL"|wc-l`':MySQL' #...此处省略多项,按照自己需求配置即可,同上 #flink_status=`netstat-lntup|grep-w"$Port_flink"|wc-l`':flink' #【配置5】钉钉webhook,此处为添加的钉钉机器人webhook,当前为已经添加使用的webhook Dingding_Url="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxx" #【配置6】应用挂机-发送钉钉消息,消息内容可修改 #at中atMobiles为数组结构,可添加上面配置的user1、user2等,可根据不同的业务@指定的人员,isAtAll是否@所有人设置 functionSendDownMessageToDingding(){ curl-s"${Dingding_Url}"-H'Content-Type:application/json'-d" { 'msgtype':'text', 'text':{'content':'服务监控 $1服务down,请尽快处理! 巡查时间:${Date_time} IP地址:${IP_addr} '}, 'at':{'atMobiles':['${user}'],'isAtAll':false} }" } #【配置7】应用恢复-发送钉钉消息,消息内容可修改 #at中atMobiles为数组结构,可添加上面配置的user1、user2等,可根据不同的业务@指定的人员,isAtAll是否@所有人设置 functionSendUpMessageToDingding(){ curl-s"${Dingding_Url}"-H'Content-Type:application/json'-d" { 'msgtype':'text', 'text':{'content':'服务监控 $1服务已恢复正常运行! 巡查时间:${Date_time} IP地址:${IP_addr} '}, 'at':{'atMobiles':['${user}'],'isAtAll':false} }" } #【配置8】logpath,将消息记录到指定日志目录 log_path="/home/logs" #【配置9】遍历--此处要配置【中间件】服务的信息,根据情况在in{$xxx,$yyy.....}中进行添加中间件 foriin{$Nginx_status,$MySQL_status} do statcode=`echo$i|awk-F':''{print$1}'` name=`echo$i|awk-F':''{print$2}'` old_statcode=`head-n1${log_path}/${name}.log` if[$statcode-lt1] then if[$old_statcode-lt1] thenecho"[ERROR]$nameisstillstopped!Status_code=$statcode" else echo"[ERROR]$nameisstopped!Status_code=$statcode" SendDownMessageToDingding$name fi else if[$old_statcode-ge1] thenecho"[INFO]$nameisstillrunningnormally!Status_code=$statcode" else echo"[INFO]$namereturnedtonormalfunction!Status_code=$statcode" SendUpMessageToDingding$name fi fi echo$statcode>${log_path}/${name}.log done
审核编辑:汤梓红
-
机器人
+关注
关注
210文章
28266浏览量
206722 -
系统监控
+关注
关注
0文章
18浏览量
10887 -
脚本
+关注
关注
1文章
387浏览量
14843
原文标题:【监控肝货】系统监控及钉钉机器人告警脚本
文章出处:【微信号:浩道linux,微信公众号:浩道linux】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论