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

文章出处: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服务器的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • linux系统使用python监控apache服务器进程脚本分享

    crtrl.py监控Apache服务器进程的Python 脚本 复制代码 代码如下: !/usr/bin/env Python import os, sys, time while True: time.sleep(4) try: ret = os.popen('ps -C apache -o pid,cmd').readlines() if len(ret) < 2: print "apache 进程异常退出, 4 秒后重新启动" time.sleep(3) os.system

  • 使用Python脚本对Linux服务器进行监控的教程

    目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的脚本实现对 Linux 服务器的监控. 本文介绍一下使用 Python 脚本实现对 Linux 服务器 CPU 内存 网络的监控脚本的编写. Python 版本说明 Python 是由 Guido van Rossum 开发的.可免费获得的.

  • python和shell监控linux服务器的详细代码

    本文实例为大家分享了python和shell监控linux服务器的具体代码,供大家参考,具体内容如下 1. shell监控负载 监控原理:使用uptime来获取负载的信息,然后通过字符串截取的方式来获取load值来获取单个核心的负载,在将负载与阈值比较确定是否报警. loard_monitor.sh脚本: #!/bin/bash #使用uptime命令监控linux系统负载变化 #提取本服务器的IP地址信息 IP=`ifconfig eth0 | grep "inet addr" |

  • 详解用Python实现自动化监控远程服务器

    最近发现Python课器做很多事情,在监控服务器有其独特的优势,耗费资源少,开发周期短. 首先我们做一个定时或者实时脚本timedtask.py,让其定时监控目标服务器,两种方式: 第一种: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/11/27 15:59 # @Desc : 定时任务,以需要的时间间隔执行某个命令 # @File : timedtask.py # @Software: PyCharm import

  • 使用python进行服务器的监控

    在linux服务器中,一切皆为文件,就是说,服务器运行的个中信息,其实是可以从某些文件中查询得到的:百度后,你会知道,在Linux系统中,有一个/proc的虚拟文件系统: Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的./proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc"),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息

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

    文章出处:https://blog.csdn.net/sdksdk0/article/details/80933444 作者:朱培      ID:sdksdk0     -------------------------------------------------------------------------------------------- 对于最近的开发环境,偶尔会有挂掉的现象发生,然而并没有及时发现,下载需要添加一个监控功能,当服务挂掉的时候需要有邮件提醒,同时我们的系统每天晚

  • python脚本监控docker容器

    本文实例为大家分享了python脚本监控docker容器的方法,供大家参考,具体内容如下 脚本功能: 1.监控CPU使用率 2.监控内存使用状况 3.监控网络流量 具体代码: #!/usr/bin/env python # --*-- coding:UTF-8 --*-- import sys import tab import re import os import time from docker import Client import commands keys_container_st

  • python脚本监控logstash进程并邮件告警实例

    supervisor虽然也能拉起来logstash进程,但是有时候supervisor也会挂,也有时会拉不起,就算拉起来了也没有邮件告警功能 ,所以编写一个python脚本监控所有服务器,以下代码只列举了一台服务器,需要更多服务器在列表里面添加就行! (日志采集过程中连续几天数据异常,由于服务器太多,当时不太想一一去将近40台服务器查看logstash进程,但又一直查不出原因,后来就每台服务器查看logstash进程,果然发现3台采集搜索日志的logstash进程没了,然后就编写了此脚本监控,效

  • 使用Post方式提交数据到Tomcat服务器的方法

    我在上一篇文章中介绍了 使用Get方式提交数据到Tomcat服务器,这篇将介绍使用Post方式提交数据到服务器,由于Post的方式和Get方式创建Web工程是一模一样的,只用几个地方的代码不同所以,我就直接介绍不同的地方,第一个不同点是,提交方式不同,所以修改LoginServlet.Java中的代码 package com.fyt.org; import java.io.IOException; import java.io.OutputStream; import java.io.Print

  • 使用Get方式提交数据到Tomcat服务器的方法

    这篇文章将介绍向服务器发送数据,并且服务器将数据的处理结果返回给客户端,这次先介绍使用Get方式向服务器发送数据,下篇将介绍使用Post方式向服务器发送数据,需要的朋友参考下吧! 实现方式分为以下几步: 第一步:使用MyEclipse创建一个Web project,项目命名为WebProject->在src文件夹中新建一个包名为com.fyt.org的包 ->在包中新建一个Servlet,Servlet命名为LoginServlet,并在LoginServlet.Java中添加下面的代码 pa

  • python循环监控远程端口的方法

    本文实例讲述了python循环监控远程端口的方法.分享给大家供大家参考.具体如下: 在ip.txt中每行一个ip地址和端口号,代码可循环监控这些ip地址的指定端口是否正常 #!/usr/bin/env python # -*- coding: gbk -*- import socket,time while 1: file_obj = open('ip.txt') for line in file_obj: try: sc=socket.socket(socket.AF_INET,socket.

  • IDEA部署JavaWeb项目到Tomcat服务器的方法

    IDEA创建一个传统JAVA WEB项目(不使用maven构建) 方法一 File --> NEW --> Project --> Java (勾选Web Application) 方法二 File --> NEW --> Project --> Java Enterprise(勾选Web Application) IDEA部署JAVA WEB项目 IDEA 并非把项目放到 tomcat 的 webapp目录中,而项目还是在源项目目录中,IDEA采用了一种无入侵Tomc

  • Java开启/关闭tomcat服务器的方法

    1.项目结构 2.CallTomcat.java package com.calltomcat.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class CallTomcat { public static void main(String[] args) { //String command = "E:\\apache-tomca

  • 浅谈python脚本设置运行参数的方法

    正在学习Django框架,在运行manage.py的时候需要给它设置要监听的端口,就是给这个脚本一个运行参数.教学视频中,是在Eclipse中设置的运行参数,网上Django大部分都是在命令行中运行manage.py时添加参数,没有涉及到如何在pycharm中设置运行参数.以下是两种设置运行参数的方法(以manage.py为例),不设置运行参数时,运行结果为 D:\Python2.7\python.exe "D:/Django project/DjangoProject1/manage.py&q

  • 用Python一键搭建Http服务器的方法

    今天好友问我怎么从阿里云服务器上把文件下载下来.我一听之下觉得办法很多啊,随意搭个服务器,然后把文件一丢就可以下载了:弄个FTP也行:直接用远程桌面往下拖也可以. 考虑到便捷性,觉得上面的办法都比较麻烦,最好能有个直接解决问题的办法.然后就找到了Python里面. Python3请看 python -m http.server 8000 Python2请看 python -m SimpleHTTPServer 8000 总之就是一条Python命令就能在当前目录起一个Http服务器,然后就可以下

随机推荐