import redis,time,sys
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
RedisList = [
{"IP": "192.168.10.27","port": 6379,"password": "********"},
{"IP": "192.168.10.27","port": 6381,"password": "********"},
{"IP": "192.168.10.28","port": 6379,"password": "********"},
{"IP": "192.168.10.28","port": 6380,"password": "********"},
{"IP": "192.168.10.29","port": 6380,"password": "********"},
{"IP": "192.168.10.29","port": 6381,"password": "********"}
]
title="Redis慢日志分析结果"
mail_host="smtp.mayi.com"
mail_user="server@mayi.com"
mail_pass="Mayi123456"
sender = 'server@mayi.com'
To=['test1@mayi.com']
Cc=['test2@mayi.com']
reciver = To+Cc
style_time = time.strftime("%Y-%m-%d-%H-%M", time.localtime(int(time.time())))
log_name = "/tmp/redis_slow_log_parse_{0}.log".format(style_time)
def timestamp_datetime(value):
format = '%Y-%m-%d %H:%M:%S'
value = time.localtime(value)
dt = time.strftime(format, value)
return dt
def get_slow_log(host,port,password):
pool = redis.ConnectionPool(host=host, port=port,password=password)
conn = redis.StrictRedis(connection_pool=pool)
slowlog = conn.slowlog_get(100)
f = open(log_name, 'a+')
for line in slowlog:
duration = line['duration']/1000
start_time = timestamp_datetime(line['start_time'])
command = line['command'].split()[0:2]
f.write('[{0}] {1}:{2} Command: {3} Exec_time: {4}ms\n'.format(start_time,host,port,command,duration))
f.close()
conn.slowlog_reset()
def sendmail():
message = MIMEMultipart()
message["Subject"] = Header(title, "utf-8")
message['To'] = ",".join(To)
message['Cc'] = ','.join(Cc)
context='Redis慢日志分析结果如下,请各位研发同学关注.'
with open(log_name,"r") as file:
for line in file.readlines():
context= context + "</br>"+line.strip('\n')
message.attach(payload=MIMEText(_text=context, _subtype="html", _charset="utf-8"))
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25)
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, reciver, message.as_string())
print ("邮件发送成功")
except smtplib.SMTPException:
print ("Error: 无法发送邮件")
if __name__ == '__main__':
for list in RedisList:
get_slow_log(list["IP"],list["port"],list["password"])
sendmail()