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的垃圾回收机制深入分析
Jul 16 Python
python实现的简单文本类游戏实例
Apr 28 Python
python 3利用BeautifulSoup抓取div标签的方法示例
May 28 Python
Python中eval带来的潜在风险代码分析
Dec 11 Python
Python操作json的方法实例分析
Dec 06 Python
Python实现使用request模块下载图片demo示例
May 24 Python
python 同时读取多个文件的例子
Jul 16 Python
Django中提供的6种缓存方式详解
Aug 05 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 Python
新手必备Python开发环境搭建教程
May 28 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
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
js实现日历与定时器
2017/02/22 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python多线程下信号处理程序示例
2019/05/31 Python
Python读写文件基础知识点
2019/06/10 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
Python调用C语言的实现
2019/07/26 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
Python如何实现定时器功能
2020/05/28 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
反四风个人对照检查材料
2014/09/26 职场文书
义诊活动总结
2015/02/04 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书