使用Zabbix去監控Redis

瞭解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的一些數據,如下:

image.png

可以看出,從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來查看結果:

1.png


然後在zabbix-proxy的模板裏面添加一些需要監控的item即可,有必要的話可以設置trigger+action用來報警,如圖:

image.png


最後就是grafana搞一個炫酷的圖表來,如圖:

image.png


最後一點,關於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/ 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章