ZABBIX
Redis使用自帶的INFO命令,進行狀態監控。以一種易於解釋且易於閱讀的格式,返回關於 Redis 服務器的各種信息和統計數值。
1.配置所有Agent(標准化目錄結構)
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #編輯配置文件引用key
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell腳本
2.編寫Shell腳本
- 腳本端口、連接redis服務地址根據具體情況進行修改
- AUTH認證沒有開啟,將PASSWD修改為空即可。
[root@linux-node1 ~]# cd /etc/zabbix/scripts
[root@linux-node1 scripts]# vim redis_status.sh
#!/bin/bash
############################################################
# $Name: redis_status.sh
# $Version: v1.0
# $Function: Redis Status
# $Author: xuliangwei
# $organization: www.xuliangwei.com
# $Create Date: 2016-06-23
# $Description: Monitor Redis Service Status
############################################################
R_COMMAND="$1"
R_PORT="6379" #根據實際情況調整端口
R_SERVER="127.0.0.1" #根據具體情況調整IP地址
PASSWD="123" #如果沒有設置Redis密碼,為空即可
redis_status(){
(echo -en "AUTH $PASSWD\r\nINFO\r\n";sleep 1;) | /usr/bin/nc "$R_SERVER" "$R_PORT" > /tmp/redis_"$R_PORT".tmp
REDIS_STAT_VALUE=$(grep "$R_COMMAND:" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
echo "$REDIS_STAT_VALUE"
}
case $R_COMMAND in
used_cpu_user_children)
redis_status "$R_PORT" "$R_COMMAND"
;;
used_cpu_sys)
redis_status "$R_PORT" "$R_COMMAND"
;;
total_commands_processed)
redis_status "$R_PORT" "$R_COMMAND"
;;
role)
redis_status "$R_PORT" "$R_COMMAND"
;;
lru_clock)
redis_status "$R_PORT" "$R_COMMAND"
;;
latest_fork_usec)
redis_status "$R_PORT" "$R_COMMAND"
;;
keyspace_misses)
redis_status "$R_PORT" "$R_COMMAND"
;;
keyspace_hits)
redis_status "$R_PORT" "$R_COMMAND"
;;
keys)
redis_status "$R_PORT" "$R_COMMAND"
;;
expires)
redis_status "$R_PORT" "$R_COMMAND"
;;
expired_keys)
redis_status "$R_PORT" "$R_COMMAND"
;;
evicted_keys)
redis_status "$R_PORT" "$R_COMMAND"
;;
connected_clients)
redis_status "$R_PORT" "$R_COMMAND"
;;
changes_since_last_save)
redis_status "$R_PORT" "$R_COMMAND"
;;
blocked_clients)
redis_status "$R_PORT" "$R_COMMAND"
;;
bgsave_in_progress)
redis_status "$R_PORT" "$R_COMMAND"
;;
bgrewriteaof_in_progress)
redis_status "$R_PORT" "$R_COMMAND"
;;
used_memory_peak)
redis_status "$R_PORT" "$R_COMMAND"
;;
used_memory)
redis_status "$R_PORT" "$R_COMMAND"
;;
used_cpu_user)
redis_status "$R_PORT" "$R_COMMAND"
;;
used_cpu_sys_children)
redis_status "$R_PORT" "$R_COMMAND"
;;
total_connections_received)
redis_status "$R_PORT" "$R_COMMAND"
;;
*)
echo $"USAGE:$0 {used_cpu_user_children|used_cpu_sys|total_commands_processed|role|lru_clock|latest_fork_usec|keyspace_misses|keyspace_hits|keys|expires|expired_keys|connected_clients|changes_since_last_save|blocked_clients|bgrewriteaof_in_progress|used_memory_peak|used_memory|used_cpu_user|used_cpu_sys_children|total_connections_received}"
esac
Redis狀態參數解釋:
server : Redis 服務器信息,包含以下域:
redis_version : Redis 服務器版本
redis_git_sha1 : Git SHA1
redis_git_dirty : Git dirty flag
os : Redis 服務器的宿主操作系統
arch_bits : 架構(32 或 64 位)
multiplexing_api : Redis 所使用的事件處理機制
gcc_version : 編譯 Redis 時所使用的 GCC 版本
process_id : 服務器進程的 PID
run_id : Redis 服務器的隨機標識符(用於 Sentinel 和集群)
tcp_port : TCP/IP 監聽端口
uptime_in_seconds : 自 Redis 服務器啟動以來,經過的秒數
uptime_in_days : 自 Redis 服務器啟動以來,經過的天數
lru_clock : 以分鍾為單位進行自增的時鍾,用於 LRU 管理
clients : 已連接客戶端信息,包含以下域:
connected_clients : 已連接客戶端的數量(不包括通過從屬服務器連接的客戶端)
client_longest_output_list : 當前連接的客戶端當中,最長的輸出列表
client_longest_input_buf : 當前連接的客戶端當中,最大輸入緩存
blocked_clients : 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客戶端的數量
memory : 內存信息,包含以下域:
used_memory : 由 Redis 分配器分配的內存總量,以字節(byte)為單位
used_memory_human : 以人類可讀的格式返回 Redis 分配的內存總量
used_memory_rss : 從操作系統的角度,返回 Redis 已分配的內存總量(俗稱常駐集大小)。這個值和 top 、 ps 等命令的輸出一致。
used_memory_peak : Redis 的內存消耗峰值(以字節為單位)
used_memory_peak_human : 以人類可讀的格式返回 Redis 的內存消耗峰值
used_memory_lua : Lua 引擎所使用的內存大小(以字節為單位)
mem_fragmentation_ratio : used_memory_rss 和 used_memory 之間的比率
persistence : RDB 和 AOF 的相關信息
stats : 一般統計信息
replication : 主/從復制信息
cpu : CPU 計算量統計信息
commandstats : Redis 命令統計信息
cluster : Redis 集群信息
keyspace : 數據庫相關的統計信息
參數還可以是下面這兩個:
all : 返回所有信息
default : 返回默認選擇的信息
當不帶參數直接調用 INFO 命令時,使用 default 作為默認參數。
3.給腳本添加執行權限
[root@linux-node1 scripts]# chmod +x redis_status.sh
4.Zabbix權限不足處理辦法
[root@linux-node1 ~]# rm -f /tmp/redis_6379.tmp
5.key的redis_status.conf的子配置文件如下:
[root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/redis_status.conf
UserParameter=redis_status[*],/bin/bash /etc/zabbix/scripts/redis_status.sh "$1"
6.重啟zabbix-agent
[root@linux-node1 ~]# systemctl restart zabbix-agent
7.測試一定使用Zabbix_get來獲取值
[root@linux-node1 ~]# zabbix_get -s 192.168.90.11 -k redis_status[used_cpu_sys]
16.81
8.展示所有Key(記得將模板關聯主機)如圖4-14
圖4-14
9.查看圖形,如圖4-15、圖4-16(圖形自定義)
圖4-15
圖4-16