溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python腳本監(jiān)控Tomcat服務器的方法

發(fā)布時間:2020-10-03 04:18:09 來源:腳本之家 閱讀:223 作者:朱培 欄目:開發(fā)技術

文章出處:https://blog.csdn.net/sdksdk0/article/details/80933444

作者:朱培      ID:sdksdk0    
--------------------------------------------------------------------------------------------

對于最近的開發(fā)環(huán)境,偶爾會有掛掉的現(xiàn)象發(fā)生,然而并沒有及時發(fā)現(xiàn),下載需要添加一個監(jiān)控功能,當服務掛掉的時候需要有郵件提醒,同時我們的系統(tǒng)每天晚上會跑定時任務,想知道有沒有異常發(fā)生,所以添加了兩個python監(jiān)本監(jiān)控,因為本身系統(tǒng)不大,所以沒必要去配置kafka+storm這種日志監(jiān)控了,只用了很簡單的方式來處理了。

1、監(jiān)控tomcat是否掛掉

from smtplib import SMTP_SSL 
from email.mime.text import MIMEText 
from email.header import Header 
from os.path import getsize 
from sys import exit 
from re import compile, IGNORECASE 
import sys, time 
import os 
#定義主機 帳號 密碼 收件人 郵件主題 
#定義主機 帳號 密碼 收件人 郵件主題 
mail_info = { 
 "from": "info@sogoucloud.cn", 
 "to": "zhupei@sogoucloud.cn", 
 "hostname": "smtp.exmail.qq.com", 
 "username": "info@sogoucloud.cn", 
 "password": "123456", 
 "mail_subject": "qybd服務器異常", 
 "mail_text": "hello, tomcat服務器出現(xiàn)異常了!,請及時處理", 
 "mail_encoding": "utf-8" 
} 
#發(fā)送郵件函數(shù) 
def send_mail(error): 
 #定義郵件的頭部信息 
 #連接SMTP服務器,然后發(fā)送信息 
 smtp = SMTP_SSL(mail_info["hostname"]) 
 smtp.set_debuglevel(1) 
 smtp.ehlo(mail_info["hostname"]) 
 smtp.login(mail_info["username"], mail_info["password"]) 
 msg = MIMEText(error, "plain", mail_info["mail_encoding"]) 
 msg["Subject"] = Header(mail_info["mail_subject"], mail_info["mail_encoding"]) 
 msg["from"] = mail_info["from"] 
 msg["to"] = mail_info["to"] 
 smtp.sendmail(mail_info["from"], mail_info["to"], msg.as_string()) 
 smtp.quit() 
def isRunning(process_name): 
 try: 
  process = len(os.popen('ps aux | grep "' + process_name + '" | grep -v grep').readlines()) 
  if process >= 1: 
   return True 
  else: 
   return False 
 except: 
  print("Check process ERROR!!!") 
  return False 
#調(diào)用發(fā)送郵件函數(shù)發(fā)送郵件 
if __name__ == '__main__': 
 process_name = "qybd" 
 isrunning = isRunning(process_name) 
 print(isrunning) 
 if isrunning == False: 
  send_mail("老鐵!qybd服務器掛了!") 

2、添加crontab定時任務:

*/3 * * * * python /usr/tools/qybd/cmd/sendEmail.py >> /usr/tools/qybd/cmd/tomcatlife.py.log 2>&1

3、使用crontab -u root -l 命令查看當前運行的定時任務

4、監(jiān)控日志的腳本

from smtplib import SMTP_SSL 
from email.mime.text import MIMEText 
from email.header import Header 
from os.path import getsize 
from sys import exit 
from re import compile, IGNORECASE 
#定義主機 帳號 密碼 收件人 郵件主題 
#定義主機 帳號 密碼 收件人 郵件主題 
mail_info = { 
 "from": "info@sogoucloud.cn", 
 "to": "zhupei@sogoucloud.cn", 
 "hostname": "smtp.exmail.qq.com", 
 "username": "info@sogoucloud.cn", 
 "password": "123456", 
 "mail_subject": "qybd服務器異常", 
 "mail_text": "hello, tomcat服務器出現(xiàn)異常了!,請及時處理", 
 "mail_encoding": "utf-8" 
} 
#定義tomcat日志文件位置 
tomcat_log = '/usr/tools/qybd/tomcat/logs/catalina.out' 
#該文件是用于記錄上次讀取日志文件的位置,執(zhí)行腳本的用戶要有創(chuàng)建該文件的權限 
last_position_logfile = '/usr/tools/qybd/tomcat/logs/last_position.txt' 
#匹配的錯誤信息關鍵字的正則表達式 
pattern = compile(r'Exception|^\t+\bat\b',IGNORECASE) 
#發(fā)送郵件函數(shù) 
def send_mail(error): 
 #定義郵件的頭部信息 
 #連接SMTP服務器,然后發(fā)送信息 
 smtp = SMTP_SSL(mail_info["hostname"]) 
 smtp.set_debuglevel(1) 
 smtp.ehlo(mail_info["hostname"]) 
 smtp.login(mail_info["username"], mail_info["password"]) 
 msg = MIMEText(error, "plain", mail_info["mail_encoding"]) 
 msg["Subject"] = Header(mail_info["mail_subject"], mail_info["mail_encoding"]) 
 msg["from"] = mail_info["from"] 
 msg["to"] = mail_info["to"] 
 smtp.sendmail(mail_info["from"], mail_info["to"], msg.as_string()) 
 smtp.quit() 
#讀取上一次日志文件的讀取位置 
def get_last_position(file): 
 try: 
  data = open(file,'r') 
  last_position = data.readline() 
  if last_position: 
   last_position = int(last_position) 
  else: 
   last_position = 0 
 except: 
  last_position = 0 
 return last_position 
#寫入本次日志文件的本次位置 
def write_this_position(file,last_positon): 
 try: 
  data = open(file,'w') 
  data.write(str(last_positon)) 
  data.write('\n' + "Don't Delete This File,It is Very important for Looking Tomcat Error Log !! \n") 
  data.close() 
 except: 
  print "Can't Create File !" + file 
  exit() 
#分析文件找出異常的行 
def analysis_log(file): 
 error_list = []           #定義一個列表,用于存放錯誤信息. 
 try: 
  data = open(file,'r') 
 except: 
  exit() 
 last_position = get_last_position(last_position_logfile) #得到上一次文件指針在日志文件中的位置 
 this_postion = getsize(tomcat_log)      #得到現(xiàn)在文件的大小,相當于得到了文件指針在末尾的位置 
 if this_postion < last_position:      #如果這次的位置 小于 上次的位置說明 日志文件輪換過了,那么就從頭開始 
  data.seek(0) 
 elif this_postion == last_position:      #如果這次的位置 等于 上次的位置 說明 還沒有新的日志產(chǎn)生 
  exit() 
 elif this_postion > last_position:      #如果是大于上一次的位置,就移動文件指針到上次的位置 
  data.seek(last_position) 
 for line in data: 
  if pattern.search(line): 
   error_list.append(line) 
 write_this_position(last_position_logfile,data.tell()) #寫入本次讀取的位置 
 data.close() 
 return ''.join(error_list)        #形成一個字符串 
#調(diào)用發(fā)送郵件函數(shù)發(fā)送郵件 
error_info = analysis_log(tomcat_log) 
if error_info: 
 send_mail(error_info) 

5、添加crontab定時任務:

*/10 * * * * python /usr/tools/qybd/cmd/tomcat_log_error_analysis.py >> /usr/tools/qybd/cmd/crontest.py.log 2>&1

效果如下:

python腳本監(jiān)控Tomcat服務器的方法

總結

以上所述是小編給大家介紹的python腳本監(jiān)控Tomcat服務器的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI