前言
大家好,這里是浩道linux,主要給大家分享linux、python、網(wǎng)絡(luò)通信相關(guān)的IT知識(shí)平臺(tái)。
今天浩道跟大家分享硬核監(jiān)控干貨,一文帶大家學(xué)習(xí)系統(tǒng)監(jiān)控相關(guān)知識(shí)及釘釘機(jī)器人告警腳本編寫!
一、背景
當(dāng)前不同的公司服務(wù)器較多,在項(xiàng)目開(kāi)發(fā)、部署和演示過(guò)程多次遇到服務(wù)器無(wú)故宕機(jī)的情況,另外各服務(wù)器上部署的中間件也存在無(wú)故下線的情況,如果出現(xiàn)以上情況就特別棘手,而技術(shù)人員無(wú)法第一時(shí)間感知。
二、操作說(shuō)明
1、檢查服務(wù)器curl命令是否可用
(1)調(diào)用相關(guān)命令進(jìn)行檢查
#查看當(dāng)前版本 curl--version #檢查網(wǎng)站是否可達(dá),若html顯示在屏幕上則證明命令可用 curlhttp://www.baidu.com
(2)如果無(wú)法調(diào)用,則可參照文章進(jìn)行curl安裝
https://blog.csdn.net/qq_38215042/article/details/108768839
2、shell文件配置
(1)當(dāng)前是將服務(wù)器CPU相關(guān)監(jiān)聽(tīng)和中間件的Shell腳本文件分開(kāi)設(shè)置的,主要是考慮到文件過(guò)大,在配置修改和定時(shí)命令執(zhí)行時(shí)出現(xiàn)問(wèn)題不好排查,執(zhí)行時(shí)間也會(huì)比較耗時(shí)。
(2)在相應(yīng)的shell腳本文件中,已經(jīng)將配置可能要修改點(diǎn)作了標(biāo)記,可根據(jù)實(shí)際情況進(jìn)行針對(duì)性修改。
(3)在shell腳本修改完成后,查看腳本是否執(zhí)行權(quán)限,沒(méi)有則調(diào)用命令進(jìn)行設(shè)置
#將sh文件添加可執(zhí)行權(quán)限 chmodu+xdingtalk.sh #或設(shè)置全部權(quán)限 chmod777dingtalk.sh
(4)權(quán)限設(shè)置后,可先調(diào)用執(zhí)行一下,檢查下是否有格式問(wèn)題
./dingtalk.sh或相對(duì)路徑執(zhí)行./home/admin/server/dingtalk.sh
3、定時(shí)任務(wù)創(chuàng)建
定時(shí)任務(wù)常用命令如下
crontab-u//設(shè)定特定用戶的定時(shí)服務(wù) crontab-l//列出當(dāng)前用戶定時(shí)服務(wù)內(nèi)容 crontab-r//刪除當(dāng)前用戶的定時(shí)服務(wù) crontab-e//編輯當(dāng)前用戶的定時(shí)服務(wù) 在設(shè)定編輯之前都建議列出服務(wù)查看一下:crontab -l #對(duì)cron定時(shí)任務(wù)列表進(jìn)行編輯 crontab-e #i進(jìn)行修改,ESC鍵退出編輯,;wq保存并退出 #每五分鐘執(zhí)行一次 */5****shxx.sh #每半小時(shí)執(zhí)行一次 */30****shxx.sh #每天的15時(shí)25分執(zhí)行一次 2515***shxx.sh #中間件腳本文件 */5****sh/home/admin/server/dingtalk.sh #服務(wù)器腳本文件 */5****sh/home/admin/server/dingtalk_server.sh
命令說(shuō)明
4、定時(shí)任務(wù)執(zhí)行情況檢查
#進(jìn)入定時(shí)任務(wù)log下 cd/var/log #查看定時(shí)任務(wù)是否調(diào)用 tail-fcron
三、Shell配置說(shuō)明
1、服務(wù)器CPU、內(nèi)存、磁盤監(jiān)控腳本
#!/bin/bash #【配置1】要@的人員手機(jī)號(hào)碼,此處的手機(jī)號(hào)必須和釘釘上的一致 user="17858888888" #user1="13888888888" #user2="XXXX" #【配置2】網(wǎng)卡配置(可選),此處配置的是想要展示的ip地址,使用ifconfig查看inet對(duì)應(yīng)的ip ifconfig="eth0" #主機(jī)信息 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}'` #統(tǒng)計(jì)內(nèi)存使用率 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】服務(wù)監(jiān)聽(tīng)-發(fā)送釘釘消息,消息內(nèi)容可修改 #at中atMobiles為數(shù)組結(jié)構(gòu),可添加上面配置的user1、user2等,可根據(jù)不同的業(yè)務(wù)@指定的人員,isAtAll是否@所有人設(shè)置 functionSendServerMessageToDingding(){ curl${Dingding_Url}-H'Content-Type:application/json'-d'{ "msgtype":"text", "text":{"content":"服務(wù)監(jiān)控: 服務(wù)器資源耗盡警告,請(qǐng)盡快處理! 巡查時(shí)間:'${Date_time}' IP地址:'${IP_addr}' 資源狀況如下: 【CPU可用:'${cpuUsage}'%】 【磁盤使用率:'${diskUsage}'%】 【內(nèi)存使用率:'${mem_used_persent}'%】"}, "at":{"atMobiles":['${user}'],"isAtAll":false} }' } #【配置5】此處可根據(jù)服務(wù)器的實(shí)際情況,進(jìn)行閾值調(diào)整 functionserverCheck(){ if[["$cpuUsage">75]]||[["$diskUsage">90]]||[["$mem_used_persent">90]]; then SendServerMessageToDingding fi } serverCheck
2、中間件監(jiān)控腳本
#!/bin/bash #【配置1】中間件端口設(shè)置 Port_Nginx="80" Port_MySQL="3306" #...此處省略多個(gè)端口,可添加該服務(wù)器上的其他中間件配置 #Port_Nacos="xxx" #Port_ElesticSearch="xxx" #【配置2】網(wǎng)卡配置(可選),此處配置的是想要展示的ip地址,使用ifconfig查看inet對(duì)應(yīng)的ip ifconfig="eth0" #【配置3】要@的人員手機(jī)號(hào)碼,此處的手機(jī)號(hào)必須和釘釘上的一致 user="17858888888" #user1="13888888888" #user2="XXXX" #主機(jī)信息 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】中間件監(jiān)控項(xiàng) Nginx_status=`netstat-lntup|grep-w"$Port_Nginx"|wc-l`':Nginx' MySQL_status=`netstat-lntup|grep-w"$Port_MySQL"|wc-l`':MySQL' #...此處省略多項(xiàng),按照自己需求配置即可,同上 #flink_status=`netstat-lntup|grep-w"$Port_flink"|wc-l`':flink' #【配置5】釘釘webhook,此處為添加的釘釘機(jī)器人webhook,當(dāng)前為已經(jīng)添加使用的webhook Dingding_Url="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxx" #【配置6】應(yīng)用掛機(jī)-發(fā)送釘釘消息,消息內(nèi)容可修改 #at中atMobiles為數(shù)組結(jié)構(gòu),可添加上面配置的user1、user2等,可根據(jù)不同的業(yè)務(wù)@指定的人員,isAtAll是否@所有人設(shè)置 functionSendDownMessageToDingding(){ curl-s"${Dingding_Url}"-H'Content-Type:application/json'-d" { 'msgtype':'text', 'text':{'content':'服務(wù)監(jiān)控 $1服務(wù)down,請(qǐng)盡快處理! 巡查時(shí)間:${Date_time} IP地址:${IP_addr} '}, 'at':{'atMobiles':['${user}'],'isAtAll':false} }" } #【配置7】應(yīng)用恢復(fù)-發(fā)送釘釘消息,消息內(nèi)容可修改 #at中atMobiles為數(shù)組結(jié)構(gòu),可添加上面配置的user1、user2等,可根據(jù)不同的業(yè)務(wù)@指定的人員,isAtAll是否@所有人設(shè)置 functionSendUpMessageToDingding(){ curl-s"${Dingding_Url}"-H'Content-Type:application/json'-d" { 'msgtype':'text', 'text':{'content':'服務(wù)監(jiān)控 $1服務(wù)已恢復(fù)正常運(yùn)行! 巡查時(shí)間:${Date_time} IP地址:${IP_addr} '}, 'at':{'atMobiles':['${user}'],'isAtAll':false} }" } #【配置8】logpath,將消息記錄到指定日志目錄 log_path="/home/logs" #【配置9】遍歷--此處要配置【中間件】服務(wù)的信息,根據(jù)情況在in{$xxx,$yyy.....}中進(jìn)行添加中間件 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
審核編輯:湯梓紅
-
機(jī)器人
+關(guān)注
關(guān)注
210文章
27989瀏覽量
205540 -
系統(tǒng)監(jiān)控
+關(guān)注
關(guān)注
0文章
18瀏覽量
10875 -
腳本
+關(guān)注
關(guān)注
1文章
383瀏覽量
14792
原文標(biāo)題:【監(jiān)控肝貨】系統(tǒng)監(jiān)控及釘釘機(jī)器人告警腳本
文章出處:【微信號(hào):浩道linux,微信公眾號(hào):浩道linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論