需求:
公司最近用了一个叫做SSDB的东西,这个东西有点像redis,但是使用的硬盘存储,如果量比redis大,但速度肯定没redis快。然后PHP程序去连接SSDB的时候偶现大面积的timeout的问题,但是服务端日志没有报错。排查不到哪里出的问题。社区资料极少,但是发现每次出现timeout的时候看elk日志QPS相对也会升高,所以感觉是ssdb自身的QPS限制。但是找不到哪个参数是修改这个的,所以最后搞了一个ssdb双主的集群使用。
所以想加一个监控,主要监控SSDB的一些常用命令和其他的东西。但是网上找的基本都是同一个复制品。没啥参考作用,所以自己琢磨搞了一套。其他有需要的朋友可以用。
1、zabbix监控脚本
#!/bin/bash
# 因为SSDB不像redis可以直接在控制台上面执行info命令,所以要借助expect命令来交互式输入
# 这个也是SSDB让人诟病的一个地方,因为ssdb-cli没有密码的参数
#
cd `dirname $0`
flag=$1
detail=$2
# 截取前面三个字符串,判断是否是命令
cmd="${flag:0:3}"
if [ $# -eq 1 ];then
./ssdb_info.exp info cmd |grep -A 1 $flag | sed -n '2p'|awk '{print $1}'
elif [ $# -eq 2 -a $cmd == "cmd" ] ;then
case $detail in
"calls")
./ssdb_info.exp info cmd |grep -A 1 $flag | sed -n '2p' | awk '{print $2}'
;;
"time_wait")
./ssdb_info.exp info cmd |grep -A 1 $flag | sed -n '2p' | awk '{print $4}'
;;
"time_proc")
./ssdb_info.exp info cmd |grep -A 1 $flag | sed -n '2p' | awk '{print $6}'
;;
*)
echo "input error"
;;
esac
elif [ $# -eq 2 -a $cmd == "lev" ];then
case $detail in
"Files")
./ssdb_info.exp info |grep -A 7 $flag | sed -n '5p' |awk '{print $2}'
;;
"Size")
./ssdb_info.exp info |grep -A 7 $flag | sed -n '5p' |awk '{print $3}'
;;
"Time")
./ssdb_info.exp info |grep -A 7 $flag | sed -n '5p' |awk '{print $4}'
;;
"Read")
./ssdb_info.exp info |grep -A 7 $flag | sed -n '5p' |awk '{print $5}'
;;
"Write")
./ssdb_info.exp info |grep -A 1 $flag | sed -n '5p' |awk '{print $6}'
;;
*)
echo "input error"
;;
esac
elif [ $# -eq 2 ];then
./ssdb_info.exp info cmd | grep -A 3 $flag | grep $detail|awk '{print $3}'
fi
ssdb_info.exp脚本
#!/usr/bin/expect
set cmd [lindex $argv 0]
set param [lindex $argv 1]
set timeout 1
spawn /usr/local/bin/ssdb-cli -h 127.0.0.1 -p 8889
expect "8889>"
send "auth '123456'\r"
send "$cmd $param\r"
expect eof
2、zabbix_agentd.conf文件配置
vim zabbix_agentd.conf
UserParameter=check_ssdb[*],/bin/bash /usr/local/zabbix/scripts/check_ssdb.sh $1 $2
3、页面添加相关的监控项,或者直接导入监控模板
4、最后的监控效果: