本文主要介绍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 keys和descriptions、trigger名称和表达 式、主机接口IP/DNS及端口、discovery机制的SNMP协议 的相关信息中等
(5)当在多个监控项中重复引用同样的值时,此时使用宏方便后续修改
2.宏的优先级
优先使用主机宏,其次模板宏,最后使用全局宏
3.主机宏的定义
这里定义redis实例端口
选择配置---->主机---->选择相应的主机
4.模板宏的定义
选择配置---->模板---->选择相应的模板
5.全局宏的定义
选择管理---->一般---->选择宏
二、创建监控采集脚本
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
2.创建redis内存使用情况items
3.创建db0平均命中率items
说明:
1.第一个参数为主机宏中定义的实例端口,第二个参数为监控的信息,这些参数将会传递到监控脚本中,监控脚本根据传入的参数获取相关监控信息。
2.第一个参数为主机宏中定义的实例端口,第二个参数为db名称,第三个参数为监控的信息,这些参数将会传递到监控脚本中,监控脚本根据传入的参数获取相关监控信息。
五、查看监控数据
选择监测中---->最新数据---->选择相应过滤条件