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中的rjust()方法使用详解
May 19 Python
Python中内建函数的简单用法说明
May 05 Python
Python编程实现的简单Web服务器示例
Jun 22 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
Python Flask框架扩展操作示例
May 03 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
Django 再谈一谈json序列化
Mar 16 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 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生成HTML静态页面实例代码
2008/08/31 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
php控制文件下载速度的方法
2015/03/24 PHP
JS 的应用开发初探(mootools)
2009/12/19 Javascript
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
layui文件上传实现代码
2017/05/20 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
React项目动态设置title标题的方法示例
2018/09/26 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
如何利用python生成MD5并去重
2020/12/07 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
企业管理专业个人求职信范文
2013/09/24 职场文书
毕业生自荐信
2013/12/14 职场文书
机电一体化职业规划书
2014/01/07 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
医德医风自我评价
2014/09/19 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
MySQL Server 层四个日志
2022/03/31 MySQL
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js