在ageng端创建脚本
mdkir -p /etc/zabbix/scripts
vim redis_low_discovery.sh
#/bin/bash
#Script_name redis_low_discovery.sh
redis() {
port=($(netstat -tpln | awk -F "[ :]+" '/redis/ && /0.0.0.0/ {print $5}'))
printf '{\n'
printf '\t"data":[\n'
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1`
printf '\t {\n'
printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"},\n"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1`
printf '\t {\n'
printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"}\n"
fi
done
printf '\t ]\n'
printf '}\n'
}
$1
修改属主
chown -R zabbix.zabbix /etc/zabbix/scripts/
给权限
chmod 755 scripts/redis_low_discovery.sh
添加UserParameter
vim /etc/zabbix/zabbix_agentd.conf
UserParameter=zabbix_low_discovery[*],/bin/bash /etc/zabbix/scripts/redis_low_discovery.sh $1
UserParameter=redis_stats[*],(echo info; sleep 1) | telnet 127.0.0.1 $1 2>&1 |grep $2|cut -d : -f2
如果不让用telnet协议,还可以
UserParameter=redis_stats[*],/usr/local/bin/redis-cli -h 127.0.0.1 -p $1 info|grep $2|cut -d : -f2
需要开启telnet服务,没有的需要安装一个telnet
yum install telnet -y
添加完重启agent端
service zabbix-agent restart
关闭requiretty
sed -i 's/^Defaults.*.requiretty/#Defaults requiretty/' /etc/sudoers
或者 vim /etc/sudoers #56行
server端
使用zabbix_get获取redis键值
cd /usr/bin
./zabbix_get -s 192.168.0.11 -k "zabbix_low_discovery[redis]"
如果运行报错
那就chmod +s /bin/netstat
chmod +s 是什么意思
为了方便普通用户执行一些特权命令,SUID/SGID程序允许普通用户以root身份暂时执行该程序,并在执行结束后再恢复身份。
zabbix-server web界面导入模板以及主机连接模板,还需要设置正则等
在“管理”—> “一般”—>“正则表达式”里,选择“新的正则表达式”
设置如下:
设置正则
Redis regex
Result TRUE = ^(6380|17761|17762|18005|23581)$
最后把模板添加到主机里面去
有的可能自动发现没有开启
检测 是否取到redis数据的值:
配置---模板---
在终端里面
cd /usr/bin
./zabbix_get -s 192.168.0.11 -k "redis_stats[6381,uptime_in_seconds]"
./zabbix_get -s 192.168.0.11 -k "redis_stats[6380,uptime_in_seconds]"
然后 看数据图