1 #!/usr/local/python/shims/python 2 from rediscluster import StrictRedisCluster 3 ‘‘‘ 4 需要在宿主机python中安装rediscluster 5 pip install rediscluster 6 ‘‘‘ 7 8 import redis 9 import sys 10 import mylog 11 redis_nodes = [{‘host‘:‘ip‘,‘port‘:port}, 12 {‘host‘:‘ip‘,‘port‘:port}, 13 {‘host‘:‘ip‘,‘port‘:port}, 14 {‘host‘:‘ip‘,‘port‘:port}, 15 {‘host‘:‘ip‘,‘port‘:port}, 16 {‘host‘:‘ip‘,‘port‘:port}, 17 ] 18 19 ### 20 进入redis集群模式,如果异常,记录到日志中,并终止脚本 21 ### 22 23 try: 24 redisconn = StrictRedisCluster(startup_nodes=redis_nodes,password=‘pwd‘) 25 26 except Exception,e: 27 mylog.logging.error(‘%s‘ %e ) 28 sys.exit(0) 29 30 ### 31 定义参数 32 ### 33 34 35 data = {} 36 NodeData = {} 37 hit = 0 38 misshit = 0 39 hitrate = 0.00 40 41 ### 42 定义函数,抓取监控项 43 ### 44 45 46 def ClusterState(item): 47 cluster_state = redisconn.execute_command(‘cluster‘,‘info‘) 48 cluster_state = cluster_state.split(‘\r\n‘) 49 try: 50 for i in cluster_state: 51 data[i.split(‘:‘)[0]] = i.split(‘:‘)[1] 52 except: 53 pass 54 if item == ‘clusterstatus‘: 55 state = data[‘cluster_state‘] 56 if state == ‘ok‘ : 57 item = 1 58 else: 59 item = 0 60 return item 61 62 elif item == ‘clusterslotsfail‘: 63 item = data[‘cluster_slots_fail‘] 64 return item 65 66 elif item == ‘clusterknownnodes‘: 67 item = data[‘cluster_known_nodes‘] 68 return item 69 else: 70 return 9999 71 def NodeInfoServer(item): 72 node_info = redisconn.info(‘Server‘) 73 NodeData = node_info[‘ip:port‘] 74 if item == ‘uptime_in_days‘: 75 item = NodeData[‘uptime_in_days‘] 76 return item 77 else: 78 return 9999 79 80 def NodeInfoClients(item): 81 node_info = redisconn.info(‘Clients‘) 82 NodeData = node_info[‘ip:port‘] 83 if item == ‘connected_clients‘: 84 item = NodeData[‘connected_clients‘] 85 return item 86 else: 87 return 9999 88 89 def NodeInfoMemory(item): 90 node_info = redisconn.info(‘Memory‘) 91 NodeData = node_info[‘ip:port‘] 92 if item == ‘used_memory_human‘: 93 item = NodeData[‘used_memory_human‘] 94 return item 95 elif item == ‘total_system_memory_human‘: 96 item = NodeData[‘total_system_memory_human‘] 97 return item 98 else: 99 return 9999 100 101 def NodeInfoPersistence(item): 102 node_info = redisconn.info(‘Persistence‘) 103 NodeData = node_info[‘ip:port‘] 104 105 if item == ‘rdb_last_bgsave_status‘: 106 item = NodeData[‘rdb_last_bgsave_status‘] 107 if item == ‘ok‘ : 108 item = 1 109 else: 110 item = 0 111 return item 112 else: 113 return 9999 114 115 def NodeInfoStats(item): 116 node_info = redisconn.info(‘Stats‘) 117 NodeData = node_info[‘ip:port‘] 118 if item == ‘instantaneous_ops_per_sec‘: 119 item = NodeData[‘instantaneous_ops_per_sec‘] 120 return item 121 elif item == ‘instantaneous_input_kbps‘: 122 item = NodeData[‘instantaneous_input_kbps‘] 123 return item 124 elif item == ‘instantaneous_output_kbps‘: 125 item = NodeData[‘instantaneous_output_kbps‘] 126 return item 127 elif item == ‘hit‘: 128 hit = NodeData[‘keyspace_hits‘] 129 misshit = NodeData[‘keyspace_misses‘] 130 hitrate = round((float(hit) / float(hit + misshit)) ,3) 131 item = hitrate 132 return item 133 else: 134 return 9999 135 136 ### 137 脚本传参,zabbix获取监控项 138 ### 139 140 if sys.argv[1] == ‘status‘: 141 print ClusterState(‘clusterstatus‘) 142 elif sys.argv[1] == ‘slotsfail‘: 143 print ClusterState(‘clusterslotsfail‘) 144 elif sys.argv[1] == ‘nodes‘: 145 print ClusterState(‘clusterknownnodes‘) 146 elif sys.argv[1] == ‘day‘: 147 print NodeInfoServer(‘uptime_in_days‘) 148 elif sys.argv[1] == ‘clients‘: 149 print NodeInfoClients(‘connected_clients‘) 150 elif sys.argv[1] == ‘usememory‘: 151 print NodeInfoMemory(‘used_memory_human‘) 152 elif sys.argv[1] == ‘sysmemory‘: 153 print NodeInfoMemory(‘total_system_memory_human‘) 154 elif sys.argv[1] == ‘rdb‘: 155 print NodeInfoPersistence(‘rdb_last_bgsave_status‘) 156 elif sys.argv[1] == ‘ops‘: 157 print NodeInfoStats(‘instantaneous_ops_per_sec‘) 158 elif sys.argv[1] == ‘input_kbps‘: 159 print NodeInfoStats(‘instantaneous_input_kbps‘) 160 elif sys.argv[1] == ‘output_kbps‘: 161 print NodeInfoStats(‘instantaneous_output_kbps‘) 162 elif sys.argv[1] == ‘hit‘: 163 print NodeInfoStats(‘hit‘)
#python写一个redis监控模版,监控一些基础指标
原文:https://www.cnblogs.com/Jame-mei/p/11937433.html