日志报警脚本
脚本介绍:
主要是监控服务器的日志,如果在一段时间内没有收到服务器的日志,说明服务器存在日志丢弃或者服务器死机,此时就会通过邮件发送信息给管理员
脚本运行的环境:
- python 3以下
- 安装了mailx邮件报警
- Rsyslog+LogAnalyzer+MySQL
脚本的代码:
1 #!/usr/bin/python 2 #coding:utf8 3 4 import os 5 import time 6 import MySQLdb 7 y=None 8 print 'weclome to ddoslog system' 9 def mysql(): 10 conn=MySQLdb.connect (passwd='ybl8651073',host='127.0.0.1',user='root') 11 cur=conn.cursor() 12 conn.select_db('Syslog') 13 cur.execute('select count(FromHost) from SystemEvents') 14 rows=cur.fetchall() 15 for i in rows: 16 for n in i: 17 global h 18 19 h=n 20 21 def xuhan(): 22 23 while 1: 24 mysql() 25 print h, y 26 if h>y: 27 28 print '当前的日志条数为:', h 29 print '上次的日志条数为:' ,y 30 else: 31 print '系统日志一直没有更新,上次日志的条数为' ,y 32 print '真在发送邮件给管理员用户' 33 os.system('echo 系统日志停止更新请及时检查 |mailx -s xxxx 1014425308@qq.com') 34 try: 35 global y 36 except SyntaxWarning: 37 pass 38 y=h 39 time.sleep(2) 40 41 xuhan()
脚本的介绍:
- 主要的模块有os,为了执行mailx邮件报警 time 为了让脚本多久执行一次查询日志条数 MySQLdb主要的作用是为了连接数据库得到数据
- 首先定义一个函数mysql,主要的作用是获得数据库日志条数,前面主要是连接数据库, 得到一个 元组 rows=cur.fetchall(),循环这个元组,获取日志条数h
- 定义一个循环函数,比较当前的日志条数,和上次的日志条数,如果现在的日志条数大于上次的日志条数,说明日志一直在更新,如果是其他则说明日志没有一直在更新。就会发送报警给管理员
- time.sleep() 函数主要定义多久查询一次
脚本运行的结果如下