本文主要介绍zabbix宏的简单使用,通过自定义脚本监控redis相关指标。

zabbix监控redis需要自定义脚本去监控,网络上的脚本对于在一台机器上有多个redis实例不是很实用。于是修改了下监控脚本,使其可以接受传入端口参数。

原理:通过redis客户端连接命令,过滤出info输出的信息

 

一、zabbix宏介绍及定义

1.宏介绍

(1)宏是一种抽象,他根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换,可以理解为变量。

(2)zabbix有许多内置的宏,如{HOST.NAME}{HOST.IP}{TRIGGER.DESCRIPTION}{TRIGGER.NAME}{TRIGGER.EVENTS.ACK}

(3)为了更强的灵活性,zabbix支持全局、模版或主机级别自定义宏,用户自定义宏要使用"{$MACRO}"这种特殊的语法格式,宏的名称只能使用大写字母、数字及下划线

(4)宏可以应用在item keysdescriptionstrigger名称和表达 式、主机接口IP/DNS及端口、discovery机制的SNMP协议 的相关信息中等

(5)当在多个监控项中重复引用同样的值时,此时使用宏方便后续修改

2.宏的优先级

优先使用主机宏,其次模板宏,最后使用全局宏

3.主机宏的定义

这里定义redis实例端口

选择配置---->主机---->选择相应的主机

wKioL1fYxhzwue7HAABqETj0dqA995.png-wh_50

4.模板宏的定义

选择配置---->模板---->选择相应的模板

wKiom1fYxi6zL3SbAABELKMEI1g306.png-wh_50

5.全局宏的定义

选择管理---->一般---->选择宏

wKioL1fYxjmT8hWWAAAni8ZyVP4456.png-wh_50

二、创建监控采集脚本

1.脚本内容:

#catcheck_redis.sh

#!/bin/bash

REDISPATH="/usr/local/redis3379_6_test/bin/redis-cli"

HOST="127.0.0.1"

PORT="$1"

REDIS_PA="$REDISPATH -h $HOST -p $PORT info"

REDIS_PI="$REDISPATH -h $HOST -p $PORT ping"

if [[ $# == 2 ]];then

  case $2 in

# memory

    used_memory)

      result=`$REDIS_PA|/bin/grep used_memory|awk -F":" '{print $NF}'|awk 'NR==1'`

      echo $result

      ;;

    used_memory_human)

      result=`$REDIS_PA|/bin/grep used_memory_human | awk -F":" '{print $NF}'|awk -F'K' '{print $1}'`

      echo $result

      ;;

    used_memory_peak_human)

      result=`$REDIS_PA|/bin/grep used_memory_peak_human | awk -F":" '{print $NF}'|awk -F'K' '{print $1}'`

      echo $result

      ;;

    used_memory_peak)

      result=`$REDIS_PA|/bin/grep used_memory_peak|awk -F":" '{print $NF}'|awk 'NR==1'`

      echo $result

      ;;

# status

    instantaneous_ops_per_sec)

      result=`$REDIS_PA|/bin/grep -w "instantaneous_ops_per_sec" | awk -F':' '{print $2}'`

      echo $result

      ;;

    connected_clients)

      result=`$REDIS_PA|/bin/grep connected_clients|awk -F":" '{print $NF}'`

      echo $result

      ;;

statu)

  result=`$REDIS_PI|/bin/grep -c PONG`

  echo $result

  ;;

# Replication

    role)

      result=`$REDIS_PA|/bin/grep role | awk -F':' '{print $NF}'`

      echo $result

      ;;

    connected_slaves)

      result=`$REDIS_PA|/bin/grep -w "connected_slaves" | awk -F':' '{print $2}'`

      echo $result

      ;;

master_link_status)

      result=`$REDIS_PA|/bin/grep -w "master_link_status"|awk -F':' '{print $2}'|/bin/grep -c up`

      echo $result

      ;;

  esac

# db0:key

elif [[ $# == 3 ]];then

  case $3 in

    keys)

      result=`$REDIS_PA| /bin/grep -w "db0"| /bin/grep -w "$2" | /bin/grep -w "keys" | awk -F'=|,' '{print $2}'`

      echo $result

      ;;

    expires)

      result=`$REDIS_PA| /bin/grep -w "db0"| /bin/grep -w "$2" | /bin/grep -w "expires" | awk -F'=|,' '{print $4}'`

      echo $result

      ;;

    avg_ttl)

      result=`$REDIS_PA|/bin/grep -w "db0"| /bin/grep -w "$2" | /bin/grep -w "avg_ttl" | awk -F'=|,' '{print $6}'`

      echo $result

      ;;

    *)

      echo "Usage:$0{db0 keys|db0 expires|db0 avg_ttl}"

      ;;

  esac

fi

2.脚本使用

存放位置:/usr/local/zabbix/etc/scripts

功能:脚本能接受三个参数传入,监控redis实例是否在线、内存使用情况、客户端连接数、主从同步状态等

三、修改agent配置文件

1.修改zabbix_agentd.conf

Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/

2.zabbix_agentd.conf.d下定义监控redis的key

#cat redis_info.conf
UserParameter=redis_info[*],/usr/local/zabbix/etc/scripts/check_redis.sh $1 $2 $3

3.重启agent服务

四、在web界面创建监控项

1.创建redis状态items

wKioL1fYxlOi8qCiAACaSwDKbKs064.png-wh_50

2.创建redis内存使用情况items

wKiom1fYxmDw148pAACbtPHeEjk971.png-wh_50

3.创建db0平均命中率items

wKioL1fYxnHQGnBgAACgcgqXOxI007.png-wh_50

 

说明:

1.第一个参数为主机宏中定义的实例端口,第二个参数为监控的信息,这些参数将会传递到监控脚本中,监控脚本根据传入的参数获取相关监控信息。

2.第一个参数为主机宏中定义的实例端口,第二个参数为db名称,第三个参数为监控的信息,这些参数将会传递到监控脚本中,监控脚本根据传入的参数获取相关监控信息。

五、查看监控数据

选择监测中---->最新数据---->选择相应过滤条件

wKiom1fYxoOCp5fJAADXp0l_9NE908.png-wh_50