服務器環境:centos7.2 64位 tomcat8.5.6
tomcat 監控功能共需要兩個腳本,如下:
initMonitor.sh
#!/bin/sh #初始化監控腳本相關變量 export tomcat_name=apache-tomcat-8.5.6 export tomcat_home=/usr/local/apache-tomcat-8.5.6 #測試接口訪問地址 export webUrl=127.0.0.1:8080/yanglao/sysUserController/sysTest #監控腳本日志路徑 export tomcatMonitorLog=/tmp/yanglao/tomcatMonitor.log export email_address=ruixin_yu@asdc.com.cn #執行tomcat監控腳本 #獲取當前腳本所在目錄 baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd) $baseDirForScriptSelf/tomcatMonitor.sh
tomcatMonitor.sh
#!/bin/sh # 獲取tomcat進程ID /usr/local/tomcat_ds_api TomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}') # tomcat啟動程序 StartTomcat=$tomcat_home/bin/startup.sh # 日志輸出 if [ -f $tomcatMonitorLog ]; then echo "日志文件已創建" else echo "日志文件為創建,馬上創建!" touch $tomcatMonitorLog fi #tomcatMonitorLog=/tmp/yanglao/tomcatMonitor.log TryConnection(){ echo $tomcat_name echo '$tomcat_name' TryTomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}') echo "[info]開始重新查看tomcat進程:$TryTomcatID...[$(date +'%F %H:%M:%S')]" if [[ $TryTomcatID ]];then echo "[info]當前tomcat進程ID為:$TryTomcatID,繼續重新檢測接口..." # 檢測是否啟動成功(成功的話接口會返回狀態"200") TomcatServiceCodeTry=$(curl -s -m 10 --connect-timeout 10 $webUrl -w %{http_code}) if [[ $TomcatServiceCodeTry -eq 200 ]];then echo "[info]系統接口返回碼為$TomcatServiceCodeTry,tomcat重啟成功,訪問系統接口正常......" echo "[error]發送告警關閉郵件" echo "tomcat重啟成功,訪問系統接口正常 [$(date +'%F %H:%M:%S')]"|mail -s "智能養老項目告警關閉" $email_address else sleep 30 TryConnection fi else sleep 30 TryConnection fi } Monitor() { echo "[info]開始監控tomcat...[$(date +'%F %H:%M:%S')]" if [[ $TomcatID ]];then # 這里判斷TOMCAT進程是否存在 echo "[info]當前tomcat進程ID為:$TomcatID,繼續檢測系統接口..." # 檢測是否啟動成功(成功的話接口會返回狀態"200") TomcatServiceCode=$(curl -s -m 10 --connect-timeout 10 $webUrl -w %{http_code}) if [[ $TomcatServiceCode -eq 200 ]];then echo "[info]接口返回碼為$TomcatServiceCode,tomcat運行正常,訪問系統接口正常......" else echo "[error]訪問系統接口出錯,請注意......狀態碼為$TomcatServiceCode" echo "[error]訪問系統接口出錯,開始重啟tomcat" echo "[error]發送告警開啟郵件" echo "由於訪問系統接口出錯,tomcat開始自動重啟 [$(date +'%F %H:%M:%S')]"|mail -s "智能養老項目告警開啟" $email_address kill -9 $TomcatID # 殺掉原tomcat進程 sleep 3 rm -rf $TomcatCache # 清理tomcat緩存 $StartTomcat sleep 3m TryConnection #檢查是否啟動成功 fi else echo "[error]tomcat進程不存在!tomcat開始自動重啟..." echo "[info]$StartTomcat,請稍候......" echo "[error]發送告警開啟郵件" echo "由於tomcat進程不存在 tomcat開始自動重啟 [$(date +'%F %H:%M:%S')]"|mail -s "智能養老項目告警開啟" $email_address rm -rf $TomcatCache $StartTomcat sleep 3m TryConnection #檢查是否啟動成功 fi echo "------------------------------" } Monitor>>$tomcatMonitorLog
前期准備:
- 安裝crontab
- 配置郵件發送環境
腳本介紹:
- initMonitor.sh中可配置腳本中使用的變量,除參數配置外,此腳本中將調用tomcatMonitor.sh,此腳本再次調用的原因是export所設置的變量,僅在該shell以及它的子shell中有效。
- tomcatMonitor.sh為tomcat監控的業務邏輯腳本
使用說明:
1.將initMonitor.sh,tomcatMonitor.sh兩個腳本放入服務器同級目錄下(如:/usr/bin/yanglao)
2.如需配置腳本對應變量,請編輯initMonitor.sh,不需要更改的可跳過此步
3.使用crontab設置定時執行initMonitor.sh:
1)# crontab -e
2 )插入/5 * * * /usr/bin/yanglao/initMonitor.sh
3)#systemctl reload crond
#systemctl restart crond
經過以上操作,腳本即可運行,開始檢測tomcat。
檢測范圍:tomcat進程關閉 , 系統接口無法訪問
告警動作:發送郵件至initMonitor.sh設置的郵件,並重啟tomcat。
重啟后對tomcat重新進行檢測,檢測運行正常后,發送告警關閉郵件http://www.itwendao.com/article/detail/153863.html
c:\>curl -sL -w
"%{http_code}"
"www.baidu.com"
-o
/dev/null
200
我是狀態碼,還好不是返回250
c:\>curl -sL -w
"我是狀態碼:%{http_code}"
www.baidu.com -o
/dev/null
我是狀態碼:200
##從apache中剔除此節點
sed -i 's/worker.controller.balance_workers=tomcat1,tomcat2,tomcat3/worker.controller.balance_workers=tomcat2,tomcat3/g' /usr/local/apache2/conf/workers.properties
/usr/local/apache2/bin/apachectl graceful