python腳本監(jiān)控Tomcat服務(wù)器的方法
文章出處:https://blog.csdn.net/sdksdk0/article/details/80933444
作者:朱培 ID:sdksdk0
--------------------------------------------------------------------------------------------
對(duì)于最近的開發(fā)環(huán)境,偶爾會(huì)有掛掉的現(xiàn)象發(fā)生,然而并沒(méi)有及時(shí)發(fā)現(xiàn),下載需要添加一個(gè)監(jiān)控功能,當(dāng)服務(wù)掛掉的時(shí)候需要有郵件提醒,同時(shí)我們的系統(tǒng)每天晚上會(huì)跑定時(shí)任務(wù),想知道有沒(méi)有異常發(fā)生,所以添加了兩個(gè)python監(jiān)本監(jiān)控,因?yàn)楸旧硐到y(tǒng)不大,所以沒(méi)必要去配置kafka+storm這種日志監(jiān)控了,只用了很簡(jiǎn)單的方式來(lái)處理了。
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
#定義主機(jī) 帳號(hào) 密碼 收件人 郵件主題
#定義主機(jī) 帳號(hào) 密碼 收件人 郵件主題
mail_info = {
"from": "info@sogoucloud.cn",
"to": "zhupei@sogoucloud.cn",
"hostname": "smtp.exmail.qq.com",
"username": "info@sogoucloud.cn",
"password": "123456",
"mail_subject": "qybd服務(wù)器異常",
"mail_text": "hello, tomcat服務(wù)器出現(xiàn)異常了!,請(qǐng)及時(shí)處理",
"mail_encoding": "utf-8"
}
#發(fā)送郵件函數(shù)
def send_mail(error):
#定義郵件的頭部信息
#連接SMTP服務(wù)器,然后發(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服務(wù)器掛了!")
2、添加crontab定時(shí)任務(wù):
*/3 * * * * python /usr/tools/qybd/cmd/sendEmail.py >> /usr/tools/qybd/cmd/tomcatlife.py.log 2>&1
3、使用crontab -u root -l 命令查看當(dāng)前運(yùn)行的定時(shí)任務(wù)
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
#定義主機(jī) 帳號(hào) 密碼 收件人 郵件主題
#定義主機(jī) 帳號(hào) 密碼 收件人 郵件主題
mail_info = {
"from": "info@sogoucloud.cn",
"to": "zhupei@sogoucloud.cn",
"hostname": "smtp.exmail.qq.com",
"username": "info@sogoucloud.cn",
"password": "123456",
"mail_subject": "qybd服務(wù)器異常",
"mail_text": "hello, tomcat服務(wù)器出現(xiàn)異常了!,請(qǐng)及時(shí)處理",
"mail_encoding": "utf-8"
}
#定義tomcat日志文件位置
tomcat_log = '/usr/tools/qybd/tomcat/logs/catalina.out'
#該文件是用于記錄上次讀取日志文件的位置,執(zhí)行腳本的用戶要有創(chuàng)建該文件的權(quán)限
last_position_logfile = '/usr/tools/qybd/tomcat/logs/last_position.txt'
#匹配的錯(cuò)誤信息關(guān)鍵字的正則表達(dá)式
pattern = compile(r'Exception|^\t+\bat\b',IGNORECASE)
#發(fā)送郵件函數(shù)
def send_mail(error):
#定義郵件的頭部信息
#連接SMTP服務(wù)器,然后發(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 = [] #定義一個(gè)列表,用于存放錯(cuò)誤信息.
try:
data = open(file,'r')
except:
exit()
last_position = get_last_position(last_position_logfile) #得到上一次文件指針在日志文件中的位置
this_postion = getsize(tomcat_log) #得到現(xiàn)在文件的大小,相當(dāng)于得到了文件指針在末尾的位置
if this_postion < last_position: #如果這次的位置 小于 上次的位置說(shuō)明 日志文件輪換過(guò)了,那么就從頭開始
data.seek(0)
elif this_postion == last_position: #如果這次的位置 等于 上次的位置 說(shuō)明 還沒(méi)有新的日志產(chǎn)生
exit()
elif this_postion > last_position: #如果是大于上一次的位置,就移動(dòng)文件指針到上次的位置
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) #形成一個(gè)字符串
#調(diào)用發(fā)送郵件函數(shù)發(fā)送郵件
error_info = analysis_log(tomcat_log)
if error_info:
send_mail(error_info)
5、添加crontab定時(shí)任務(wù):
*/10 * * * * python /usr/tools/qybd/cmd/tomcat_log_error_analysis.py >> /usr/tools/qybd/cmd/crontest.py.log 2>&1
效果如下:

總結(jié)
以上所述是小編給大家介紹的python腳本監(jiān)控Tomcat服務(wù)器的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 基于python3監(jiān)控服務(wù)器狀態(tài)進(jìn)行郵件報(bào)警
- python 監(jiān)控服務(wù)器是否有人遠(yuǎn)程登錄(詳細(xì)思路+代碼)
- Python監(jiān)控服務(wù)器實(shí)用工具psutil使用解析
- python3.8 微信發(fā)送服務(wù)器監(jiān)控報(bào)警消息代碼實(shí)現(xiàn)
- 詳解用Python實(shí)現(xiàn)自動(dòng)化監(jiān)控遠(yuǎn)程服務(wù)器
- python和shell監(jiān)控linux服務(wù)器的詳細(xì)代碼
- 使用python進(jìn)行服務(wù)器的監(jiān)控
- 使用Python腳本對(duì)Linux服務(wù)器進(jìn)行監(jiān)控的教程
- linux系統(tǒng)使用python監(jiān)控apache服務(wù)器進(jìn)程腳本分享
- 用python監(jiān)控服務(wù)器的cpu,磁盤空間,內(nèi)存,超過(guò)郵件報(bào)警
相關(guān)文章
終于明白tf.reduce_sum()函數(shù)和tf.reduce_mean()函數(shù)用法
這篇文章主要介紹了終于明白tf.reduce_sum()函數(shù)和tf.reduce_mean()函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Python中Scrapy+adbapi提高數(shù)據(jù)庫(kù)寫入效率實(shí)現(xiàn)
本文主要介紹了Python中Scrapy+adbapi提高數(shù)據(jù)庫(kù)寫入效率實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
利用python如何實(shí)現(xiàn)貓捉老鼠小游戲
這篇文章主要給大家介紹了關(guān)于利用python如何實(shí)現(xiàn)貓捉老鼠小游戲的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python 實(shí)時(shí)調(diào)取攝像頭的示例代碼
這篇文章主要介紹了python 實(shí)時(shí)調(diào)取攝像頭的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11

