2015-03-19 72 views
1

我想通过使用Nagios的乘客状态来监控我们的应用程序,但是我找不到适合当前版本乘客的插件。使用bash脚本监控Nagios上的乘客状态

我想看看“队列中的请求”,因为我始终在顶层队列中有0个请求,即使我在我们的所有应用程序中有数百个队列中的请求。

.---------- General information ----------- 
Max pool size : 6 
Processes  : 1 
Requests in top-level queue : 0 

.---------- Application groups ----------- 
/webapps/example.local#default: 
    App root: /webapps/example.local 
    Requests in queue: 0 
    * PID: 16915 Sessions: 0  Processed: 1  Uptime: 2s 
    CPU: 0%  Memory : 9M  Last used: 2s ago 

林使用FF版本:

Passenger (4.0.2) 
Nagios 3.5.1 

我创建了一个bash脚本,将用grep在队列中的请求。

#!/bin/bash 

queue=`passenger-status | grep -A 1 "myapp1" | grep "Requests in queue:" | awk '{print $4}'` 

if [ $queue == 0 ] 
    then 
     echo "OK - $queue Passenger Queue on myapp1" 
     exit 0 
    elif [ $queue -le 10 ] 
    then 
     echo "Warning - $queue Passenger Queue on myapp1" 
     exit 1 
    elif [ $queue > 10 ] 
    then 
     echo "Critical - $queue Passenger Queue on myapp1" 
     exit 2 
    else 
     echo "Unknown Error - Please check config." 
     exit 3 
fi 

当我手动运行脚本。我得到正确的结果。

[[email protected] user]# /usr/lib64/nagios/plugins/check_passenger_queue.sh 
OK - 0 Passenger Queue on myapp1 

但是,当我运行脚本使用NRPE插件。它给了我不同的结果。

[[email protected] user]# /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_passenger_queue 
Unknown Error - Please check config. 

我试图在我的Nagios服务器上运行NRPE插件,并得到了相同的结果。

[[email protected] user]# /usr/local/nagios/libexec/check_nrpe -H xxx.xxx.xxx.xxx -c check_passenger_queue 
Unknown Error - Please check config. 
+0

一个简单的bash脚本可以做到这一点。 – 2015-03-20 04:36:01

+0

感谢提示吉姆。现在,我尝试创建一个bash脚本,并设法在请求队列中grep并执行if语句来确定是否OK,WARNING,CRITICAL或Unknown。但是当我尝试使用NRPE时,它失败了。我编辑我的帖子上面,包括我的脚本和问题。 – Eman 2015-03-24 09:07:29

+0

你能提供nrpe.cfg行的副本和nagios comands.cfg条目吗? – 2015-03-26 01:52:50

回答

1

我的解决办法是

  1. 我创建了一个bash脚本,将指挥乘客身份,并将其保存到文本文件。

#!/bin/bash 

export PATH="/usr/local/rvm/gems/ruby-1.9.3-p392/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-1.9.3-p392/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 

rvmsudo /usr/local/rvm/gems/ruby-1.9.3-p392/bin/passenger-status > /usr/lib64/nagios/plugins/passenger/passenger-status.txt 

  • 我创建了一个nagios的插件,将寻找在特定应用程序的队列中的请求。
  • #!/bin/bash 
    
    queue=`cat /usr/lib64/nagios/plugins/passenger/passenger-status.txt | grep -A 1 "myapp1" | grep "Requests in queue:" | awk '{print $4}'` 
    
    if [ $queue -eq 0 ]; then 
         echo "OK - $queue Passenger Queue on myapp1" 
         exit 0 
        elif [ $queue -le 10 ]; then 
         echo "Warning - $queue Passenger Queue on myapp1" 
         exit 1 
        elif [ $queue -ge 11 ]; then 
         echo "Critical - $queue Passenger Queue on myapp1" 
         exit 2 
        else 
         echo "Unknown Error - $queue Please check config." 
         exit 3 
    fi 
    

  • 编辑NRPE配置以添加我的插件。
  • vi /etc/nagios/nrpe.cfg 
    command[check_passenger_queue]=/usr/lib64/nagios/plugins/check_passenger_queue.sh 
    

  • 检查我的nagios插件如果工作。
  • /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_passenger_queue
    0

    passenger-status需要与rvmsudo由舱单所指示的运行。 NRPE与用户nagios一起调用,因为您打电话给passenger-status而没有rvmsudo您很可能会得到您的未知错误

    在当你使用rvmsudo passenger-status当你的脚本命中rvmsudo要求密码打电话给你的插件与用户Nagios的在NRPE另一方面。这对于通过NRPE调用插件时无法输入密码将无济于事。

    所以在nrpe.cfg记载一种解决方案是在/etc/nagios/nrpe.cfg

  • 附加用户的nagiosnagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/,/path/to/passenger-status的/ etc/sudoers的

    1. 取消注释command_prefix=/usr/bin/sudo。重要提示:确保您使用sudo visudo -f /etc/sudoers编辑/ etc/sudoers!
    2. 重启nagios的-NRPE服务器与sudo service nagios-nrpe-server restart

    第2步:假设你的插件是在/ usr/lib中/的nagios /插件。

    passenger-status的路径可以用rvmsudo which passenger-status来标识。还要确保rvmsudo在你的PATH中。