#!/usr/bin/env python
#coding:utf-8
#author:zhangluya
#mail:zhangluya1987@gmail.com
#qq:64125568
import redis
import MySQLdb
import os
class Redis:
def connect(self,host,port):
self.host=host
self.port=port
try:
r=redis.StrictRedis(host=host, port=port,db=0)
if r.ping() == True:
conn=MySQLdb.connect(host="192.168.1.1",user="sa",passwd="11111",db="sa",charset="utf8")
cursor=conn.cursor()
sql = "insert into redis(ip,port,roles,status,count,maxmem,usedmem,peakmem,client,uptime) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
maxmem = float(r.config_get(pattern='maxmemory').get('maxmemory'))/(1024*1024*1024)
used = float(r.info().get('used_memory'))/(1024*1024)
usedmem = round(used,1)
peak = float(r.info().get('used_memory_peak'))/(1024*1024)
peakmem = round(peak,1)
status = r.info().get("master_link_status")
roles = r.info().get('role')
count = r.dbsize()
client = r.info().get("connected_clients")
uptime = r.info().get('uptime_in_days')
param=(host,port,roles,status,count,maxmem,usedmem,peakmem,client,uptime)
#print '-' * 50
#print str(host) + ":" + str(port);
#print "Role:" + str(roles);
#print "keys count:" + str(count)
#print "MaxMem:" + str(maxmem) + " G";
#print "UsedMem:" + str(usedmem) + " M";
#print "MemPeak:" + str(peakmem) + " M";
#print "Client:" + str(client);
#print "Uptime:" + str(uptime) + " days";
cursor.execute(sql,param)
cursor.close()
conn.commit()
conn.close()
per = float(usedmem/(maxmem*1024))
percent = round(per,1)
if percent >= 0.7:
content=str(host) + ':' + str(port) + "内存利用率" + str(percent*100) + str('%')
bc=open('/data/logs/redis/monitor.log','w')
print >>bc,content
bc.close()
os.system("cat /data/logs/redis/monitor.log|mail -s 'REDIS内存利用率警告' xujunjun@hichao.com zhangluya@hichao.com")
else:
print "ok"
except Exception,e:
print str(e)
print "%s:%s" %(host,port)
def create_dir(dir):
if os.path.exists(dir):
print dir + " is exists~"
else:
os.makedirs(dir);
print dir + " create successful ^_^ "
def redis_port():
cmd="""netstat -lntup|grep redis|awk -F':' '{print $2}'|awk '{print $1}'"""
port=os.popen(cmd).read().strip()
f=open('/data/logs/redis/port.log','w')
print >>f,port
f.close()
def redis_ip():
ip="""/sbin/ip add|grep 192.168.*|egrep "brd"|awk -F '/' '{print $1}'|awk '{print $2}'"""
cip=os.popen(ip).read().strip()
fip=open('/data/logs/redis/ip.log','w')
print >>fip,cip
fip.close()
if __name__ == "__main__":
P=Redis()
create_dir("/data/logs/redis")
redis_port()
redis_ip()
read=open("/data/logs/redis/port.log","r")
ipread=open("/data/logs/redis/ip.log","r").read().strip()
lines = read.readlines()
for line in lines:
P.connect(ipread,line.strip())