Example #1
0
def get_redis_data(instance_name, *args):
    """
    get monitor data from redis
    @param instance_name: ip:port:passwd
    @return: dict
    """

    ip, port, passwd = instance_name.split("/")
    passwd = Monitor.decode_password(passwd)

    r = redis.StrictRedis(host=ip, port=port, password=passwd)
    d = r.info()
    check_items = {
        "redis_version": str,
        "redis_mode": str,  # standalone,
        "uptime_in_seconds": int,
        "process_id": int,
        # Clients
        "connected_clients": int,  # 当前客户端连接数
        "blocked_clients": int,  # 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
        "connected_slaves": int,  # 当前从连接的数量
        "rejected_connections": int,
        "total_connections_received": int,  # 运行以来连接过的客户端的总数量
        "client_longest_output_list": int,  # 当前连接的客户端当中,最长的输出列表
        "client_biggest_input_buf": int,  # 当前连接的客户端当中,最大输入缓存
        # Memory
        "used_memory": int,  # 由redis分配器分配的内存总量,以字节(byte)为单位
        "used_memory_rss": int,  # 从操作系统的角度,返回rRedis已分配的内存总量(俗称常驻集大小),这个值和top、ps等命令的输出一致。
        "used_memory_peak": int,  # redis的内存消耗峰值(以字节为单位)
        "used_memory_lua": int,  # 引擎所使用的内存大小(以字节为单位)
        "mem_fragmentation_ratio": float,  # 内存碎片比率:userd_memory_rss和used_memory之间的比率
        # Persistence
        "rdb_changes_since_last_save": int,  # 上次保存数据库之后,执行命令的次数
        "rdb_bgsave_in_progress": int,  # 后台进行中的save操作的数量
        "rdb_last_save_time": int,  # 最后一次成功保存的时间点,以 UNIX 时间戳格式显示
        "rdb_last_bgsave_status": str,
        "rdb_last_bgsave_time_sec": int,
        "rdb_current_bgsave_time_sec": int,
        # Stats
        "total_commands_processed": int,  # 运行以来执行过的命令的总数量
        "instantaneous_ops_per_sec": int,  # 每秒瞬间ops数
        "expired_keys": int,  # 运行以来过期的 key 的数量
        "evicted_keys": int,  # 运行以来删除过的key的数量
        "keyspace_hits": int,  # 命中 key 的次数
        "keyspace_misses": int,  # 不命中 key 的次数
        "pubsub_channels": int,  # 当前使用中的频道数量
        "pubsub_patterns": int,  # 当前使用的模式的数量
        #'latest_fork_usec':int,
        # Replication
        "role": str,  # 当前实例的角色master还是slave
        "master_host": str,
        "master_port": int,
        "master_link_status": str,  # up or down
        "master_last_io_seconds_ago": int,
        "master_sync_in_progress": int,
        "slave_lists": str,
        #'slave0:ip=192.168.200.25,port=62710,state=online,offset=823669419,lag=1     #offset 当前从的数据偏移量位置
        # CPU
        "used_cpu_sys": float,
        "used_cpu_user": float,
        "used_cpu_sys_children": float,
        "used_cpu_user_children": float,
    }
    redis_stats = {k: d[k] if d.has_key(k) else v() for k, v in check_items.iteritems()}
    redis_stats["role"] = 1 if redis_stats.get("role", "master") == "master" else 2
    redis_stats["keyspace_hits_rate"] = "{0:.2f}".format(
        float(redis_stats.get("keyspace_hits", 0))
        / float(redis_stats.get("keyspace_hits", 1) + redis_stats.get("keyspace_misses", 0) + 0.01)
        * 100
    )
    if redis_stats["connected_slaves"] > 0:
        slave_lists = set()
        for i in range(redis_stats["connected_slaves"]):
            if d.has_key("slave%s" % i):
                slave_lists.add(str(d["slave%s" % i]))
        redis_stats["slave_lists"] = ",".join(list(slave_lists))
    return redis_stats
Example #2
0
def get_redis_data(instance_name, *args):
    """
    get monitor data from redis
    @param instance_name: ip:port:passwd
    @return: dict
    """

    ip, port, passwd = instance_name.split('/')
    passwd = Monitor.decode_password(passwd)

    r = redis.StrictRedis(host=ip, port=port, password=passwd)
    d = r.info()
    c = r.config_get('maxmemory')
    d['max_memory'] = c['maxmemory']
    check_items = {
        'redis_version': str,
        'redis_mode': str,  # standalone,
        'uptime_in_seconds': int,
        'process_id': int,
        # Clients
        'connected_clients': int,  # 当前客户端连接数
        'blocked_clients': int,  # 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
        'connected_slaves': int,  # 当前从连接的数量
        'rejected_connections': int,
        'total_connections_received': int,  # 运行以来连接过的客户端的总数量
        'client_longest_output_list': int,  # 当前连接的客户端当中,最长的输出列表
        'client_biggest_input_buf': int,  # 当前连接的客户端当中,最大输入缓存
        # Memory
        'max_memory': int,  # 配置文件限制的最大内存 以 byte 为单位,0代表不限制
        'used_memory': int,  # 由redis分配器分配的内存总量,以字节(byte)为单位
        'used_memory_rss': int,  # 从操作系统的角度,返回rRedis已分配的内存总量(俗称常驻集大小),这个值和top、ps等命令的输出一致。
        'used_memory_peak': int,  # redis的内存消耗峰值(以字节为单位)
        'used_memory_lua': int,  # 引擎所使用的内存大小(以字节为单位)
        'mem_fragmentation_ratio': float,  # 内存碎片比率:userd_memory_rss和used_memory之间的比率
        # Persistence
        'rdb_changes_since_last_save': int,  # 上次保存数据库之后,执行命令的次数
        'rdb_bgsave_in_progress': int,  # 后台进行中的save操作的数量
        'rdb_last_save_time': int,  # 最后一次成功保存的时间点,以 UNIX 时间戳格式显示
        'rdb_last_bgsave_status': str,
        'rdb_last_bgsave_time_sec': int,
        'rdb_current_bgsave_time_sec': int,
        # Stats
        'total_commands_processed': int,  # 运行以来执行过的命令的总数量
        'instantaneous_ops_per_sec': int,  # 每秒瞬间ops数
        'expired_keys': int,  # 运行以来过期的 key 的数量
        'evicted_keys': int,  # 运行以来删除过的key的数量
        'keyspace_hits': int,  # 命中 key 的次数
        'keyspace_misses': int,  # 不命中 key 的次数
        'pubsub_channels': int,  # 当前使用中的频道数量
        'pubsub_patterns': int,  # 当前使用的模式的数量
        # 'latest_fork_usec':int,
        # Replication
        'role': str,  # 当前实例的角色master还是slave
        'master_host': str,
        'master_port': int,
        'master_link_status': str,  # up or down
        'master_last_io_seconds_ago': int,
        'master_sync_in_progress': int,
        'slave_lists': str,
        # 'slave0:ip=192.168.200.25,port=62710,state=online,offset=823669419,lag=1     #offset 当前从的数据偏移量位置
        # CPU
        'used_cpu_sys': float,
        'used_cpu_user': float,
        'used_cpu_sys_children': float,
        'used_cpu_user_children': float,
    }
    redis_stats = {k: d[k] if d.has_key(k) else v() for k, v in check_items.iteritems()}
    redis_stats['role'] = 1 if redis_stats.get('role', 'master') == 'master' else 2
    redis_stats['keyspace_hits_rate'] = '{0:.2f}'.format(float(redis_stats.get('keyspace_hits', 0)) / float(
        redis_stats.get('keyspace_hits', 1) + redis_stats.get('keyspace_misses', 0) + 0.01) * 100)
    if not redis_stats.get('max_memory') == '0':
        redis_stats['memory_used_percent'] = '{0:.2f}'.format(
            float((redis_stats.get('used_memory')) / float(redis_stats.get('max_memory')) * 100))
    if redis_stats['connected_slaves'] > 0:
        slave_lists = set()
        for i in range(redis_stats['connected_slaves']):
            if d.has_key("slave%s" % i):
                slave_lists.add(str(d["slave%s" % i]))
        redis_stats['slave_lists'] = ','.join(list(slave_lists))
    return redis_stats