01:zabbix监控redis
一、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 用户无密码运行 netstat 及 Disable 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的更多相关文章
- Zabbix应用六:Zabbix监控Redis
利用Zabbix监控Redis Zabbix监控redis就比较简单了,因为zabbix官方提供了监控redis的模版和脚本,而且脚本有nodejs和python两种,下载地址:https://git ...
- Zabbix 监控redis
Zabbix 监控redis 1.监控脚本,github上的 [root@localhost ~]# cat /etc/zabbix/script/redis-status.sh #!/bin/bas ...
- Zabbix监控redis status
概述 zabbix采用Trapper方式监控redis status 原理 redis-cli info命令得到redis服务器的统计信息,脚本对信息分两部分处理: (1)# Keyspace部分为Z ...
- 最新 centos7下zabbix 监控redis状态
准备 先准备两台服务器,已经部署好了zabbix-sever和zabbix-agent zabbix-server 192.168.1.70 centos7.2 zabbix-agent 192.16 ...
- 01.Zabbix监控快速入门
1.监控知识基本概述 1.为什么要使用监控 1.对系统不间断实时监控 2.实时反馈系统当前状态 3.保证服务可靠性安全性 4.保证业务持续稳定运行 2.如何进行监控,比如我们需要监控磁盘的使用率 1. ...
- zabbix监控redis多实例(low level discovery)
对于多实例部署的tomcat.redis等应用,可以利用zabbix的low level discovery功能来实现监控,减少重复操作. 注:Zabbix版本: Zabbix 3.0.2 一.服务 ...
- zabbix监控redis
导入监控模板 点击[configuration]-->[templates]-->[import],导入xml监控模板. 配置客户端key 在被监控的主机上,新建/etc/zabbix/z ...
- zabbix监控redis性能
创建采集脚本 mkdir -p /etc/zabbix/scripts chown -R zabbix.root /etc/zabbix/scripts vim redis_status.sh #! ...
- (十二)zabbix监控redis
1)agent端配置 安装redis yum install epel-release -y yum install redis -y 配置认证密码 #vim /etc/redis.conf requ ...
随机推荐
- adb: failed to install xxx.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package com.xxx.deliveryrobot signatures do not match the previously installed version; ignoring!]
解决方法:我是在安装软件时出现的这个错误,先卸载再安装即可 卸载: adb uninstall "com.yourapp.yourapp" 安装: adb install your ...
- 快递100API接口调用代码示例
package com.util; import java.io.IOException; import java.io.InputStream; import java.net.MalformedU ...
- Ubuntu16 nginx安装http_image_filter_module模块
目录 配置image_filter 配置 重启nginx 如何安装呢? 安装image_filter模块依赖的库. 查看之前的配置 添加上图片模块[由于它是系统模块,不需要额外下载,直接添加就可以了] ...
- iOS开发网络篇—Socket编程
一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程 ...
- Android安装包apk文件在某些版本操作系统上安装解析包出错问题的解决办法
当我们将Android升级功能的中的下载新版本apk文件存放在data/data/xxx.apk位置时,在有的些版本的手机中安装可能会出现安装包解析出错的问题,对于该问题的解决方案是提升该文件的权限. ...
- hdu2177威佐夫博弈
输的话输出0,赢就输出1并且输出第一步走后的数目 威佐夫博弈判断胜负 原理及常见题型求法: http://blog.csdn.net/y990041769/article/details/216940 ...
- <p>1、查询端口号占用,根据端口查看进程信息</p>
2017年6月份的时候,我就着手在公司推广git,首先我自己尝试搭建了GitLab来管理代码,并且通过以下博客记录了GitLab的搭建,以及GitLab备份,GitLab升级等事情. git学习——& ...
- MySQL_explain关键字分析查询语句
版权声明:本文为博主原创文章,转载请注明出处. 通过对查询语句的分析,可以了解查询语句的执行情况.MySQL中,可以使用EXPLAIN语句和DESCRIBE语句来分析查询语句. EXPLAIN语句的基 ...
- URAL 1040 Airline Company 构造,思路 难度:2
http://acm.timus.ru/problem.aspx?space=1&num=1040 题目要求在一个联通无向图中找出一种方法给边标号使得任意一个有多条边的点,边的号码的最大公约数 ...
- openfalcon源码分析之hbs
openfalcon源码分析之hbs 本节内容 hbs功能 hbs源码分析 hbs设计优劣 1. hbs功能 hbs在整个open-falcon项目中承担的角色就是连接数据库,作为数据库缓存,缓存配置 ...