python脚本监控Tomcat服务器的方法


Posted in Python onJuly 06, 2018

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

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

对于最近的开发环境,偶尔会有挂掉的现象发生,然而并没有及时发现,下载需要添加一个监控功能,当服务挂掉的时候需要有邮件提醒,同时我们的系统每天晚上会跑定时任务,想知道有没有异常发生,所以添加了两个python监本监控,因为本身系统不大,所以没必要去配置kafka+storm这种日志监控了,只用了很简单的方式来处理了。

1、监控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服务器出现异常了!,请及时处理", 
 "mail_encoding": "utf-8" 
} 
#发送邮件函数 
def send_mail(error): 
 #定义邮件的头部信息 
 #连接SMTP服务器,然后发送信息 
 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 
#调用发送邮件函数发送邮件 
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、监控日志的脚本

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服务器出现异常了!,请及时处理", 
 "mail_encoding": "utf-8" 
} 
#定义tomcat日志文件位置 
tomcat_log = '/usr/tools/qybd/tomcat/logs/catalina.out' 
#该文件是用于记录上次读取日志文件的位置,执行脚本的用户要有创建该文件的权限 
last_position_logfile = '/usr/tools/qybd/tomcat/logs/last_position.txt' 
#匹配的错误信息关键字的正则表达式 
pattern = compile(r'Exception|^\t+\bat\b',IGNORECASE) 
#发送邮件函数 
def send_mail(error): 
 #定义邮件的头部信息 
 #连接SMTP服务器,然后发送信息 
 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)      #得到现在文件的大小,相当于得到了文件指针在末尾的位置 
 if this_postion < last_position:      #如果这次的位置 小于 上次的位置说明 日志文件轮换过了,那么就从头开始 
  data.seek(0) 
 elif this_postion == last_position:      #如果这次的位置 等于 上次的位置 说明 还没有新的日志产生 
  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)        #形成一个字符串 
#调用发送邮件函数发送邮件 
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脚本监控Tomcat服务器的方法

总结

以上所述是小编给大家介绍的python脚本监控Tomcat服务器的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python 字典(Dictionary)操作详解
Mar 11 Python
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
Python编程pygal绘图实例之XY线
Dec 09 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
详解Numpy中的广播原则/机制
Sep 20 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
使用TFRecord存取多个数据案例
Feb 17 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
pytorch常用数据类型所占字节数对照表一览
May 17 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 #Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 #Python
Python实现的从右到左字符串替换方法示例
Jul 06 #Python
Python用csv写入文件_消除空余行的方法
Jul 06 #Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 #Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 #Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 #Python
You might like
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
PHP输出缓冲控制Output Control系列函数详解
2015/07/02 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
Python中print和return的作用及区别解析
2019/05/05 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
Python项目打包成二进制的方法
2020/12/30 Python
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
接口中的方法可以是abstract的吗
2015/07/23 面试题
甲方资料员岗位职责
2013/12/13 职场文书
六一儿童节主持词
2014/03/21 职场文书
运动会加油口号
2014/06/07 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书