python監(jiān)控日志中的報(bào)錯(cuò)并進(jìn)行郵件報(bào)警
前言
在測試過程中,注意力往往都在功能上,如果功能正常,是基本不會(huì)查看日志的,反之會(huì)查看日志定位問題。但是表面上的功能正常不能確保日志沒有報(bào)錯(cuò),不能確保其他功能點(diǎn)沒有問題,這時(shí)我們就需要日志的監(jiān)控,一旦有報(bào)錯(cuò)就觸發(fā)報(bào)警機(jī)制(報(bào)警機(jī)制可以有郵件報(bào)警、釘釘微信發(fā)消息報(bào)警等),我選擇的是發(fā)郵件報(bào)警。
實(shí)現(xiàn)思路
1、在測試過程中,日志時(shí)時(shí)在刷,時(shí)時(shí)監(jiān)控難度太大
2、轉(zhuǎn)換思路,每分鐘對日志進(jìn)行掃描一次,發(fā)現(xiàn)報(bào)錯(cuò)即報(bào)警
- a.獲取當(dāng)前時(shí)間前一分鐘的日志,并將日志全部寫入一個(gè)文件中,每次寫入前會(huì)將該文件清空
- b.獲取前一分鐘文件時(shí),方法是獲取前一分鐘日志的第一行的行號(hào)和最后一行的行號(hào),然后將這兩個(gè)行號(hào)間的所有內(nèi)容輸出到一個(gè)文件中(這樣做相比于直接根據(jù)時(shí)間過濾的好處就是會(huì)包含報(bào)錯(cuò)內(nèi)容,因?yàn)閖ava日志中報(bào)錯(cuò)信息前面是沒有時(shí)間的,根據(jù)時(shí)間過濾就會(huì)漏掉報(bào)錯(cuò)信息)
- c.在前一分鐘日志中進(jìn)行java關(guān)鍵詞報(bào)錯(cuò)過濾,并將查詢到的報(bào)錯(cuò)信息的前后20行(具體多少行根據(jù)實(shí)際情況而定)內(nèi)容都輸出到另一個(gè)文件中
- d.發(fā)郵件之前判斷上一步生成的文件大小,如果大于0(說明有報(bào)錯(cuò))就觸發(fā)郵件,如果等于0就不觸發(fā)郵件報(bào)警
3.腳本寫好后,放入crond定時(shí)任務(wù)中,每分鐘執(zhí)行一次,即可進(jìn)行監(jiān)控
實(shí)現(xiàn)代碼
僅供參考
#!/bin/sh #日志路徑 mall_c_log_path='/data/admin/log/mall-c/1.0.0/qa/base/1/mall-c.log' mall_mg_log_path='/data/admin/log/mall-mg/1.0.0/qa/base/1/mall-mg.log' #當(dāng)前時(shí)間前一分鐘,精確到分 curdate=`date -d "1 minute ago" +"%Y-%m-%d %H:%M"` echo ${curdate} #獲取mall_c要截取日期日志的開始和結(jié)束行號(hào) c_start_line=`cat -n $mall_c_log_path | grep "${curdate}" | head -1 | cut -f1` c_end_line=`cat -n $mall_c_log_path | grep "${curdate}" | tail -1 | cut -f1` #獲取mall_mg要截取日期日志的開始和結(jié)束行號(hào) mg_start_line=`cat -n $mall_mg_log_path | grep "${curdate}" | head -1 | cut -f1` mg_end_line=`cat -n $mall_mg_log_path | grep "${curdate}" | tail -1 | cut -f1` sed -n "$c_start_line,${c_end_line}p" $mall_c_log_path > /data/admin/log_err/mall_c_now.log sed -n "$mg_start_line,${mg_end_line}p" $mall_mg_log_path > /data/admin/log_err/mall_mg_now.log #清空錯(cuò)誤日志文件 > /data/admin/log_err/mall-c_err.txt > /data/admin/log_err/mall-mg_err.txt #將報(bào)錯(cuò)信息寫入文件 err_list=(ArithmeticExecption NullPointerException ClassCastException NegativeArrayException ArrayIndexOutOfBoundsException SecturityException EOFException FileNotFoundException NumberFormatException SQLException IOException NoSuchMethodException SocketTimeoutException) for i in ${err_list[*]}; do cat /data/admin/log_err/mall_c_now.log | grep -C 20 "${i}" >> /data/admin/log_err/mall-c_err.txt cat /data/admin/log_err/mall_mg_now.log | grep -C 20 "${i}" >> /data/admin/log_err/mall-mg_err.txt done
# -*- coding: UTF-8 -*- import smtplib,os from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header def send_mail_attch(): #發(fā)送郵箱 # sender='18706710668@163.com' sender='815618406@qq.com' #接收郵箱 receiver='815618406@qq.com' #發(fā)送郵箱服務(wù)器 # smtpserver='smtp.163.com' smtpserver='smtp.qq.com' #用戶名 口令 # username='18706710668@163.com' username='815618406@qq.com' password='vwrfpqwbwgsybdah' #中文需參數(shù)‘utf8',單字節(jié)字符不需要 # 發(fā)送郵件主題 subject = '互動(dòng)贏家QA環(huán)境日志監(jiān)控報(bào)警' msg = MIMEMultipart('mixed') msg['Subject'] = Header(subject, 'utf-8') #郵件正文 text = "Dear all!\n 附件是后端日志報(bào)錯(cuò)內(nèi)容,請查收~" zw = MIMEText(text,'plain','utf-8') msg.attach(zw) #郵件附件1 size_mall_c = os.path.getsize('/data/admin/log_err/mall-c_err.txt') if size_mall_c != 0: mall_c_log = open('/data/admin/log_err/mall-c_err.txt',"rb") send_mall_c_log = mall_c_log.read() mall_c_log.close() att_1 = MIMEText(send_mall_c_log, 'base64', 'utf-8') att_1["Content-Type"] = "application/octet-stream" att_1["Content-Disposition"] = "attachment;filename = 'mall_c_err.txt'" msg.attach(att_1) #郵件附件2 size_mall_mg = os.path.getsize('/data/admin/log_err/mall-mg_err.txt') if size_mall_mg != 0: mall_mg_log = open('/data/admin/log_err/mall-mg_err.txt',"rb") send_mall_mg_log = mall_mg_log.read() mall_mg_log.close() att_2 = MIMEText(send_mall_mg_log, 'base64', 'utf-8') att_2["Content-Type"] = "application/octet-stream" att_2["Content-Disposition"] = "attachment;filename = 'mall_mg_err.txt'" msg.attach(att_2) msg['to']='815618406@qq.com' msg['from']='815618406@qq.com' smtp=smtplib.SMTP_SSL('smtp.qq.com',port=465) #smtp=smtplib.SMTP() #smtp.connect('smtp.qq.com') #smtp.set_debuglevel(1) smtp.login(username,password) smtp.sendmail(sender,receiver,msg.as_string()) smtp.quit() if __name__ == '__main__': size_mall_c = os.path.getsize('/data/admin/log_err/mall-c_err.txt') size_mall_mg = os.path.getsize('/data/admin/log_err/mall-mg_err.txt') if (size_mall_c != 0) or (size_mall_mg != 0): send_mail_attch()
#!/bin/sh #執(zhí)行收集報(bào)錯(cuò)的腳本 sh /data/admin/log_err/monitor_log_err.sh sleep 10 #執(zhí)行發(fā)送郵件腳本 /usr/bin/python /data/admin/log_err/send_email.py
以上就是python監(jiān)控日志中的報(bào)錯(cuò)并進(jìn)行郵件報(bào)警的詳細(xì)內(nèi)容,更多關(guān)于python監(jiān)控日志報(bào)錯(cuò)郵件報(bào)警的資料請關(guān)注腳本之家其它相關(guān)文章!希望能幫到你~
相關(guān)文章
python實(shí)現(xiàn)DNS正向查詢、反向查詢的例子
這篇文章主要介紹了python實(shí)現(xiàn)DNS正向查詢、反向查詢的例子,需要的朋友可以參考下2014-04-04Python一行代碼實(shí)現(xiàn)ChatGPT接入微信機(jī)器人
這篇文章主要為大家介紹了Python一行代碼實(shí)現(xiàn)ChatGPT接入微信機(jī)器人示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03python 如何把classification_report輸出到csv文件
這篇文章主要介紹了python 把classification_report輸出到csv文件的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05python利用joblib進(jìn)行并行數(shù)據(jù)處理的代碼示例
在數(shù)據(jù)量比較大的情況下,數(shù)據(jù)預(yù)處理有時(shí)候會(huì)非常耗費(fèi)時(shí)間,可以利用 joblib 中的 Parallel 和 delayed 進(jìn)行多CPU并行處理,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-10-10使用Python的Tornado框架實(shí)現(xiàn)一個(gè)Web端圖書展示頁面
Tornado是Python的一款高人氣Web開發(fā)框架,這里我們來展示使用Python的Tornado框架實(shí)現(xiàn)一個(gè)Web端圖書展示頁面的實(shí)例,通過該實(shí)例可以清楚地學(xué)習(xí)到Tornado的模板使用及整個(gè)Web程序的執(zhí)行流程.2016-07-07TensorFlow人工智能學(xué)習(xí)張量及高階操作示例詳解
這篇文章主要為大家介紹了TensorFlow人工智能學(xué)習(xí)張量及高階操作的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11