随着公司开始启用 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

 
  
  1. #!/bin/bash 
  2. #author storysky in 2011.07.20 
  3. #check ttserver status 
  4. pid1=`cat /usr/local/ttserver/session/ttserver.pid` 
  5. port=`ps aux |awk '/ttserver/&&!/awk/{print $15}'
  6. pid2=`/usr/local/ttserver/bin/tcrmgr inform -port "$port" -st 192.168.1.9 |awk '/pid/{print $2}'
  7. if [ $pid1 -eq $pid2 ] && [ $port -eq 11209 ]; 
  8.         then 
  9.         echo "OK TTserver is running" 
  10.         exit 0 
  11.         else 
  12.         echo "Critical TTserver is error" 
  13.         exit 2 
  14. 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 命令格式和上面一样

 
  
  1. /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 
  2. TCP OK - 0.003 second response time on port 9736 [$1085 
  3. redis_version:2.2.14 
  4. redis_git_sha1:00000000 
  5. redis_git_dirty:0 
  6. arch_bits:64 
  7. multiplexing_api:epoll 
  8. process_id:10642 
  9. uptime_in_seconds:87399 
  10. uptime_in_days:1 
  11. lru_clock:256947 
  12. used_cpu_sys:488.58 
  13. used_cpu_user:398.64 
  14. used_cpu_sys_children:13.43 
  15. used_cpu_user_children:1.81 
  16. connected_clients:501 
  17. connected_slaves:0 
  18. client_longest_output_list:0 
  19. client_biggest_input_buf:6 
  20. blocked_clients:0 
  21. used_memory:1982476704 
  22. used_memory_human:1.85G 
  23. used_memory_rss:2612875264 
  24. mem_fragmentation_ratio:1.32 
  25. use_tcmalloc:0 
  26. loading:0 
  27. aof_enabled:1 
  28. changes_since_last_save:31599275 
  29. bgsave_in_progress:0 
  30. last_save_time:1323687835 
  31. bgrewriteaof_in_progress:0 
  32. total_connections_received:524 
  33. total_commands_processed:40577119 
  34. expired_keys:0 
  35. evicted_keys:0 
  36. keyspace_hits:33546769 
  37. keyspace_misses:6336587 
  38. .....中间省略
  39. +OK]|time=0.002756s;;;0.000000;5.000000 

哈哈,果然可以,现在不用另外再去写专门的脚本了,呵呵
其实我相信各位经验丰富的朋友们都会有自己的监控方法,请不要吝啬分享给大家吧 O(∩_∩)O~