本文共 3558 字,大约阅读时间需要 11 分钟。
了解Redis的info
要获得Redis的当前情况,使用info命令即可。具体用法:#redis-cli -h 127.0.0.1 -p 6379 -a redis_passwd info [参数]。针对不同的参数就会看到具体的数字,如果没有带参数,那么就会把默认情况写出来,如果带上all参数,那么就会把所有情况都写出来。比如:#redis-cli -h 127.0.0.1 -p 6379 -a redis_passwd info server,就会看到redis关于server的一些数据,如下:
可以看出,从server里可以查询到的是版本号、pid号、配置文件路径等等东西。
如果参数是client,记录了是客户端的相关信息:
1 2 3 4 5 6 | [root@func-redis-001 ~] # redis-cli -h 127.0.0.1 -p 6379 info clients # Clients connected_clients:64 #已连接客户端的数量(不包括通过从属服务器连接的客户端) client_longest_output_list:0 #当前连接的客户端当中,最长的输出列表 client_biggest_input_buf:0 #当前连接的客户端当中,最大输入缓存 blocked_clients:0 #正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量 |
如果参数是memory,记录的是内存的相关信息:
1 2 3 4 5 6 7 8 9 10 | [root@func-redis-001 ~] # redis-cli -h 127.0.0.1 -p 6379 info memory # Memory used_memory:2252984 #由 Redis 分配器分配的内存总量,以字节(byte)为单位 used_memory_human:2.15M #上面的数字加上了单位 used_memory_rss:9293824 #常驻集大小,即Redis已分配的内存总量。这个值和top、ps等命令的输出一致 used_memory_peak:2607520 #Redis 的内存消耗峰值(以字节为单位) used_memory_peak_human:2.49M #上面的数字加上了单位 used_memory_lua:33792 #Lua 引擎所使用的内存大小(以字节为单位) mem_fragmentation_ratio:4.13 #used_memory_rss 和 used_memory 之间的比率 mem_allocator:jemalloc-3.2.0 #在编译时指定的,Redis所使用的内存分配器。可以是libc、jemalloc或者tcmalloc。 |
这里要注意!在理想情况下, used_memory_rss 的值应该只比 used_memory 稍微高一点儿(我这个机器就已经属于严重的级别了)。当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。
如果参数是stats,那就是统计的相关信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@func-redis-001 ~] # redis-cli -h 127.0.0.1 -p 6379 info stats # Stats total_connections_received:150383 #服务器已接受的连接请求数量 total_commands_processed:500935 #服务器已执行的命令数量 instantaneous_ops_per_sec:0 #服务器每秒钟执行的命令数量 rejected_connections:0 #因为最大客户端数量限制而被拒绝的连接请求数量 sync_full:0 sync_partial_ok:0 sync_partial_err:0 #查找数据库键成功的次数 expired_keys:41 #因为过期而被自动删除的数据库键数量 evicted_keys:0 #因为最大内存容量限制而被驱逐(evict)的键数量 keyspace_hits:78121 #查找数据库键成功的次数 keyspace_misses:56 #查找数据库键失败的次数 pubsub_channels:0 #目前被订阅的频道数量 pubsub_patterns:0 #目前被订阅的模式数量 latest_fork_usec:878 #最近一次 fork() 操作耗费的微秒数 |
如果参数是CPU,那么就会返回CPU的相关信息:
1 2 3 4 5 6 | [root@func-redis-001 ~] # redis-cli -h 127.0.0.1 -p 6379 info cpu # CPU used_cpu_sys:63.95 #Redis服务器耗费的系统CPU used_cpu_user:129.54 #Redis服务器耗费的用户CPU used_cpu_sys_children:1.70 #子进程耗费的系统CPU used_cpu_user_children:1.03 #子进程耗费的用户CPU |
如果参数是keyspace,那么就会返回数据库相关的统计信息:
1 2 3 | [root@func-redis-001 ~] # redis-cli -h 127.0.0.1 -p 6379 info keyspace # Keyspace db0:keys=262,expires=183,avg_ttl=284091259423 #据库的键数量、数据库设置有过期时间的key的数量(这个值减少是正常的) |
其他还有更多信息,请移步: 。感谢前人栽树!!!
使用zabbix监控redis
用zabbix监控redis是一个很简单的事儿,只需要把需要监控的数据提取出来即可。而提取数据的方法就是利用info去得到对应的数值。
首先先来一个判断redis服务器连接的脚本:
1 2 3 4 5 6 7 8 9 10 11 | [root@func-redis-001 ~] # cat check_redis.sh #这个脚本是用来zabbix监控自建redis的 #!/bin/bash PORT= '6379' PASSWD=‘REDIS密码’ STATUS_redis=$(redis-cli -h '127.0.0.1' -p $PORT -a $PASSWD ping ) if [ "$STATUS_redis" == 'PONG' ]; then echo '1' else echo '0' fi |
然后更改zabbix_agentd.conf,如下:
1 2 | UserParameter=redis_status[*],redis-cli -h '127.0.0.1' -p $1 info | grep -w $2 | awk -F ':' '{print $NF}' UserParameter=redis_ping, sudo sh /root/check_redis .sh |
修改/etc/sudoers文件如下:
1 2 3 4 | ## Allow root to run any commands anywhere root ALL=(ALL) ALL zabbix ALL=(ALL) NOPASSWD:ALL #这个是新增 Defaults:zabbix !requiretty #这个是新增 |
保存之后,重启zabbix-agent服务,由于我这个redis是通过zabbix-proxy监控的,所以在zabbix-proxy一端用zabbix_get来查看结果:
然后在zabbix-proxy的模板里面添加一些需要监控的item即可,有必要的话可以设置trigger+action用来报警,如图:
最后就是grafana搞一个炫酷的图表来,如图:
最后一点,关于redis的内存优化,各位可以来看看:,写的很全面了。还有zabbix各种模板整理,有需要的同学也可以去下载: 。
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/2047273
转载地址:http://prqpo.baihongyu.com/