redis简单的监控脚本
#!/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())