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())

  

posted @ 2015-05-27 16:07  study-notes  阅读(432)  评论(0编辑  收藏  举报