路漫漫其修远兮
吾将上下而求索

zabbix学习:redis监控项配置

zabbix_agentd为编译安装,安装版本:zabbix-3.2.10
下面的示例是redis自动发现,主动模式的配置方式

zabbix_agentd安装位置为:
[root@localhost /usr/local/zabbix_agent]#ls
bin  etc  lib  run  sbin  share

配置文件里面要将/usr/local/zabbix_agent/etc/zabbix_agentd.conf.d此目录包含进去,所有自定义的参数,脚本都放在这个目录里面
[root@localhost /usr/local/zabbix_agent/etc]#vim zabbix_agentd.conf
Include=/usr/local/zabbix_agent/etc/zabbix_agentd.conf.d/*.conf    */

下面是自定义目录的文件列表,里面包含了两个需要监控的项:adx,redis,其中redis需要自动发现
[root@localhost /usr/local/zabbix_agent/etc/zabbix_agentd.conf.d]#ll
total 20
-rw-r--r-- 1 root root  867 Dec 21 15:49 discovery_redis.sh
-rw-r--r-- 1 root root  320 Dec 25 10:08 monitor_adx.sh
-rw-r--r-- 1 root root 1365 Dec 25 17:24 monitor_redis.sh
-rw-r--r-- 1 root root   92 Dec 21 16:32 user_parameter_adx.conf
-rw-r--r-- 1 root root  204 Dec 27 11:39 user_parameter_redis.conf

将目录下的所有以.sh结尾的脚本都添加执行权限
[root@localhost /usr/local/zabbix_agent/etc/zabbix_agentd.conf.d]#chmod +x *.sh
total 20
-rwxr-xr-x 1 root root  867 Dec 21 15:49 discovery_redis.sh
-rwxr-xr-x 1 root root  320 Dec 25 10:08 monitor_adx.sh
-rwxr-xr-x 1 root root 1365 Dec 25 17:24 monitor_redis.sh
-rw-r--r-- 1 root root   92 Dec 21 16:32 user_parameter_adx.conf
-rw-r--r-- 1 root root  204 Dec 27 11:39 user_parameter_redis.conf

下面是redis方面自定义的参数,监控项
当调用discovery_redis此监控项时,会执行后面的discovery_redis.sh脚本,返回机器上已有redis的监听端口
当调用Redis.Info此监控项时,会执行后面的monitor_redis.sh脚本,返回机器上某个redis的监控参数,接收参数为:端口,监控项
[root@localhost /usr/local/zabbix_agent/etc/zabbix_agentd.conf.d]#cat user_parameter_redis.conf 
UserParameter=Redis.Info[*],/usr/local/zabbix_agent/etc/zabbix_agentd.conf.d/monitor_redis.sh $1 $2
UserParameter=discovery_redis,/usr/local/zabbix_agent/etc/zabbix_agentd.conf.d/discovery_redis.sh

下面是redis自动发现端口的脚本
[root@localhost /usr/local/zabbix_agent/etc/zabbix_agentd.conf.d]#cat discovery_redis.sh 
#!/bin/bash
#Script_name discovery_redis.sh
func_redis() {
        port=($(sudo 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'
}

func_redis

下面要zabbix用户执行netstat -tpln命令,需要赋予sudo权限
[root@localhost /usr/local/zabbix_agent/etc/zabbix_agentd.conf.d]#tail /etc/sudoers
#includedir /etc/sudoers.d

#Defaults    requiretty
Defaults:redis    !requiretty
redis  ALL=(root)      NOPASSWD:/sbin/ip, /sbin/arping, /bin/sendEmail

#Defaults    requiretty
Defaults:redis    !requiretty
redis  ALL=(root)      NOPASSWD:/sbin/ip, /sbin/arping, /bin/sendEmail
zabbix  ALL=(root)      NOPASSWD:/bin/netstat   #这里允许zabbix用户执行netstat命令

下面是redis自动发现端口的脚本执行结果,为json数据
[root@localhost /usr/local/zabbix_agent/etc/zabbix_agentd.conf.d]#bash discovery_redis.sh 
{
        "data":[
         {
                        "{#REDISPORT}":"6379"},
         {
                        "{#REDISPORT}":"6380"}
         ]
}


当调用Redis.Info此监控项时,会执行后面的monitor_redis.sh脚本,返回机器上某个redis的监控参数,接收参数为:端口,监控项
[root@localhost /usr/local/zabbix_agent/etc/zabbix_agentd.conf.d]#cat monitor_redis.sh 
#! /bin/bash
#Name: montior_redis.sh


REDISCLI="/usr/local/redis-6380/bin/redis-cli"
HOST="127.0.0.1"
PORT=$1

#redis_status=`$REDISCLI -h $HOST -p $PORT ping 2> /dev/null | grep -c 'PONG'`  #在线


if [[ $# == 2 ]];then
        case $2 in
                status)
                        result=`$REDISCLI -h $HOST -p $PORT ping | grep -c 'PONG'`
                ;;
                uptime)
                        result=`$REDISCLI -h $HOST -p $PORT info | grep -w "uptime_in_seconds" | awk -F':' '{print $2}'`
                ;;
        
                connected_clients)
                        result=`$REDISCLI -h $HOST -p $PORT info | grep -w "connected_clients" | awk -F':' '{print $2}'`
                ;;
                blocked_clients)
                        result=`$REDISCLI -h $HOST -p $PORT info | grep -w "blocked_clients" | awk -F':' '{print $2}'`
                ;;
        
                used_memory)
                        result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_memory" | awk -F':' '{print $2}'`
                ;;
                used_cpu_sys)
                        result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_cpu_sys" | awk -F':' '{print $2}'`
                ;;
                used_cpu_user)
                        result=`$REDISCLI -h $HOST -p $PORT info | grep -w "used_cpu_user" | awk -F':' '{print $2}'`
                ;;

                rdb_last_bgsave_status)
                        result=`$REDISCLI -h $HOST -p $PORT info | grep -w "rdb_last_bgsave_status" | awk -F':' '{print $2}' | grep -c ok`
                ;;
        rdb_last_bgsave_time_sec)
                        result=`$REDISCLI -h $HOST -p $PORT info | grep -w "rdb_last_bgsave_time_sec" | awk -F':' '{print $2}'`
                ;;

        esac

        echo $result

fi

在zabbix面板上面:administration–> general–> regular expression

image.png

当执行discovery_redis此监控项,返回给server端json数据时,会根据Redis for discovery正则表达式来进行过滤,取得正确值,然后对每个redis进行采集数据

image.png

image.png

配置文件,脚本文件和模板放到gitlab

参考文档:http://noodle.blog.51cto.com/2925423/1812845

未经允许不得转载:江哥架构师笔记 » zabbix学习:redis监控项配置

分享到:更多 ()

评论 抢沙发

评论前必须登录!