Nginx环境下构建Nagios监控平台

Category : 工作学习 / Tags : , , / Date : 2011.07.04 / /

  本文只做Nginx下Nagiox安装的说明,其它关于Nagios监控的详细配置请参考我的另一篇文章[Ubuntu 10.04下构建Nagios监控平台]

  Nagios依赖PHP环境和perl环境。由于Nginx不支持Perl的CGI,这里就需要先来搭建Perl环境。
  
  一、给Nginx加上对Perl的CGI支持

  让Nginx支持Perl的CGI方法有好几种,基本原理都是通过Perl的FCGI模块实现。具体哪一个更好,目前没时间验证。下面的方法就是其中一种:

  1、安装FCGI模块

wget http://search.cpan.org/CPAN/authors/id/F/FL/FLORA/FCGI-0.73.tar.gz
tar xvzf FCGI-0.73.tar.gz 
cd FCGI-0.73
perl Makefile.PL
make
make install
cd ..

  2、安装FCGI-ProcManager模块

wget http://search.cpan.org/CPAN/authors/id/G/GB/GBJK/FCGI-ProcManager-0.19.tar.gz
tar xvzf FCGI-ProcManager-0.19.tar.gz 
cd FCGI-ProcManager-0.19
perl Makefile.PL 
make
make install
cd ..

  3、安装IO和IO::ALL模块

wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/IO-1.25.tar.gz
tar zxvf IO-1.25.tar.gz
cd IO-1.25
perl Makefile.PL
make
make install
cd ..

wget http://search.cpan.org/CPAN/authors/id/I/IN/INGY/IO-All-0.41.tar.gz
tar zxvf IO-All-0.41.tar.gz
cd IO-All-0.41
perl Makefile.PL
make
make install
cd ..

  4、下载Perl脚本

  这个脚本的目的就是产生一个PERL的FastCGI接口,让Nginx可以以CGI方式处理Perl。

  下载Perl脚本

wget http://www.mike.org.cn/wp-content/uploads/2011/07/perl-fcgi.zip
unzip perl-fcgi.zip
cp perl-fcgi.pl /usr/local/webserver/nginx/

  注:建议把这个脚本放在Nginx安装目录。

  修改脚本权限

chmod 755 /usr/local/webserver/nginx/perl-fcgi.pl

  5、建立一个CGI启动/停止脚本

  这个SHELL脚本只是为了方便管理上面的Perl脚本。脚本中的www为nginx的运行用户,请据自己的实际情况调整。

  注意事项:不能用root用户执行(会提示). 要用与Nginx相同身份的用户执行。否则可能会在Nginx Log中提示 Permision Denied。

vi /usr/local/webserver/nginx/start_perl_cgi.sh

#!/bin/bash
#set -x
dir=/usr/local/webserver/nginx/

stop ()
{
#pkill  -f  $dir/perl-fcgi.pl
kill $(cat $dir/logs/perl-fcgi.pid)
rm $dir/logs/perl-fcgi.pid 2>/dev/null
rm $dir/logs/perl-fcgi.sock 2>/dev/null
echo "stop perl-fcgi done"
}

start ()
{
rm $dir/now_start_perl_fcgi.sh 2>/dev/null

chown www.www $dir/logs
echo "$dir/perl-fcgi.pl -l $dir/logs/perl-fcgi.log -pid $dir/logs/perl-fcgi.pid -S $dir/logs/perl-fcgi.sock" >>$dir/now_start_perl_fcgi.sh

chown www.www $dir/now_start_perl_fcgi.sh
chmod u+x $dir/now_start_perl_fcgi.sh

sudo -u www $dir/now_start_perl_fcgi.sh
echo "start perl-fcgi done"
}

case $1 in
stop)
stop
;;
start)
start
;;
restart)
stop
start
;;
esac

  修改SHELL脚本权限

chmod 755 /usr/local/webserver/nginx/start_perl_cgi.sh

  启动脚本

/usr/local/webserver/nginx/start_perl_cgi.sh start

  正常情况下在/usr/local/webserver/nginx/logs下生成perl-fcgi.sock这个文件,如果没有生成,请检查下上面的步聚。

  二、安装Nagios

  A、安装前准备

  安装的机器上必须有一个WEB服务,本文是在Nginx环境上安装的。

  下载nagios主程序和相关插件程序包

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.3.tar.gz
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz

  安装GD库(Nagios中的statusmap和trends模块必须)

apt-get install libgd2-noxpm libgd2-noxpm-dev

  B、Nagios监控端安装

  1、创建Nagios用户及组

  建立Nagios账号

/usr/sbin/useradd -m -s /sbin/nologin nagios

  2、创建一个名为nagcmd的用户组,用于从web接口执行外部命令。将Nagios用户和Nginx用户加入组中。

groupadd nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd www

  注:上面的www是Nginx用户所属的组,如有不同请自行调整。

  3、编译安装Nagios

tar zxvf nagios-3.2.3.tar.gz
cd nagios-3.2.3
./configure --with-command-group=nagcmd
make
make all
make install
make install-init
make install-config
make install-commandmode
#这里是在Nginx下运行Nagios,这一步就不用做了
make install-webconf
cd ..

  注:make install 用于安装主要的程序、CGI及HTML文件
    make install-init 用于生成init启动脚本
    make install-config 用于安装示例配置文件
    make install-commandmode 用于设置相应的目录权限
    make install-webconf 用于安装Apache配置文件

  4、验证程序是否被正确安装

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

ls  /usr/local/nagios/
bin/     etc/     sbin/    share/   var/ 

  注;bin–Nagios执行程序所在目录,其中的nagios文件即为主程序。
    etc–Nagios配置文件位置
    sbin–Nagios cgi文件所在目录,也就是执行外部命令所需文件所在的目录
    Share–Nagios网页文件所在的目录
    var–Nagios日志文件、spid 等文件所在的目录
    var/archives–日志归档目录
    var/rw–用来存放外部命令文件
  
  5、配置NGINX

  1)、配置Nagios Web界面登陆帐号及密码

htpasswd -c /usr/local/nagios/etc/nagiospasswd mike

  如果你没有htpasswd(这个工具由Apache安装包所提供),可在线生成需要加密数据。
  
  a)、访问http://www.4webhelp.net/us/password.php生成需要加密数据

  b)、创建加密验证文件

vi /usr/local/nagios/etc/nagiospasswd

#加入生成的加密数据,冒号前是用户名,后面是加密后的密码
mike:25JB.R7mXY96o

  修改Nagios配置文件,给新增的用户增加访问权限

vi /usr/local/nagios/etc/cgi.cfg

#以下几项中分别加入新增的用户,多用户用逗号分隔。
authorized_for_system_information=nagiosadmin,mike
authorized_for_configuration_information=nagiosadmin,mike
authorized_for_system_commands=nagiosadmin,mike
authorized_for_all_services=nagiosadmin,mike
authorized_for_all_hosts=nagiosadmin,mike
authorized_for_all_service_commands=nagiosadmin,mike
authorized_for_all_host_commands=nagiosadmin,mike

  2)、修改NGINX配置,以支持WEB方式访问Nagios

  方法一:以http://ip方式访问

  NGINX配置片断如下

server
  {
    listen       80;
    server_name  192.168.1.108;
    index index.html index.htm index.php;
    root  /usr/local/nagios/share;
    auth_basic "Nagios Access";
    auth_basic_user_file /usr/local/nagios/etc/nagiospasswd;
    location ~ .*\.(php|php5)?$
    {      
      #fastcgi_pass  unix:/tmp/php-cgi.sock;
      fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
    }

    location ~ .*\.(cgi|pl)?$
    {
    gzip off;
    root   /usr/local/nagios/sbin;
    rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
    fastcgi_pass  unix:/usr/local/webserver/nginx/logs/perl-fcgi.sock;
    fastcgi_param SCRIPT_FILENAME /usr/local/nagios/sbin$fastcgi_script_name; 
    fastcgi_index index.cgi;
    fastcgi_read_timeout   60;
    fastcgi_param  REMOTE_USER        $remote_user;
    include fcgi.conf;
    auth_basic "Nagios Access";
    auth_basic_user_file /usr/local/nagios/etc/nagiospasswd;
    }

    location /nagios
    {
    alias /usr/local/nagios/share;
    auth_basic "Nagios Access";
    auth_basic_user_file /usr/local/nagios/etc/nagiospasswd;
    }

    log_format  wwwlogs  '$remote_addr - $remote_user [$time_local] "$request" '
               '$status $body_bytes_sent "$http_referer" '
               '"$http_user_agent" $http_x_forwarded_for';
    access_log  /data1/logs/access_www.log  wwwlogs;
  }

  方法二:以http://ip/nagios方式访问

  在WEB主目录下创建一个软链

ln -s  /usr/local/nagios/share/  /data0/htdocs/www/nagios

  NGINX配置片断如下

server
  {
    listen       80;
    server_name  192.168.1.108;
    index index.html index.htm index.php;
    root  /data0/htdocs/www;
    auth_basic "Nagios Access";
    auth_basic_user_file /usr/local/nagios/etc/nagiospasswd;
    location ~ .*\.(php|php5)?$
    {      
      #fastcgi_pass  unix:/tmp/php-cgi.sock;
      fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
    }

    location ~ .*\.(cgi|pl)?$
    {
    gzip off;
    root   /usr/local/nagios/sbin;
    rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
    fastcgi_pass  unix:/usr/local/webserver/nginx/logs/perl-fcgi.sock;
    fastcgi_param SCRIPT_FILENAME /usr/local/nagios/sbin$fastcgi_script_name; 
    fastcgi_index index.cgi;
    fastcgi_read_timeout   60;
    fastcgi_param  REMOTE_USER        $remote_user;
    include fcgi.conf;
    auth_basic "Nagios Access";
    auth_basic_user_file /usr/local/nagios/etc/nagiospasswd;
    }

    log_format  wwwlogs  '$remote_addr - $remote_user [$time_local] "$request" '
               '$status $body_bytes_sent "$http_referer" '
               '"$http_user_agent" $http_x_forwarded_for';
    access_log  /data1/logs/access_www.log  wwwlogs;
  }

  注:如果你的fastcgi的配置文件中没有配置REMOTE_USER参数,一定要在nginx.conf中加上下面这个fastcgi的参数定义。

fastcgi_param  REMOTE_USER        $remote_user;

  如果没有这个fastcgi的参数定义,Nagios就不能正确验证你的登陆信息。网上大多数文章解决Nginx下Nagios登陆验证失败的方法都是在Nagios的cgi.cfg配置文件(nagios/etc/cgi.cfg)中关掉验证(use_authentication=0)或设置一个缺省的登陆用户(default_user_name=test),这两种方法都是不安全的。

  6、编译并安装Nagios插件

  由于Nagios主程序只是提供一个运行框架,其具体监控是靠运行在其下的插件完成的,所以Nagios插件是必须安装的。

tar zxvf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

  验证Nagios插件是否正确安装

ls /usr/local//nagios/libexec

  显示安装的插件文件,即所有的插件都安装在libexec这个目录下。

  7、启动服务

  启动前先检查下配置文件是否正确

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

  如果没有报错,可以启动Nagios服务

/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

  查看Nagios运行状态

/usr/local/nagios/bin/nagiostats

  8、安装NRPE

  由于Nagios只能监测自己所在的主机的一些本地情况,例如,cpu负载、内存使用、硬盘使用等等。如果想要监测被监控的服务器上的这些本地情况,就要用到NRPE。NRPE(Nagios Remote Plugin Executor)是Nagios的一个扩展,它被用于被监控的服务器上,向Nagios监控平台提供该服务器的一些本地的情况。NRPE可以称为Nagios的Linux客户端。

  由于NRPE是通过SSL方式在监控和被监控主机上进行数据传输的,所以必须先安装ssl相关的软件包。

apt-get install libssl-dev libssl0.9.8

  编译安装NRPE

tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config

  注:监控主机上只需要make install-plugin这一步就可以了。监控机上只要有一个check_nrpe插件用于连接被监控端nrpe的daemon就行了。

  启动NRPE

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

  验证NRPE是否正确安装

/usr/local/nagios/libexec/check_nrpe -H localhost

  注:如果成功,会返回NRPE的版本号。
  
  C、Nagios被控端安装配置

  1、创建Nagios用户及组

  建立Nagios账号

/usr/sbin/useradd -m -s /sbin/nologin nagios

  2、编译并安装Nagios插件

tar zxvf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install
cd ..

  验证程序是否被正确安装:

ls /usr/local/nagios/libexec

  显示安装的插件文件,即所有的插件都安装在libexec这个目录下。

  3、安装NRPE

tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
cd ..

  4、启动NRPE

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

  验证NRPE是否正确安装

/usr/local/nagios/libexec/check_nrpe -H localhost

  注:如果成功,会返回NRPE的版本号。

  5、修改NRPE配置文件,让监控主机可以访问被监控主机的NRPE。

  缺省NRPE配置文件中只允许本机访问NRPE的Daemon

vi /usr/local/nagios/etc/nrpe.cfg

#缺省为127.0.0.1,只能本机访问
allowed_hosts=192.168.1.108 

  6、重启nrpe的方法

killall nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

  三、参考文档

  http://www.google.com
  http://www.linuxidc.com/Linux/2011-05/36092.htm
  http://bbs.linuxtone.org/forum.php?mod=viewthread&tid=7404&page=1
  http://www.xtgly.com/2010/09/21/centos-5-5-nginx-nagios监控端和被控端安装配置指南.htm
  http://www.xtgly.com/2010/09/20/nginx-fastcgi-perl-pl、cgi支持.htm



无觅相关文章插件,快速提升流量

Comments

13 Responses to “Nginx环境下构建Nagios监控平台”

  • 你好,求助!我其他都没有问题,但是perl-fcgi.sock生成以后无法访问,权限改成777了也是一样,大小为0KB 端口号9000无法启动,整个网站都是502状态,主页也进不去。架设的其他网站都没问题

  • 2012-08-20 15:06xiao_min说道:

    Can’t locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
    BEGIN failed–compilation aborted at Makefile.PL line 3.
    报错了

  • 登陆之后跳转到了 welcome to nginx 这是怎么回事

  • 2011-09-05 10:41hysean说道:

    我点开HTTP监控服务器项,右边会有Service Commands下面有好多选项,我点击Disable active checks of this service 会进入一个另一个页面,Command Options
    下面有commit 和reset 点击commit提交会报502 Bad Gateway。

    easylife Firefox 6.0.1 Firefox 6.0.1 Windows 7 x64 Edition Windows 7 x64 Edition回复:

    @hysean, 这个问题的确存在,我一般手动改配置,回头我看下什么原因,如果你找到解决方法了,希望分享下,谢谢!

    jack Internet Explorer 8.0 Internet Explorer 8.0 Windows XP Windows XP回复:

    @easylife, 我也遇到这个问题,哪位大哥有解决方案的,分享一下

    hysean Internet Explorer 9.0 Internet Explorer 9.0 Windows 7 x64 Edition Windows 7 x64 Edition回复:

    @easylife, 我也找了好多资料,一直没解决掉,我现在也只能手动配置,我再找找,看有什么办法没。

    wang001200 Google Chrome 23.0.1271.97 Google Chrome 23.0.1271.97 Windows 7 x64 Edition Windows 7 x64 Edition回复:

    @easylife, 大牛哥 请问你解决了这个问题吗?感觉还是蛮重要啊,否则ngaios就只能“看”,不能“做”了。。还有你们说的“手动配置”是直接改配置文件吗?
    也不知道你还来不来。

    easylife Google Chrome 25.0.1364.97 Google Chrome 25.0.1364.97 Windows 7 Windows 7回复:

    @wang001200, 是的直接修改配置文件,一般都是这么做的。

  • 2011-09-02 11:27hysean说道:

    你好,我想问下,我其它的都是正常的,就是在执行server command提交时nginx报502错误,日志里也没发现什么错语信息,到底是那里的问题。

    easylife Firefox 6.0.1 Firefox 6.0.1 Windows 7 x64 Edition Windows 7 x64 Edition回复:

    @hysean, 没懂你什么意思?

  • 还从没玩过Nginx,没弄过的东西,总感觉很难

Leave a Reply

You must be logged in to post a comment.

传奇 似水流年 绽放 风筝 八月照相馆