–
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
当执行discovery_redis此监控项,返回给server端json数据时,会根据Redis for discovery正则表达式来进行过滤,取得正确值,然后对每个redis进行采集数据
配置文件,脚本文件和模板放到gitlab
参考文档:http://noodle.blog.51cto.com/2925423/1812845
–
–
–
评论前必须登录!
注册