如果主机有多个redis实例可以使用lld(low level discovery)方式监控redis,只需要在正则表达式里把需要监控的端口标上,就可以监控redis多实例。


1,agent端

在ageng端创建可以识别redis多实例的脚本(通过端口判断)

cd /server/scripts
cat redis_low_discovery.sh
#!/bin/bash
#Fucation:mysql low-level discovery
#Script_name redis_low_discovery.sh
redis() {
    #port=($(netstat -tpln | awk -F "[ :]+" '/redis/ && /0.0.0.0/ {print $5}'))
    port=($(ps aux|grep redis-server|grep -v grep|awk -F ":" '{print $3}'|awk '{print $1}'))
    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 /server/scripts/

给权限

chmod 755 redis_low_discovery.sh

添加UserParameter

vim /usr/local/zabbix/etc/zabbix_agentd.conf
UserParameter=zabbix_low_discovery[*],/bin/bash /server/scripts/redis_low_discovery.sh $1
#UserParameter=redis_stats[*],(echo info; sleep 1) | telnet 10.96.170.30 $1 2>&1 |grep $2|cut -d : -f2
UserParameter=redis_stats[*],/usr/local/bin/redis-cli -h 10.96.170.31 -p $1 info|grep $2|cut -d : -f2

如果不让用telnet协议,还可以使用/usr/local/bin/redis-cli,本次我的配置中telnet没有成功,因此把telnet注掉了。

关闭requiretty

sed -i 's/^Defaults.*.requiretty/#Defaults    requiretty/' /etc/sudoers

或者 vim /etc/sudoers  #注掉第56行

重启zabbix服务

/etc/init.d/zabbix_agentd start

2,server端

使用zabbix_get获取redis键值

/usr/local/zabbix/bin/zabbix_get -s 10.96.170.31 -k zabbix_low_discovery[redis]
{
    "data":[
     {
            "{#REDISPORT}":"6379"},
     {
            "{#REDISPORT}":"6380"}
     ]
}

检测是否取到redis数据的值:

/usr/local/zabbix/bin/zabbix_get -s 10.96.170.31 -k "redis_stats[6379,uptime_in_seconds]"
33168128

3,模板配置

模板导入

把Template Redis Auto Discovery导入到zabbix里

设置正则

在 "管理" —> "一般" —> "正则表达式" ,选择"新的正则表达式"

在 "Administration" —> "General" —> "Regular expressions" ,选择"New regular expression"

设置如下:

NAME:Redis regex
Expression type:Result is TRUE
Expression:^(6380|17761|17762|18005|23581)$

在表达式(Expression)这里把redis实例的端口写出来,你用到哪些,或是后面可能要用到哪些都在这里写出来

主机关联模板

给需要监控redis实例的主机添加模板即可监控,默认是3600秒后自动更新,可以自行修改更新间隔


模板下载:https://down.51cto.com/data/2466469