python抓取mysql告警日志_python 监控日志并发送邮件报警

#!/usr/bin/env python

#coding:utf8

import re

import os

import time

import smtplib

import socket

import fcntl

import struct

from email.mime.text import MIMEText

def get_ip_address(ifname):

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

return socket.inet_ntoa(fcntl.ioctl(

s.fileno(),

0x8915, # SIOCGIFADDR

struct.pack('256s', ifname[:15])

)[20:24])

def sendemail(subject,msg,fromemail,emailpasswd,toemail):

'''实现发送邮件功能函数'''

_user = fromemail

_pwd = emailpasswd

_to = toemail

nowtime = time.strftime('%Y-%m-%d %H:%M:%S')

msg = MIMEText(msg)

msg["Subject"] = subject

msg["From"] = _user

msg["To"] = _to

try:

s = smtplib.SMTP_SSL('smtp.qq.com', 465)

s.login(_user, _pwd)

s.sendmail(_user, _to, msg.as_string())

s.quit()

print "[%s]INFO:Email send Success!" % nowtime

except smtplib.SMTPException,e:

print "[%s]ERROR:Email send Falied,%s" % (nowtime,e)

def matchkeyword(pattern,alertlogfile):

'''实现匹配关键字函数'''

re.compile(pattern)

posfile = "/tmp/posfile"

if not os.path.exists(posfile):

os.mknod(posfile)

if not os.path.getsize(posfile):

with open(posfile,'w') as fobj:

fobj.write('0')

#打开文件

f = open(alertlogfile,'r')

#移动到文件结尾

f.seek(0,2)

#读出文件所在的字节位置

endpos = f.tell()

#移动到文件的开头

with open(posfile,'r') as fobj:

startpos = int(fobj.read())

f.seek(startpos)

if endpos-startpos > 0:

data = f.read(endpos-startpos)

f.close()

with open(posfile,'w') as fobj:

fobj.write(str(endpos))

m = re.findall(pattern, data,re.IGNORECASE)

if m:

content = '\n'.join(m)

return content

else:

return ''

if __name__ == '__main__':

local_ip = get_ip_address('eth0')

subject = '服务器[%s]日志报警了!' % local_ip

fromemail = 'xxxxxxxx@qq.com'

#emailpasswd为QQ邮箱的授权码

emailpasswd = 'mdkuasfhnjbrbhdj'

toemail = 'xxxxxx@qq.com'

alertlogfile = "/data/mysql/mysql_3306/log/error.log"

#pattern = ".*\[Warning\].*\s|.*\[Note\].*\s"

pattern = ".*Warning.*\s|.*error.*\s"

while True:

content = matchkeyword(pattern, alertlogfile)

if content:

sendemail(subject, content, fromemail, emailpasswd, toemail)

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值