redis简单的监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/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 @   study-notes  阅读(437)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
点击右上角即可分享
微信分享提示