一个简单的监控redis性能的python脚本,,一个简单的监控red
一个简单的监控redis性能的python脚本,,一个简单的监控red
一个简单的监控redis性能的python脚本上一篇已经讲了如何监控memcached了,现在也顺带讲如何监控redis。
首先介绍下监控redis那些信息:
Redis ping:检验pingRedis alive:查看检查端口是否aliveRedis connections:查看连接数Redis blockedClients:正在等待阻塞客户端数量Redis connectionsUsage:redis的连接使用率Redis memoryUsage:redis内存使用量Redis memoryUsageRate:redis内存使用率Redis evictedKeys:运行以来删除过的key的数量Redis rejectedConnections:拒绝连接数Redis ops:redis的OPSRedis hitRate:redis命中率安装需要的环境
pip install redis
脚本内容
#!/usr/bin/env python# -*- coding: utf-8 -*-__author__ = ‘chenmingle‘import sysimport subprocessimport jsontry: import redisexcept Exception, e: print ‘pip install redis‘ sys.exit(1)class Redis(object): def __init__(self, host, port, password=None): self.host = host self.port = port self.password = password if self.password: self.rds = redis.StrictRedis(host=host, port=port, password=self.password) else: self.rds = redis.StrictRedis(host=host, port=port) try: self.info = self.rds.info() except Exception, e: self.info = None def redis_connections(self): try: return self.info[‘connected_clients‘] except Exception, e: return 0 def redis_connections_usage(self): try: curr_connections = self.redis_connections() max_clients = self.parse_config(‘maxclients‘) rate = float(curr_connections) / float(max_clients) return "%.2f" % (rate * 100) except Exception, e: return 0 def redis_used_memory(self): try: return self.info[‘used_memory‘] except Exception, e: return 0 def redis_memory_usage(self): try: used_memory = self.info[‘used_memory‘] max_memory = self.info[‘maxmemory‘] system_memory = self.info[‘total_system_memory‘] if max_memory: rate = float(used_memory) / float(max_memory) else: rate = float(used_memory) / float(system_memory) return "%.2f" % (rate * 100) except Exception, e: return 0 def redis_ping(self): try: return self.rds.ping() except Exception, e: return False def rejected_connections(self): try: return self.info[‘rejected_connections‘] except Exception, e: return 999 def evicted_keys(self): try: return self.info[‘evicted_keys‘] except Exception, e: return 999 def blocked_clients(self): try: return self.info[‘blocked_clients‘] except Exception, e: return 0 def ops(self): try: return self.info[‘instantaneous_ops_per_sec‘] except Exception, e: return 0 def hitRate(self): try: misses = self.info[‘keyspace_misses‘] hits = self.info[‘keyspace_hits‘] rate = float(hits) / float(int(hits) + int(misses)) return "%.2f" % (rate * 100) except Exception, e: return 0 def parse_config(self, type): try: return self.rds.config_get(type)[type] except Exception, e: return None def test(self): print ‘Redis ping: %s‘ % self.redis_ping() print ‘Redis alive: %s ‘ % check_alive(self.host, self.port) print ‘Redis connections: %s‘ % self.redis_connections() print ‘Redis blockedClients %s‘ % self.blocked_clients() print ‘Redis connectionsUsage: %s%%‘ % self.redis_connections_usage() print ‘Redis memoryUsage: %s‘ % self.redis_used_memory() print ‘Redis memoryUsageRate: %s%%‘ % self.redis_memory_usage() print ‘Redis evictedKeys: %s‘ % self.evicted_keys() print ‘Redis rejectedConnections: %s‘ % self.rejected_connections() print ‘Redis ops: %s‘ % self.ops() print ‘Redis hitRate: %s%%‘ % self.hitRate()def check_alive(host, port): cmd = ‘nc -z %s %s > /dev/null 2>&1‘ % (host, port) return subprocess.call(cmd, shell=True)def parse(type, host, port, password): rds = Redis(host, port, password) if type == ‘connections‘: print rds.redis_connections() elif type == ‘connectionsUsage‘: print rds.redis_connections_usage() elif type == ‘blockedClients‘: print rds.blocked_clients() elif type == ‘ping‘: print rds.redis_ping() elif type == ‘alive‘: print check_alive(host, port) elif type == ‘memoryUsage‘: print rds.redis_used_memory() elif type == ‘memoryUsageRate‘: print rds.redis_memory_usage() elif type == ‘rejectedConnections‘: print rds.rejected_connections() elif type == ‘evictedKeys‘: print rds.evicted_keys() elif type == ‘hitRate‘: print rds.hitRate() elif type == ‘ops‘: print rds.ops() else: rds.test()if __name__ == ‘__main__‘: try: type = sys.argv[1] host = sys.argv[2] port = sys.argv[3] if sys.argv.__len__() >=5: password = sys.argv[4] else: password = None except Exception, e: print "Usage: python %s type 127.0.0.1 6379" % sys.argv[0] sys.exit(1) parse(type, host, port, password)
测试脚本,查看监控redis信息(假如redis没设置密码,可不填密码执行):
/bin/python /home/python/check_redis.py test 192.168.4.18 6379 passwordRedis ping: TrueRedis alive: 0Redis connections: 447Redis blockedClients 0Redis connectionsUsage: 4.47%Redis memoryUsage: 2885122048Redis memoryUsageRate: 17.32%Redis evictedKeys: 0Redis rejectedConnections: 0Redis ops: 1050Redis hitRate: 71.87%
最后加入到zabbix自定义key上
cat /etc/zabbix/zabbix_agentd.d/redis.conf# RedisUserParameter=redis.stats[*],/bin/python /home/python/check_redis.py $1 192.168.4.18 6379 password
接下来加入自定义模版的操作可以参考上一篇博客
一个简单的监控redis性能的python脚本
相关内容
- python+selenium自动化环境配置及使用实例,,一、搭建环境
- python改文件名,python文件名,import os
- Python中的tuple,Pythontuple,tuple_lst
- Pycharm+Django搭建第一个Python Web程序,,1.安装django
- python3之微信文章爬虫,,前提:python3
- python-面向对象(绑定方法与非绑定方法),python-面向
- threading模块,python下的多线程,threadingpython,一、GIL全局
- python 基础课程,,先来个练习统计统计一
- Python3集成安装xadmin,,Python3集成安
- Python - 代码片段,Snippets,Gist,snippetsgist,说明代码片段
评论关闭