用 check_tcp 来监控 tokyotyrant 和 redis

鉴客 发布于 2012/11/12 15:09
阅读 635
收藏 2

随着公司开始启用 tokyocabinettokyotyrant,相关的运维工作也开始展开,首当其冲的就是ttserver的监控问题,为了尽快将ttserver 加入到监控组里面 我先写了一个简单的脚本
放到了nagios的插件里 用来监控ttserver 的状态,只是通过检查pidport两个参数来判断ttserver是否活着
ttserver 的启动命令如下
ttserver -host 192.168.1.9 -port 11209 -thnum 8 -dmn -pid /usr/local/ttserver/session/ttserver.pid -log /usr/local/ttserver/logs/ttserver_session.log

以下是脚本内容

check_tt.sh

#!/bin/bash 
    #author storysky in 2011.07.20 
    #check ttserver status 
    pid1=`cat /usr/local/ttserver/session/ttserver.pid` 
    port=`ps aux |awk '/ttserver/&&!/awk/{print $15}'` 
    pid2=`/usr/local/ttserver/bin/tcrmgr inform -port "$port" -st 192.168.1.9 |awk '/pid/{print $2}'` 
    if [ $pid1 -eq $pid2 ] && [ $port -eq 11209 ]; 
            then 
            echo "OK TTserver is running" 
            exit 0 
            else 
            echo "Critical TTserver is error" 
            exit 2 
    fi

 

这个方法虽然简陋了点 但后来在开发人员调试的时候迅速的报了几次警,看来还是挺管用的。但是对于ttserver的响应时间什么的就无法监控了,于是就有了个更好的办法那就是nagios 自身的多功能监控脚本
check_tcp
先让我们来了解下 ttserver 的一个命令吧,我是从这里得到的启发

$ tcrmgr inform -port 11209 -st 192.168.1.9
version    1.1.41                            
libver    324                               
protver    0.91                              
os    Linux                                 
time    132333038.420367                   
pid    2347                                  
sid    1                                     
type    hash                                
path    /usr/local/ttserver/session/tt.tch  
rnum    367482                              
size    354156240                           
bigend    0                                 
mhost    192.168.1.9                        
mport    11209                         
rts    1307964037905658                      
delay    15366340.514709                     
fd    21                                    
loadavg    0.000000                          
memsize    320708608                         
memrss    67158016                          
ru_user    609.663317                        
ru_sys    465.347256                        
ru_real    678848.080386                     
cnt_put    223983                            
.........

以上就是 inform 参数的输出结果,内容太多省略一部分,第一个脚本里的$pid2 变量就是从这里面取的,但是如果我们telnet 11209这个端口呢?会得到另外一些信息,如下图

通过输入 stats 得到参数 输入quit 退出

这样就可以利用check_tcp 来得到ttserver的响应时间、uptime等信息,具体的命令格式如下:
check_tcp -H 192.168.1.9 -p 11209 -t 5 -E -s 'stats\r\nquit\r\n' -e 'uptime' -M crit
下图为命令的输出结果:呵呵够详细吧 更重要的是有了相应时间,而且你也可以对telnettcrmgr inform 结果进行各种过滤来得到想要的参数设置自己的阀值来做更详细的监控~~~


加入到nrpe.cfg 里面
command[check_ttserver_11209]=/usr/local/nagios/libexec/check_tcp -H 192.168.1.9 -p 11209 -t 5 -E -s 'stats\r\nquit\r\n' -e 'uptime' -M crit
OK,试试吧

后来我想了想既然ttserver可以这么监控,那redis肯定也没问题 只不过redis 不支持 stats 需要改成info 命令格式和上面一样

/usr/local/nagios/libexec/check_tcp -H 172.16.1.9 -p 9736 -t 5 -E -s 'info\r\nquit\r\n' -e 'uptime' -M crit 
TCP OK - 0.003 second response time on port 9736 [$1085 
redis_version:2.2.14 
redis_git_sha1:00000000 
redis_git_dirty:0 
arch_bits:64 
multiplexing_api:epoll 
process_id:10642 
uptime_in_seconds:87399 
uptime_in_days:1 
lru_clock:256947 
used_cpu_sys:488.58 
used_cpu_user:398.64 
used_cpu_sys_children:13.43 
used_cpu_user_children:1.81 
connected_clients:501 
connected_slaves:0 
client_longest_output_list:0 
client_biggest_input_buf:6 
blocked_clients:0 
used_memory:1982476704 
used_memory_human:1.85G 
used_memory_rss:2612875264 
mem_fragmentation_ratio:1.32 
use_tcmalloc:0 
loading:0 
aof_enabled:1 
changes_since_last_save:31599275 
bgsave_in_progress:0 
last_save_time:1323687835 
bgrewriteaof_in_progress:0 
total_connections_received:524 
total_commands_processed:40577119 
expired_keys:0 
evicted_keys:0 
keyspace_hits:33546769 
keyspace_misses:6336587 
.....中间省略
+OK]|time=0.002756s;;;0.000000;5.000000
哈哈,果然可以,现在不用另外再去写专门的脚本了,呵呵
其实我相信各位经验丰富的朋友们都会有自己的监控方法,请不要吝啬分享给大家吧 O(∩_∩)O~

文章出处:http://storysky.blog.51cto.com/628458/737309

加载中
返回顶部
顶部