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 实现红包随机生成算法的简单实例
Jan 04 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
tensorflow 获取checkpoint中的变量列表实例
Feb 11 Python
Python3.7下安装pyqt5的方法步骤(图文)
May 12 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
python pillow库的基础使用教程
Jan 13 Python
python实现三次密码验证的示例
Apr 29 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 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
动易数据转成dedecms的php程序
2007/04/07 PHP
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
PHP文件与目录操作示例
2016/12/24 PHP
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
java必学必会之static关键字
2015/12/03 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
Python的装饰器使用详解
2017/06/26 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
Python反射用法实例简析
2017/12/22 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
python中如何设置代码自动提示
2020/07/15 Python
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
应届生法律顾问求职信
2013/11/19 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
初中新生军训方案
2014/05/13 职场文书
给校长的建议书200字
2014/05/16 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
小学老师对学生的评语
2014/12/29 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
javaScript Array api梳理
2021/03/31 Javascript
Python 制作自动化翻译工具
2021/04/25 Python