Linux安装Nagios监控系统, perl-fcgi, nginx

作者:Joshua
日期:2009年1月17日凌晨
非请勿转
安装nagios
与别的软件安装稍有不同,nagios的安装要好几步才能完成。

第一步,执行make install安装主要的程序、CGI及HTML文件;
第二步,执行 make install-commandmode 给外部命令访问nagios配置文件的权限;
第三步,执行 make install-config 把配置文件的例子复制到nagios的安装目录。

按照安装向导的提示,其实这里还有一个 make install-init的步骤,它的作用是把nagios做成一个运行脚本,使nagios随系统开机启动,这是一个很方便的措施。

cd /usr/local/
wget http://nchc.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.6.tar.gz
tar xzf nagios-3.0.6.tar.gz
cd nagios-3.0.6
/usr/sbin/useradd nagios
passwd nagios
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -G nagcmd nagios
./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-config
make install-commandmode
vi /usr/local/nagios/etc/objects/contacts.cfg //修改管理员邮件地址

验证Nagios安装

验证程序是否被正确安装。切换目录到安装路径(这里是/usr/local/nagios),看是否存在 etc、bin、 sbin、 share、 var这五个目录,如果存在则可以表明程序被正确的安装到系统了。五个目录功能的简要说明:

bin Nagios执行程序所在目录,这个目录只有一个文件nagios
etc Nagios配置文件位置,初始安装完后,只有几个*.cfg-sample文件
sbin Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录
Share Nagios网页文件所在的目录
Var Nagios日志文件、spid 等文件所在的目录

安装nagios的插件

没有插件,nagios将什么作用也没有,插件也是nagios扩展功能的强大武器,除了下载常用的插件外,我们还可以根据实际要求编写自己的插件。 Nagios的插件nagios-plugins-1.4.5在www.nagios.org上可以找到,接着我们用wget下载它。注意:插件与 nagios之间的版本关联不大,不一定非得用nagios-plugins-1.4.5这个版本。下载完成后,安装它是很简单的:先执行配置 ./configure –prefix=/usr/local/nagios ,接着编译安装 make ;make install即可。这里需要说明一下的是在配置过程指定的安装路径是/usr/local/nagios,而不是/usr/local/nagios- plus,安装完成后,将在目录/usr/local/nagios生成目录libexec(里面有很多文件),这正是nagios所需要的。

wget http://jaist.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.13.tar.gz
tar xf nagios-plugins-1.4.13.tar.gz
cd nagios-plugins-1.4.13
./configure --with-nagios-user=nagios --with-nagios-group=nagcmd
make
make install

添加Nagios随系统启动

/sbin/chkconfig --add nagios
/sbin/chkconfig nagios on
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
/sbin/service nagios start

安装perl fcgi模块

      wget http://www.cpan.org/modules/by-module/FCGI/FCGI-0.67.tar.gz
      tar -zxvf FCGI-0.67.tar.gz
      cd FCGI-0.67
      perl Makefile.PL
      make && make install

安装FCGI-ProcManager:

      wget http://search.cpan.org/CPAN/authors/id/G/GB/GBJK/FCGI-ProcManager-0.18.tar.gz
      tar -xzxf FCGI-ProcManager-0.18.tar.gz
      cd FCGI-ProcManager-0.18
      perl Makefile.PL
      make
      make install
cd /usr/local/nagios/bin/
vi perl-cgi.pl
#!/usr/bin/perl
 
use FCGI;
#perl -MCPAN -e 'install FCGI'
use Socket;
 
#this keeps the program alive or something after exec'ing perl scripts
END() { } BEGIN() { }
*CORE::GLOBAL::exit = sub { die "fakeexit\nrc=".shift()."\n"; }; eval q{exit}; if ($@) { exit unless $@ =~ /^fakeexit/; } ;
 
&main;
 
sub main {
                #$socket = FCGI::OpenSocket( ":3461", 10 ); #use IP sockets
                $socket = FCGI::OpenSocket( "/var/run/nagios.sock", 10 ); #use UNIX sockets - user running this script must have w access to the 'nginx' folder!!
                $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket );
                if ($request) {request_loop()};
                        FCGI::CloseSocket( $socket );
}
 
sub request_loop {
                while( $request->Accept() >= 0 ) {
 
                   #processing any STDIN input from WebServer (for CGI-GET actions)
                   $env = $request->GetEnvironment();
                   $stdin_passthrough ='';
                   $req_len = 0 + $ENV{CONTENT_LENGTH};
                   if ($ENV{REQUEST_METHOD} eq 'GET'){
                                $stdin_passthrough .= $ENV{'QUERY_STRING'};
                        }
 
                        #running the cgi app
                        if ( (-x $ENV{SCRIPT_FILENAME}) && #can I execute this?
                                 (-s $ENV{SCRIPT_FILENAME}) && #Is this file empty?
                                 (-r $ENV{SCRIPT_FILENAME})     #can I read this file?
                        ){
                                #http://perldoc.perl.org/perlipc.html#Safe-Pipe-Opens
                open $cgi_app, '-|', $ENV{SCRIPT_FILENAME}, $stdin_passthrough or print("Content-type: text/plain\r\n\r\n"); print "Error: CGI app returned no output - Executing $ENV{SCRIPT_FILENAME} failed !\n";
                                if ($cgi_app) {print <$cgi_app>; close $cgi_app;}
                        }
                        else {
                                print("Content-type: text/plain\r\n\r\n");
                                print "Error: No such CGI app - $req_len - $ENV{CONTENT_LENGTH} - $ENV{REQUEST_METHOD} - $ENV{SCRIPT_FILENAME} may not exist or is not executable by this process.\n";
                        }
 
                }
}
vi start_ngind_cgi.sh
#!/bin/bash
 
## start_nginx_cgi.sh: start nginx cgi mode
## ljzhou, 2007.08.20
 
 
PERL="/usr/bin/perl"
NGINX_CGI_FILE="/usr/local/nagios/bin/perl-cgi.pl"
 
 
#bg_num=`jobs -l |grep "NGINX_CGI_FILE"`
#PID=`ps aux|grep "perl-cgi"|cut -c10-14|xargs kill -9`
PID=`ps aux|grep 'perl-cgi'|cut -c10-14|sed -n "1P"`
echo $PID
sockfiles="/var/run/nagios.sock"
kill -9 $PID
 
$PERL $NGINX_CGI_FILE &
 
sleep 3
 
`chown nobody.nobody $sockfiles`

创建身份认证文件
注意:这里的用户既是apache的nagios管理界面的登录认证用户也和nagios监控中的权限有关联。

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

修改nginx.conf文件,在虚拟机中加入:

        location /nagios {
                auth_basic              "Restricted";
                auth_basic_user_file    /usr/local/nagios/etc/htpasswd.users;
        }
        location ~ \.cgi$ {
                root /usr/local/nagios/sbin;
                rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
                fastcgi_index index.cgi;
                fastcgi_pass    unix:/var/run/nagios.sock;
 
                fastcgi_param   SCRIPT_FILENAME                     /usr/local/nagios/sbin$fastcgi_script_name;
                fastcgi_param   QUERY_STRING                        $query_string;
 
                fastcgi_param   REMOTE_ADDR                        $remote_addr;
                fastcgi_param   REMOTE_PORT                        $remote_port;
                fastcgi_param   REQUEST_METHOD                     $request_method;
                fastcgi_param   REQUEST_URI                        $request_uri;
 
                #fastcgi_param SCRIPT_NAME                        $fastcgi_script_name;
                fastcgi_param   SERVER_ADDR                        $server_addr;
                fastcgi_param   SERVER_NAME                        $server_name;
                fastcgi_param   SERVER_PORT                        $server_port;
                fastcgi_param   SERVER_PROTOCOL                    $server_protocol;
                fastcgi_param   SERVER_SOFTWARE                    nginx;
 
                fastcgi_param   CONTENT_LENGTH                     $content_length;
                fastcgi_param   CONTENT_TYPE                       $content_type;
                fastcgi_param   GATEWAY_INTERFACE                  CGI/1.1;
                fastcgi_param   HTTP_ACCEPT_ENCODING        gzip,deflate;
                fastcgi_param   HTTP_ACCEPT_LANGUAGE        zh-cn;
       }

之后运行/usr/local/nagios/bin/start_nginx_cgi.sh,并将它加到/etc/rc.local中。

/usr/local/nagios/bin/start_nginx_cgi.sh
vi /etc/rc.local ///usr/local/nagios/bin/start_nginx_cgi.sh写在最后一行

重启nginx:

ps -aux|grep nginx
kill -HUP pid //此处的pid是ps查出的nginx主进程id

最后要把nagios的share文件放到虚拟主机根目录下,并将share改名为nagios,最佳办法是:

cd 你的虚拟主机根目录
ln -s /usr/local/nagios/share nagios

访问:http://yourhost.com/nagios
如果看到根我一样的界面,那就对了,图片点击可放大。

nagios成功安装

nagios成功安装

  1. 学习!!

    正在尝试安装配置….非常感谢!

    • 精东
    • 07月 7th, 2010 2:46am

    我也好久没装nagios了,过段时间再温习下,一起学习!

  2. 这阵子总来www.wemvc.com了,域名都背过了…我自己的都没背过呢…

    • 精东
    • 10月 20th, 2010 11:35pm

    哈哈 来干啥?

  1. 还没有引用通告。