Tomcat nagios-plugins监控网站(自动启动每分钟检测).txt

安装nagios-plugins-1.4.13.tar.gz
检查gcc是否安装
[root@zhuang~~]# rpm -qa |grep gcc
libgcc-4.1.2-42.el5
compat-gcc-34-g77-3.4.6-4
compat-libgcc-296-2.96-138
libgcc-4.1.2-42.el5
gcc-4.1.2-42.el5
compat-gcc-34-c++-3.4.6-4
gcc-gfortran-4.1.2-42.el5
compat-gcc-34-3.4.6-4
gcc-c++-4.1.2-42.el5
gcc-java-4.1.2-42.el5

有显示即安装了没有显示就安装gcc
[root@zhuang~~]# yum install gcc

[root@zhuang~~]#tar zvxf nagios-mysql-plugins-0.3.tar.gz
[root@zhuang~~]#./configure --prefix=/usr/local/nagios
[root@zhuang~~]#make
[root@zhuang~~]#make install
./check_http –h 检查check_http可不可用(显示帮助信息代表可用)

创建监控脚本存放目录,并且把脚本(moniter.sh)放在该目录中.
[root@zhuang~~]#mkdir moniter
[root@zhuang~~]#cd moniter
[root@zhuang~~]#cp /usr/local/nagios/libexec/check_http /root/moniter/

[root@zhuang~~]#ls -l
check_http moniter.sh   --给这两个文件赋于可执行权限

脚本(moniter.sh),代码如下:

#!/bin/sh
path=/moniter
logfile=/root/monite/jboosmoniter.log
date=`(date +%D--%T)`
ps -eo pid,tty,user,comm,stime,etime | more |grep java|sed 's/://g'>$path/pid.txt
result=`( awk '/master/ {print $6}' $path/pid.txt |sed -e 's/://g' -e 's/-//g')`
$path/check_http -H 192.168.3.17 -p 80 -u /index.html >$path/a.txt
a=`(awk '{print $4}' $path/a.txt)`
echo $a >$path/states.txt
valuse=`(cat $path/states.txt)`
awk '/refused/ {print $2}' $path/a.txt>$path/b.txt
f=`(cat $path/b.txt)`
q=refused
level=1000
if [ $valuse != 200 ]
then
     if (( "10#$result" > "$level" ))
      then
            killall -9 java;/etc/init.d/tomcat start;echo "the tomcat server have reboot on $date">>$logfile;echo "Jboss running time:$result">>$logfile
    fi
fi
if [ "$f" = "$q" ]
         then
       killall -9 java;/etc/init.d/tomcat start;echo "the tomcat server have dead but it start on $date">>$logfile

fi


配置crontab,每分钟运行一次
[root@zhuang~~]#crontab –e
*/1 * * * * /root/moniter/moniter.sh


实现原理:
该监控主要是利用nagios监控工具里面的一个java脚本结合自己编写的shell脚本来实现监控,该程序会定时的(结合crontab)向被监控服务器发起HTTP连接取得其连接返回的状态值指标,通过判断不正常的状态来触发重启动作并且记录日志。有四种状态分别为正常状态:HTTP OK HTTP/1.1 200 OK - 3745 bytes in 0.745 seconds |time=0.744536s;;;0.000000 size=3745B;;;0
内存溢出的状态:CRITICAL - Socket timeout after 10 seconds
正在重启的状态:CRITICAL - Socket timeout after 10 seconds
宕机的状态:Connection refused HTTP CRITICAL - Unable to open TCP socket
下面有两个程序
(1)通过监控timeout值,其原理为界定了一个连接响应时间timeout值的一个阀值为2S,超过这个值,或者这个值为空(宕机和内存溢出时都为空)都会认为是服务运行不正常,即触发重启服务器的命令:
#!/bin/bash
path=/usr/local/nagios/libexec
$path/check_http -w 5 -c 10 -H 192.168.3.11 -p 80 -u /index.jsp >$path/a.txt
a=`awk -F '[ ;|=]' '/s/d {print $14}' $path/a.txt |sed 's/s//g'`
echo $a >$path/timeout.txt
valuse=`(cat $path/timeout.txt)`
timeout=2.0000
if (echo ${valuse} ${timeout} | awk '!($1>$2){exit 1}')
   then
/etc/init.d/tomcat restart
fi
(2)通过监控返回的http状态代码来实现监控,正常状态返回的代码应为200,其他值都是不正常的,当响应时间小于10分钟证明是正在重启,取到不正常的值的时候就触发重启服务器的命令,脚本如下

脚本注释:
#!/bin/bash
path=/root/moniter/
#####定义脚本存放的绝对路径##########
logfile=/root/moniter/tomcatmoniter.log
########定义日志文件名和存放的绝对路径###############
date=`(date +%D--%T)`
##########定义时间格式#############
ps -eo pid,tty,user,comm,stime,etime | more |grep java|sed 's/://g'>$path/pid.txt
##############得出tomcat进程运行的信息并且输出到文件pid.txt中###############
result=`( awk '/master/ {print $6}' $path/pid.txt |sed -e 's/://g' -e 's/-//g')`
################得出tomcat进程运行的时间并且赋值给result变量##############
$path/check_http -H 192.168.3.11 -p 80 -u /index.jsp >$path/a.txt
##############向 192.168.3.11 发起HTTP连接并且把得到的状态信息输出到a.txt##########
a=`(awk '{print $4}' $path/a.txt)`
###########得出http连接的状态值并且输出给变量a##################
echo $a >$path/states.txt
################把变量a的值输出给states.txt#################################
valuse=`(cat $path/states.txt)`
##############变量values存的就是http连接的状态值#########################
awk '/refused/ {print $2}' $path/a.txt>$path/b.txt
##########该语句判断的是当服务已死的时候的状态值,赋值给b.txt####################
f=`(cat $path/b.txt)`
#####变量f为状态值######
q=refused
#######变量q是判断服务是否死掉的标准#######
level=1000
################变量level是区分服务正在重启与服务器内存溢出的标准#################
if [ $valuse != 200 ]
#########判断http连接状态是否正常##########
then
     if (( "10#$result" > "$level" ))
##########区分服务正在重启与内存溢出的状态#################
      then
            killall -9 java;/etc/init.d/tomcat start;echo "the tomcat server have reboot on $date">>$logfile
################重启服务并且记录日志###########################
    fi
fi
if [ "$f" = "$q" ]
##############判断是否符合服务已死的条件##########
         then
       killall -9 java;/etc/init.d/tomcat start;echo "the tomcat server have dead but it start on $date">>$logfile
################重启服务并且记录日志###########################
fi


使用说明:该脚本必须为root用户才能执行:chown root moniter.sh   chmod +x moniter.sh脚本中蓝色字体的是脚本存放的路径,红色字体的是服务器的完整域名,一定要按照实际情况填写

自动执行设置: crontab –e
*/1 * * * * /root/moniter/moniter.sh

你可能感兴趣的:(Tomcat nagios-plugins监控网站(自动启动每分钟检测).txt)