1. 程式人生 > >tomcat監控指令碼(監控程序,測試介面,告警動作為傳送郵件)

tomcat監控指令碼(監控程序,測試介面,告警動作為傳送郵件)

伺服器環境: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 protected] #執行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

前期準備:

  1. 安裝crontab
  2. 配置郵件傳送環境

指令碼介紹:

  1. initMonitor.sh中可配置指令碼中使用的變數,除引數配置外,此指令碼中將呼叫tomcatMonitor.sh,此指令碼再次呼叫的原因是export所設定的變數,僅在該shell以及它的子shell中有效。
  2. 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重新進行檢測,檢測執行正常後,傳送告警關閉郵件

分界線———–更於2017.08.07

由於最近開發的產品總是莫名其妙掛掉(我懷疑是我關了忘啟動。。。),決定為該產品新增監控指令碼。由於產品是直接面對普通使用者的,為防止指令碼因為莫名其妙的問題反覆重啟專案,故將專案啟動部分去掉,改為只負責監控,不對專案執行任何操作。
另外本次遇到的另一個蛋疼的問題是阿里雲不允許通過smtp協議直接走25埠傳送郵件,我又是個Linux菜雞,實在沒找到linux通過smtp協議傳送郵件的方法,只能繞個路,通過java打jar包去傳送smtps協議的郵件了。。。。送上程式碼:

initMonitor-wechat.sh

#!/bin/sh
#初始化監控指令碼相關變數
export tomcat_name=/data/apache-tomcat-7.0.75
export tomcat_home=/data/apache-tomcat-7.0.75
#測試介面訪問地址
#export webUrl=http://www.test.com/test
#監控指令碼日誌路徑
export tomcatMonitorLog=/data/tomcatMonitor/log/tomcatMonitor-wechat.log
#export [email protected]
#執行tomcat監控指令碼

#獲取當前指令碼所在目錄
baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd)
echo $baseDirForScriptSelf
$baseDirForScriptSelf/tomcatMonitor-wechat.sh

tomcatMonitor-wechat.sh

#!/bin/sh
# 日誌輸出 
TomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')
if [ -f $tomcatMonitorLog ]; then
   echo "日誌檔案已建立"
else
   echo "日誌檔案為建立,馬上建立!"
    touch $tomcatMonitorLog
fi


Monitor() 
{
  echo "[info]開始監控$tomcat_home...[$(date +'%F %H:%M:%S')]"  
  if [[ $TomcatID ]];then # 這裡判斷TOMCAT程序是否存在  
    echo "[info]當前$tomcat_home程序ID為:$TomcatID,繼續檢測系統介面..."  
    # 檢測是否啟動成功(成功的話介面會返回狀態"200")  
    TomcatServiceCode=$(curl -s -m 10 --connect-timeout 10 http://wx.test.com/bxg/user/login -o /dev/null -w %{http_code})
    if [[ $TomcatServiceCode -eq 200 ]];then
        echo "[info]介面返回碼為$TomcatServiceCode,$tomcat_home.執行正常,訪問系統介面正常......"  
    else
        echo "[error]訪問系統接口出錯,請注意......狀態碼為$TomcatServiceCode"  

        echo "[error]傳送告警開啟郵件"  
        echo "訪問系統接口出錯[$(date +'%F %H:%M:%S')]"
        /data/jre/bin/java -jar /data/tomcatMonitor/lib/wechat.jar
        echo "訪問系統接口出錯[$(date +'%F %H:%M:%S')]"
    fi
   else
    echo "[error]$tomcat_home程序不存在!"  
    echo "[error]傳送告警開啟郵件"  
    echo "$tomcat_home程序不存在 [$(date +'%F %H:%M:%S')]"
    /data/jre/bin/java -jar /data/tomcatMonitor/lib/wechat.jar
    echo "$tomcat_home程序不存在 [$(date +'%F %H:%M:%S')]"
  fi
  echo "------------------------------" 
}
Monitor>>$tomcatMonitorLog

使用java通過smtps協議傳送Email的程式碼

wechat.jar


import java.security.Security;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendEmail {
     public static boolean sendMailBySSL(String email) throws AddressException, MessagingException{
          Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
          final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
          // Get a Properties object
          Properties props = new Properties();
          props.setProperty("mail.smtp.host", "smtp.test.com");
          props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
          props.setProperty("mail.smtp.socketFactory.fallback", "false");
          props.setProperty("mail.smtp.port", "465");
          props.setProperty("mail.smtp.socketFactory.port", "465");
          props.put("mail.smtp.auth", "true");
          final String username = "[email protected]";
          final String password = "test";
          Session session = Session.getDefaultInstance(props, new Authenticator(){
              protected PasswordAuthentication getPasswordAuthentication() {
                  return new PasswordAuthentication(username, password);
              }});

               // -- Create a new message --
          Message msg = new MimeMessage(session);

          // -- Set the FROM and TO fields --
          msg.setFrom(new InternetAddress("[email protected]"));
          msg.setRecipients(Message.RecipientType.TO, 
            InternetAddress.parse(email,false));
          msg.setSubject("後臺管理告警開啟");
          SimpleDateFormat formatter;
          formatter = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss z"); 
          msg.setText("後臺管理告警開啟 ["+formatter.format(new Date())+"],請及時處理");
          msg.setSentDate(new Date());
          Transport.send(msg);

          System.out.println("Message sent.");
          return true;
         }

   public static void main(String[] args) throws AddressException, MessagingException {
        sendMailBySSL("[email protected]");
    }
}

該程式碼塊引用了mail-1.4.jar

相關推薦

tomcat監控指令碼監控程序測試介面告警動作傳送郵件

伺服器環境:centos7.2 64位 tomcat8.5.6 tomcat 監控功能共需要兩個指令碼,如下: initMonitor.sh #!/bin/sh #初始化監控指令碼相關變數 export tomcat_name=apac

zabbix-自定義監控監控網站80連接數

zabbix 添加監控項 監控網站並發數 自定義監控項(監控網站80連接數) 需求:監控某臺web的80端口連接數,並出圖; 第一步:客戶端創建腳本: 客戶端定義腳本,並編輯zabbix-agent配置文件實現運行定義的腳本; 客戶端設置 vim /usr/local/sbin/estab.s

用python3 SVM訓練測試預測文字摘要中文分句分詞詞典詞袋測試建模預測

使用SVM 訓練和預測,需要正確的資料: X:儲存特徵。可以是二維矩陣,如:[ [c1 ,c2, c3…] ,[…],…];也可以是這樣的形式[{a1:c1,a2:c2,a3:c3…},{…} …],c1,c2…表示特徵值a1,a2,a3…表示詞位置(詞在le

在Ubuntu14.04下安裝 ffmpeg-2.4.13處理視頻用將視頻保存圖片序列

ibm blog 提取 ext aac sta video images bmp 首先在 http://www.ffmpeg.org/olddownload.html 下載 ffmpeg-2.4.13.tar.bz2 ; 然後安裝 yasm 和 libx264: apt

【spring mvc】後臺的API測試總提示接口實體的某一個字段不能null但是明明給值了還提示不能

ont TP 報錯 分享 ima 技術 技術分享 圖片 request 實體是這三個字段 接口的實現類Controller 前臺測試給值 依舊報錯 解決方法: 需要添加@RequestBody註解 【spring mvc】後臺的API,

Swift:我的第二個DemotextField實現一個登入介面沒有完成點選空白鍵盤

檔名:AppDelegate.swift import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func

Angular6 配置專案開發環境測試環境生產環境

搜過很多文章說的都是關於Angular4的配置,後面自己又找了許多資料,最後總結了Angular6 如何配置開發環境,測試環境,生產環境: 1、在environments資料夾裡新建三個檔案: //生產環境 environment.prod.ts: export const enviro

關於測試策略測試方針測試計劃測試方案的理解

技術 就會 什麽 ali 是否有效 軟件 是否 width 計劃 一.什麽是測試策略  簡單來說就是,測什麽,怎麽測。 一般可以歸納為6個問題   1)測試的對象和範圍是什麽?   2)測試的目標是什麽?   3)測試的深度到哪裏,廣度又到哪裏?   4)測試的重點

webstorm啟用碼永久有效測試可用更新時間2018.10.20

2RRJMBXW33-eyJsaWNlbnNlSWQiOiIyUlJKTUJYVzMzIiwibGljZW5zZWVOYW1lIjoi5b285bK4IHNvZnR3YXJlMiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiI

PostMan測試介面傳送GetPost請求

       我現在的專案開發是前後臺分離的,所以在寫介面的時候,是需要自己測試一下的,測試工具就是PostMan,第一次接觸,也是百度,檢視部落格。所以自己乾脆寫個全一點的,也讓其他人有個參考,寫的不對多多指正哈;        下面Postman工具介紹一點,簡單的大家

jmeter測試介面跟jenkins整合實現自動推送郵件報告

jmeter我之前沒用過,後來學習測試api,發現很方便,因而做一個記錄。 在mac上安裝jmeter,首先需要在官網下載安裝外掛,然後配置環境,為了實現跟jenkins整合,也下載了ant。環境搭建好以後,應該是這樣的狀態。 export ANDROID_HOME=/U

免費的https、http介面測試介面可以使用

本文轉自:https://blog.csdn.net/ak341221/article/details/61205789 2017年03月10日 20:30:18 凡人不羨仙 閱讀數:19013 標籤: https免費介面http免費介面免費可用的網路介面

Loadrunner11的使用圖解測試併發效能等的具體步驟

每次開啟電腦都需要破解一次Lr,漢化版的有問題,建議使用英文版的。我測試的環境是Windows7+IE8+LR11。(在Windows10上試過,谷歌和IE11都不能正常執行),以下我會具體來操作,最終獲得併發的集合點圖,和事務響應圖。 首先建立指令碼,如下圖 編輯錄制

Http免費測試介面小白學習必備

電商介面 京東獲取單個商品價格介面: http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1 ps:商品ID這麼獲取:http://item.jd.com/954086.html 物流介面 快遞介面: htt

loadrunner測試介面將結果寫入日誌檔案

Action()中使用web_custom_request()方法傳送請求或者F1檢視web_custom_request的使用技巧Action() { web_custom_request( "court_user", //這個是給請求起個名稱,在樹形圖中顯示,不影

訓練集測試檢驗集的區別與交叉檢驗

前言 在機器學習中,不可避免要接觸到訓練集,測試集以及檢驗集,這些資料集各有各的作用,為機器學習演算法的泛化保駕護航,這裡結合《Deep Learning》中的關於訓練集,測試集和檢驗集的討論,淺談所見所學。 如有謬誤,請聯絡指正。轉載請註明出處。 聯絡方

阿里雲部署Fabric網路測試e2e_cli出錯處理

部署Fabric,跑e2e_cli的時候,執行network_setup.sh up,出現錯誤 配置錯誤彙總 錯誤:sign

柔性電子綜述2012 ---在醫療汽車行業人機介面移動裝置以及其他場景下的可能應用

Flexible Electronics: The Next Ubiquitous Platform 雜誌: PROCEEDINGS OF THE IEEE author: Arokia Nathan 2012的一篇柔性電子的綜述,主要講述柔性電子領域的薄膜材料和技術,以及思考未

阿里雲ECS遮蔽25埠官方建議使用465 SSL埠傳送郵件

阿里雲ECS  VPC網路,搭建了zabbix,想通過三方郵件系統傳送郵件,本機開虛擬機器測試發郵件一切正常,到阿里ECS的時候郵件各種發不出去,到處找原因,最後度娘告訴了我真想,原來阿里把25埠遮蔽了。 嘗試解封,呵呵...繼續找度娘 谷哥,說是可以繞開25埠,用465埠,步驟如下(先不要操作,

node搭建伺服器介面調介面跨域

剛開始學node,今天做這個也是累死寶寶了,以後可以自己寫介面自己用了,再也不用麻煩人家後端人員了,這些年我們欠他們的太多了,說多了都是淚,不多說,往下看吧。。。 服務端專案目錄下: 1、npm init 建立package.json檔案; 2、建立一個app.js檔案