Nagios监控报警系统

一、Nagios的安装:

1、安装前的准备工作 构建

(1)解决安装Nagios的依赖关系:

Nagios基本组件的运行依赖于httpd、gcc和gd。可以通过以下命令来检查nagios所依赖的rpm包是否已经完全安装:

yum -y install httpd gcc glibc glibc-common *gd* php php-mysql mysql mysql-server

(2)配置selinux

如果您的系统开启了selinux服务,则默认系统将拒绝nagios web cgi程序的运行,所以我们应检查系统是否开启了selinux

getenforce

如果上面命令的结果显示开启了selinux服务,通过下面的命令暂时性的将其关闭:

setenforce 0

如果想在以后完全关闭selinux,可以通过编辑/etc/sysconfig/selinux文件,将其中的selinux后面的值“force”修改为“disable”即可。

当然,我们可以通过以下方式将nagios的CGI程序运行于SELinux/targeted模式而不用关闭selinux:

chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin

chcon -R -t httpd_sys_content_t /usr/local/nagios/share

    但是为了实验能构成功我们还是关闭selinux

(3)安装前需要的所有软件包:

       httpd-2.4.2.tar.gz

       nagios-3.3.1.tar.gz

       nagios-plugins-1.4.15.tar.gz

       ndoutils-1.4b9.tar.gz

       npc-2.0.4.tar.gz

       nrpe-2.12.tar.gz

       php-5.3.6.tar.gz

       rrdtool-1.4.7.tar.gz

2、在当前主机上架设nagios的过程:

(1)、添加nagios运行所需要的用户和组:

     groupadd nagcmd

    useradd -m nagios

     usermod -a -G nagcmd nagios

把apache加入到nagcmd组,以便于在通过web Interface操作nagios时能够具有足够的权限:

usermod -a -G nagcmd apache

(2)、编译安装nagios:

tar zxf nagios-3.2.3tar.gz

cd nagios

./configure--with-command-group=nagcmd--enable-event-broke--prefix=/var/www/nagios

make all    将所有的编译环境都进行编译

make install

make install-init      编译安装开机启动程序

make install-config    编译安装配置文件

make install-commandmode   编译安装其命令

make install-webconf    编译安装web的配置文件,在httpd的配置文件目录(conf.d)中创建Nagios的Web程序配置文件,能够让我们使用web对其进行管理

    由此我们可以看出nagios的安装非常灵活,当我们需要哪个程序的时候可以有针对性的安装。

    创建一个登录nagios web程序的用户,这个用户帐号在以后通过web登录nagios认证时所用:

htpasswd -c /var/www/nagios/etc/htpasswd.users nagiosadmin

修改配置文件/etc/httpd/conf/httpd.conf,将httpd服务的默认网页路径改为:

  /var/www

以上过程配置结束以后需要重新启动httpd:

service httpd restart

(3)、编译、安装nagios-plugins

nagios的所有监控工作都是通过插件完成的,因此,在启动nagios之前还需要为其安装官方提供的插件。

tar zxf nagios-plugins-1.4.13.tar.gz

cd nagios-plugins-1.4.13

  (4)、configure编译过程:

./configure \

--with-nagios-user=nagios \

--with-nagios-group=nagios \

--prefix=/var/www/nagios --with-mysql

(5)、在编译完成之后我们要仔细查看编译的过程,看是否有跳过mysql的警告语句,具体显示内容如下:

wps_clip_image-5027

(6)、如果有,应首先确定mysql的库文件位置没有错,然后给编译的过程指定mysql库文件的位置,方法如下:

cp /usr/lib/mysql到/usr/lib/pkgconfig

./configure --with-nagios-user=nagios --with-nagios-group=nagios --prefix=/var/www/nagios --with-mysql

(7)、编译完成之后我们还要查看编译过程,是否再次出现了跳过mysql的警告语句,如果还是有就拿出我们的杀手锏,方法如下

yum install mysql-devel -y  mysql的这个组件就是解决在编译时无法找到mysql的一些组件或是其他在编译中产生的怪异问题,这步正确完成之后,就进行如下的步骤:

make

make install
  (8)、配置并启动Nagios

     <1>把nagios添加为系统服务并将之加入到自动启动服务队列:

chkconfig --add nagios

chkconfig nagios on

     <2>检查其主配置文件的语法是否正确:

/var/www/nagios/bin/nagios -v /var/www/nagios/etc/nagios.cfg

如果显示如下,则表示语法正确   

wps_clip_image-14652

    <3>如果上面的语法检查没有问题,接下来就可以正式启动nagios服务了:

service nagios start

    <4>通过web界面查看nagios:

http://192.168.7.168/nagios   这是主机的IP,根据自己主机的IP进行相应的修改

如果成功的话将出现如下内容,进行身份认证,输入我们之前设定的web认证帐号和密码:

wps_clip_image-10536

如果一切顺利,成功登录后将显示如下部分画面

wps_clip_image-22639

到此为止,nagios的监控端已经配置完成,现在我们只能进行当前主机的状态监控,如图wps_clip_image-10724

二、对被监控端的配置:

    被监控端的操作系统类型是很重要的,在开始的时候我们介绍了不同操作系统的被监控端应进行相应不同的的配置:   

如果被监控端是windows操作系统,我们采取如下配置:

首先关闭windows上的防火墙

1. 被监控端安装NSClient++-0.3.8-Win32.msi

在安装过程中只需要填写nagios服务的主机地址,并查看任务管理器中的进行是否已经开启:如图

wps_clip_image-16983

2. 安装完成后修改配置文件NSC.ini把需要的库都打开,

找到配置文件的方法:

这个程序的配置文件默认为C:\Program Files\NSClient++下的NSC.ini文件

打开这个文件进行如下修改:

(1)、打开需要的库文件,将行的最前端带有“;”的,将这个符号删除即为打开。

      具体修改结果如下:

[modules]

NRPEListener.dll

NSClientListener.dll

NSCAAgent.dll

CheckWMI.dll

FileLogger.dll

Checksystem.dll

CheckEventLog.dll

CheckHelpers.dll

;# NSCLIENT++ MODULES

;# A list with DLLs to load at startup.

;  You will need to enable some of these for NSClient++ to work.

; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

; *                                                               *

; * N O T I C E ! ! ! - Y O U   H A V E   T O   E D I T   T H I S *

; *                                                               *

; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

FileLogger.dll

CheckSystem.dll

CheckDisk.dll

NSClientListener.dll

NRPEListener.dll

SysTray.dll

CheckEventLog.dll

CheckHelpers.dll

CheckWMI.dll

     (2)、配置nagios服务器的IP地址:

          修改结果如下:

          ;# ALLOWED HOST ADDRESSES

allowed_hosts=192.168.0.8 保存配置文件即可   

3. 在监控服务器上修改nagios配置文件nagios.cfg

为了配置的方便进行我们对nagios的主配置文件做一个连接

ln -vs /var/www/nagios/etc/nagios.cfg /etc/nagios.cfg

对配置文件/etc/nagios.cfg进行如下修改  

去掉cfg_file=/var/www/nagios/etc/objects/windows.cfg 的注释

定义windows.cfg

修改/var/www/nagios/etc/objects/windows.cfg文件,修改结果如下

define host{

        use             windows-server  ; Inherit default values from a template

        host_name       winserver       ; The name we're giving to this host

        alias           My Windows Server   ; A longer name associated with the host

        address         192.168.0.254  ; windows主机的IP,我的为192.168.0.254

        }

     保存退出即可:

     重新启动nagios服务

     service nagios restart 

   查看我们的nagios是否监控到了windows主机:

     如图显示则表示监控成功:

wps_clip_image-4736

一、下面就进入对其它linux主机实现nagios监控的配置

三、在被监控端的linux主机上:

1、先添加nagios用户来执行此服务
   useradd nagios

2、为了安装nrpe,先安装nagios-plugins-1.4.15.tar.gz 插件
   tar zxf 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

3、编译安装nrpe-2.12.tar.gz
   tar -zxvf nrpe-2.12.tar.gz
   cd nrpe-2.12
   (注:在执行下步之前必须保证这个主机上已经安装了openssl、openssl-devel 否则在编译的时候将提示有不能找到ssl头文件的错误,导致编译无法进行)
    ./configure  
    make all
    make install-plugin
    make install-daemon
    make install-daemon-config

4、对nrpe的配置文件/usr/local/nagios/etc/nrpe.cfg进行配置
    vim /usr/local/nagios/etc/nrpe.cfg
    server_address=127.0.0.1  允许监控的IP

5、检测配置文件的语法并启动服务
   /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
   如果没有任何提示则表示语法正确并已经启动了该服务

   到此我们在被监控的linux主机上的配置已经完成

四、Nagios服务端配置:

1、安装NRPE
   tar xvf nrpe-2.12.tar.gz
   cd nrpe-2.12
  (注:同样,在执行下步之前必须保证这个主机上已经安装了openssl-devel、openssl,否则编译将出错)
   ./configure   
   make all
   make install-plugin

2、配置nagios的服务命令文件/var/www/nagios/etc/objects/commands.cfg定义外部构件nrpe
   vim /var/www/nagios/etc/objects/commands.cfg
  添加如下内容:
  #check nrpe
  define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }

3、由于此服务的配置文件中被没有关于监控linux主机的配置文件,所以我们要自己定义并创建
   在/etc/nagios.cfg中定义被监控的linux主机的配置文件的名字及位置
   vim /etc/nagios.cfg
   添加如下内容
   cfg_file=/var/www/nagios/etc/objects/mylinux.cfg  指定我们定义的被监控linux主机的配置文件名字和位置

   然后我们就要到定义的位置创建这个文件了
   vim /var/www/nagios/etc/objects/mylinux.cfg
   添加如下内容
   define host{
           use             linux-server
           host_name      mylinux
           alias            mylinux
           address        192.168.0.200(被监控的linux主机的IP,这个是我的)
        }

   define service{
        use                      generic-service
         host_name             mylinux
        service_description     check-swap
         check_command        check_nrpe!check_swap
               }

   define service{
        use                      generic-service
         host_name             mylinux
         service_description     check-load
         check_command         check_nrpe!check_load

               }

   define service{
         use                      generic-service
         host_name             mylinux
         service_description     check-disk
         check_command        check_nrpe!check_had1
        }

   define service{
        use                      generic-service
        host_name             mylinux
        service_description     check-users
        check_command        check_nrpe!check_users
               }

   define service{
        use                    generic-service
        host_name           mylinux
        service_description  otal_procs
        check_command     check_nrpe!check_total_procs
               } 
    保存退出
    修改这个文件的属主、属组
    chown nagios:nagios mylinux.cfg
    检查我们创建的文件是否有语法错误:
    nagios -v /var/www/nagios/etc/objects/mylinux.cfg

4、重启nagios服
    service ngios restart
   好了,关于监控linux主机的配置到此为止

5、我们查看nagios是否监控到了mylinux,显示如图:

wps_clip_image-21933

好了,我们监控其他linux主机已经实现了,关于nagios对其它linux主机的监控配置到此为止

五、Nagios监控MySQL服务及飞信报警

   上面我们进行了相关主机监控的配置,但是我们只能通过查看nagios才能知道我们所监控主机的服务是否在线可用,这和我们在实际应用中的作用还有一定的差距,下面我们就来实现nagios的报警机制,即使我们不查看nagios,只要我们所监控的服务掉线了,nagios就给我们发飞信开提示我们。

    我们通过监控本机的mysql服务的在线情况来实现这个实验:

nagios监控mysql服务器:

1、 建立专用数据库:

我们通过让nagios监控mysql服务中的一个特定的数据库的在线状态来实现对mysql服务在线状态的监控,

创建这个数据库,并对其进行相应的配置
mysql 
mysql&gt; create database nagios; 
mysql&gt; grant select on nagios.* to nagios@'%' identified by 'nagios'; 
mysql&gt; flush privileges;

2、查看/var/www/nagios/libexec/check_mysql 这个二进制文件是否存在,如果存在就
继续下面的操作,如果不存在就重新编译安装nagios-plugins,具体方法在上一篇有关nagios的文章中,编译时一定要指明--with-mysql.

   对check-mysql这个二进制文件进行测试,看是否能够读取数据库状态信息
   /var/www/nagios/libexec/check_mysql -H 10.1.1.30 -u nagios -d nagios -p 123qweasd

Uptime: 970348  Threads: 1  Questions: 684584  Slow queries: 3  Opens: 672  Flush tables: 1  Open tables: 369  Queries per second avg: 0.705

    如果输出上面的信息,则表示能够读取nagios这个数据库的状态

3、在定义监控命令的文件/var/www/nagios/etc/objects/command.cfg里增加插件命令:
   vim  /var/www/nagios/etc/objects/command.cfg
   添加如下内容:
   #check mysql 
define command{ 
command_name check_mysql 
command_line $USER1$/check_mysql -H $HOSTADDRESS$ -u nagios -d nagios -p nagios
}

4、定义服务:

  在/var/www/nagios/etc/objects/localhost.cfg 中添加如下内容 
define service { 
        use                             local-service
        host_name                       localhost
        service_description             msyql
        check_command                   check_mysql  监控这个服务的命令
        notifications_enabled           1                对这个服务开启监控
        }

    OK,我们可以到nagios的“servers”中查看是否监控到了这个服务,显示如下:

wps_clip_image-12442

    既然当服务掉线的时候要使用飞信报警,接下来就对飞信进行配置,来实现飞信报警机制   

    准备飞信的客户端和库文件:
     fetion  libACE-5.7.2.so  libACE_SSL-5.7.2.so  libcrypto.so.4  libssl.so.4

1、将飞信的客户端加入到/usr/bin/中,并添加执行权限
   mv fetion /usr/bin
   chmod +x /usr/bin/fetion

2、将飞信的库文件加入到系统的库文件中
   mv lib* /usr/lib/

3、测试飞信能否成功发送信息:

  fetion --mobile 15003880800 --pwd 123qweQWE(飞信密码) --to 15003880800(电话号码) --msg-tpye=0  --msg-utf8 $HOSTNAME

  如果出现一大片的乱码信息,表示飞信连接成功,这一大片的乱码是飞信的验证码图片,这个验证码图片在图形界面下才能显示出来,只有第一次使用的时候才会用到验证码,这个图片的位置在/usr/bin下,我们输入相应的验证码即可。

  测试成功之后,就继续进行

4、修改nagios的报警配置文件/var/www/nagios/etc/objects/ templates.cfg,修改报警机制,将email改成fetion
   vim /var/www/nagios/etc/objects/templates.cfg 修改结果如下

   define contact{
   name              generic-contact    ; The name of thiscontact template
  service_notification_period  24x7 ; service notifications can be sent anytime
   host_notification_period    24x7   ; host notifications can be sent anytime
   service_notification_options    w,u,c,r,f,s             ; send notifications for all service states, flapping events, and scheduled downtime events
   host_notification_options       d,u,r,f,s               ; send notifications for all host states, flapping events, and scheduled downtime events
   service_notification_commands   notify-service-by-fetion; send service notifications via email
host_notification_commands  notify-service-by-fetion; send host notifications via email

register  0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLA
        }

5、修改命令文件/var/www/nagios/etc/objects/commands.cfg 
   vim /var/www/nagios/etc/objects/commands.cfg 添加如下内容
define command{
       command_name  notify-service-by-fetion
       command_line      /usr/bin/fetion --mobile 15003880800 --pwd 123qweQWE --to 15003880800 --msg-tpye=0  --msg-utf8 $HOSTNAME
}

6、重启nagios服务
   service nagios restart

    到此为止我们我们对mysql服务的飞信报警,已经配置完成了,现在我们可以关闭mysql服务,看你是否收到了我们的nagios发送的飞信。