一、zabbix 自动发现并监控redis多实例

1.1 编写脚本

1.1.1 redis_low_discovery.sh

用于发现redis多实例

[root@redis02 homed]# cat /usr/local/zabbix/redis_low_discovery.sh
#!/bin/bash
# line:           V1.0
# mail:           gczheng@139.com
# data:           2018-08-06
# script_name:    redis_low_discovery.sh
# Fucation:       redis low-level discovery

redis() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/redis-serv*/ && /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'
}

sentinel() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/redis-sent*/ && /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

[root@redis02 homed]# 

1.1.2 redis_get_values.sh

用于获取redis值

[root@redis02 ~]# vim /usr/local/zabbix/redis_get_values.sh
#!/bin/sh
# line:           V1.0
# mail:           gczheng@139.com
# data:           2018-08-06
# script_name:    redis_get_values.sh

REDIS_CLI=/homed/redis/bin/redis-cli.exe

while getopts "p:k:P:" opt
do
        case $opt in
                p ) redis_port=$OPTARG;;
                k ) redis_info_key=$OPTARG;;
                P ) redis_passwd=$OPTARG;;
                ? )
                echo '参数错误!'
                exit 1;;
        esac
done

#判断redis端口和info健值是否存在
if [ ! "${redis_port}" ] || [ ! "${redis_info_key}" ];then
        echo "参数不存在"
        exit 1
fi

function chk_result_status()
{
#判断result值是否存在
if [ ! "$result" ] ;then
        echo 0
else
    echo $result
fi
}

##判断是否使用密码登陆
if [ "${redis_passwd}" ];then
        REDIS_COMM="${REDIS_CLI} -a ${redis_passwd} -p ${redis_port} info"
else
        REDIS_COMM="${REDIS_CLI} -p ${redis_port} info"
fi

function get_values()
{
if [ "master_link_status" == "${redis_info_key}" ];then
    result=`$REDIS_COMM|/bin/grep -w "master_link_status"|awk -F':' '{print $2}'|/bin/grep -c up`
    chk_result_status
elif [ "role" == "${redis_info_key}" ];then
    result=`$REDIS_COMM|/bin/grep -w "role"|awk -F':' '{print $2}'|/bin/grep -c master`
    chk_result_status
elif [ "rdb_last_bgsave_status" == "${redis_info_key}" ];then
    result=`$REDIS_COMM|/bin/grep -w "rdb_last_bgsave_status" | awk -F':' '{print $2}' | /bin/grep -c ok`
    chk_result_status
elif [ "aof_last_bgrewrite_status" == "${redis_info_key}" ];then
    result=`$REDIS_COMM|/bin/grep -w "aof_last_bgrewrite_status" | awk -F':' '{print $2}' | /bin/grep -c ok`
    chk_result_status
elif [ `echo "${redis_info_key}" |egrep -cw 'dict_keys|dict_expires|intdict_keysi|intdict_expires|sentinel_status|sentinel_slaves|sentinel_nums'` == "1" ];then
    #cn=`echo "${redis_info_key}" |awk -F "," '{print $2}'`
    cn=`echo "${redis_info_key}"`
    case $cn in
    dict_keys)
        result=`$REDIS_COMM| /bin/grep -w "db0"|/bin/grep -w "dict"|/bin/grep -w "keys" | awk -F'=|,' '{print $3}'`
                chk_result_status
            ;;
     dict_expires)
            result=`$REDIS_COMM| /bin/grep -w "db0"|/bin/grep -w "dict"|/bin/grep -w "expires" | awk -F'=|,' '{print $5}'`
            chk_result_status
            ;;
     intdict_keys)
            result=`$REDIS_COMM|/bin/grep -w "db0"|/bin/grep -w "intdict" |/bin/grep -w "keys" | awk -F'=|,' '{print $3}'`
            chk_result_status
            ;;
         intdict_expires)
            result=`$REDIS_COMM|/bin/grep -w "db0"|/bin/grep -w "intdict" |/bin/grep -w "expites" | awk -F'=|,' '{print $5}'`
                chk_result_status
                ;;
          sentinel_status)
            result=`$REDIS_COMM|/bin/grep -w "master0"|awk -F'=|,' '{print $4}'| /bin/grep -c ok`
                chk_result_status
                ;;
          sentinel_slaves)
            result=`$REDIS_COMM|/bin/grep -w "master0"|awk -F'=|,' '{print $8}'`
                chk_result_status
                ;;
          sentinel_nums)
            result=`$REDIS_COMM|/bin/grep -w "master0"|awk -F'=|,' '{print $10}'`
                chk_result_status
                ;;
    esac
else
    result=`$REDIS_COMM|/bin/grep -w  "${redis_info_key}"|cut -d: -f2`
    chk_result_status
fi
}

get_values

二、授权zabbix使用netstat

允许 zabbix 用户无密码运行 netstatDisable requiretty

[root@redis02 homed]# echo "zabbix ALL=(root) NOPASSWD:/bin/netstat">>/etc/sudoers
[root@redis02 homed]# sed -i 's/^Defaults.*.requiretty/#Defaults    requiretty/' /etc/sudoers

三、配置zabbix UserParameter

修改/etc/zabbix/zabbix_agentd.conf

[root@redis02 homed]# grep -Ev "^$|^#" /etc/zabbix/zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.49.245
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf

#添加以下内容
UnsafeUserParameters=1
UserParameter=redis_discovery[*],/bin/bash /usr/local/zabbix/redis_low_discovery.sh $1
UserParameter=redis_items[*],/bin/bash /usr/local/zabbix/redis_get_values.sh  -p $1 -k $2
UserParameter=sentinel_items[*],/bin/bash /usr/local/zabbix/redis_get_values.sh  -p $1 -k $2

四、重启agent并尝试获取值

重启zabbix-agent

[root@redis02 homed]# systemctl restart zabbix-agent.service
[root@redis02 homed]# systemctl status zabbix-agent.service

zabbix server主机上用zabbix_get 获取值

[root@node01 /]# zabbix_get -s 192.168.49.252 -k redis_discovery[redis]
{
    "data":[
     {
            "{#REDISPORT}":"17035"},
     {
            "{#REDISPORT}":"6379"},
     {
            "{#REDISPORT}":"13135"},
     {
            "{#REDISPORT}":"7379"},
     {
            "{#REDISPORT}":"11835"},
     {
            "{#REDISPORT}":"12635"},
     {
            "{#REDISPORT}":"13635"}
     ]
}
[root@node01 /]# zabbix_get -s 192.168.49.252 -k redis_discovery[sentinel]
{
    "data":[
     {
            "{#REDISPORT}":"17034"},
     {
            "{#REDISPORT}":"13134"},
     {
            "{#REDISPORT}":"7378"},
     {
            "{#REDISPORT}":"11834"},
     {
            "{#REDISPORT}":"12634"},
     {
            "{#REDISPORT}":"13634"}
     ]
}

[root@node01 ~]#  zabbix_get -s 192.168.49.252 -p 10050  -k redis_items[7379,role]
slave

[root@node01 ~]# zabbix_get -s 192.168.49.252 -p 10050  -k redis_items[7379,uptime_in_seconds]
173728

[root@node01 ~]# zabbix_get -s 192.168.49.252 -p 10050  -k sentinel_items[7378,sentinel_status]
0

[root@node01 ~]# zabbix_get -s 192.168.49.252 -p 10050  -k sentinel_items[7378,sentinel_nums]
1

五、导入模板

导入zbx_export_templates,并连接监控主机

模板地址

图形展示

01:zabbix监控redis的更多相关文章

  1. Zabbix应用六:Zabbix监控Redis

    利用Zabbix监控Redis Zabbix监控redis就比较简单了,因为zabbix官方提供了监控redis的模版和脚本,而且脚本有nodejs和python两种,下载地址:https://git ...

  2. Zabbix 监控redis

    Zabbix 监控redis 1.监控脚本,github上的 [root@localhost ~]# cat /etc/zabbix/script/redis-status.sh #!/bin/bas ...

  3. Zabbix监控redis status

    概述 zabbix采用Trapper方式监控redis status 原理 redis-cli info命令得到redis服务器的统计信息,脚本对信息分两部分处理: (1)# Keyspace部分为Z ...

  4. 最新 centos7下zabbix 监控redis状态

    准备 先准备两台服务器,已经部署好了zabbix-sever和zabbix-agent zabbix-server 192.168.1.70 centos7.2 zabbix-agent 192.16 ...

  5. 01.Zabbix监控快速入门

    1.监控知识基本概述 1.为什么要使用监控 1.对系统不间断实时监控 2.实时反馈系统当前状态 3.保证服务可靠性安全性 4.保证业务持续稳定运行 2.如何进行监控,比如我们需要监控磁盘的使用率 1. ...

  6. zabbix监控redis多实例(low level discovery)

    对于多实例部署的tomcat.redis等应用,可以利用zabbix的low level discovery功能来实现监控,减少重复操作.  注:Zabbix版本: Zabbix 3.0.2 一.服务 ...

  7. zabbix监控redis

    导入监控模板 点击[configuration]-->[templates]-->[import],导入xml监控模板. 配置客户端key 在被监控的主机上,新建/etc/zabbix/z ...

  8. zabbix监控redis性能

    创建采集脚本 mkdir -p /etc/zabbix/scripts chown -R zabbix.root /etc/zabbix/scripts vim redis_status.sh  #! ...

  9. (十二)zabbix监控redis

    1)agent端配置 安装redis yum install epel-release -y yum install redis -y 配置认证密码 #vim /etc/redis.conf requ ...

随机推荐

  1. Learning Ansible with Vagrant

    介绍 Vagrant介绍 Vagrant是一款构建虚拟开发环境的工具,Vagrant的使用依赖于VirtualBox,VMware等一些虚拟机,通过Vagrant能更加方便的管理虚拟机,同时还能够通过 ...

  2. TC 配置插件

    转载:http://hi.baidu.com/accplaystation/item/07534686f39dc329100ef310 1.插件下载地址:http://www.topcoder.com ...

  3. 2018-2019-2《网络对抗技术》Exp0 Kali安装 Week1

    2018-2019-2<网络对抗技术>Exp0 Kali安装 Week1 Kali的安装 设置虚拟机的名称和操作系统 为虚拟机分配虚拟内存,大小为4096M,分配存储空间,大小为25.0G ...

  4. 10个有趣的Javascript和CSS库

    Tailwind CSS Tailwind是用于构建自定义用户界面的实用CSS框架. 每个Tailwind小应用都有多种尺寸,这使得创建响应式界面变得非常简单. 您可以自定义颜色,边框尺寸,字体,阴影 ...

  5. 快速使用CSS 弹性盒子

    布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现:2009年,W3C提出了一种新的方案 ...

  6. appium+pytest+allure+jenkins 如何实现多台手机连接

    使用appium可以实现app自动化测试,我们之前是连接一台手机去运行,如何同时连接多台手机呢?很多人可能想到的是多线程(threading).今天分享一种比多线程更简单的方法,虽然不是多台手机同时运 ...

  7. Java网络编程和NIO详解4:浅析NIO包中的Buffer、Channel 和 Selector

    Java网络编程与NIO详解4:浅析NIO包中的Buffer.Channel 和 Selector 转自https://www.javadoop.com/post/nio-and-aio 本系列文章首 ...

  8. git commit进行代码检查

    使用Ant Design Pro提交代码的时候进行代码检查报了很多错 git commit --no-verify -m "commit"   就可以跳过代码检查 或者在项目里新建 ...

  9. sqlplus环境设置

    1.0 --column 命令集                         改变列格式                {                column column_name1 f ...

  10. java实现的18位身份证格式验证算法

    公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.1.地址码表示编码对象常住户口所在县(市. ...