Zabbix監控Redis
要獲得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,記錄了是客戶端的相關信息:
[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,記錄的是內存的相關信息:
[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,那就是統計的相關信息:
[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的相關信息:
[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,那麽就會返回數據庫相關的統計信息:
[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的數量(這個值減少是正常的)
其他還有更多信息,請移步:http://redisdoc.com/server/info.html 。感謝前人栽樹!!!
使用zabbix監控redis
用zabbix監控redis是一個很簡單的事兒,只需要把需要監控的數據提取出來即可。而提取數據的方法就是利用info去得到對應的數值。
首先先來一個判斷redis服務器連接的腳本:
[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,如下:
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文件如下:
## 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的內存優化,各位可以來看看:https://cachecloud.github.io/2017/02/16/Redis%E5%86%85%E5%AD%98%E4%BC%98%E5%8C%96/,寫的很全面了。還有zabbix各種模板整理,有需要的同學也可以去下載:https://monitoringartist.github.io/zabbix-searcher/ 。
Zabbix監控Redis