Nagios

一、软件的作用

Nagios:处理收集的相关数据

Nagios-plugins:收集系统相关的信息

Apachephp:通过web页面显示处理后的相关数据

 

二、Nagiosserver安装

 

对于nagios服务器,只需安装nagiosnagios-pluginsapachephp就可以完成其本地服务的监控,那么对于远程服务器的监管,参看nagios client部分。

 

1、安装相应的依赖软件

yuminstall -y gcc glibc glibc-common gd gd-devel xinetd openssl-devel perl

 

2、创建nagios用户和用户组

useradd -s /sbin/nologin nagios

mkdir /usr/local/nagios

chown -R nagios:nagios/usr/local/nagios

 

3、编译安装Nagios

wgethttp://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.4.3.tar.gz

tar zxvf nagios-3.4.3.tar.gz

cd nagios

./configure --prefix=/usr/local/nagios

Make all

Make install

makeinstall-init

makeinstall-commandmode

makeinstall-config

 

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

切换目录到安装路径(这里是/usr/local/nagios),看是否存在etcbinsbinsharevar 这五个目录,如果存在则可以表明程序被正确的安装到系统了。Nagios 各个目录用途说明如下:

bin  Nagios   可执行程序所在目录

etc  Nagios   配置文件所在目录

sbin     NagiosCGI 文件所在目录,也就是执行外部命令所需文件所在的目录

share          Nagios网页文件所在的目录

libexec        Nagios外部插件所在目录

var  Nagios  日志文件、lock 等文件所在的目录

var/archives  Nagios 日志自动归档目录

var/rw        用来存放外部命令文件的目录

 

5、安装Nagios-plugins插件

wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz

tarzxvf nagios-plugins-2.0.3.tar.gz

cd nagios-plugins-2.0.3

./configure--prefix=/usr/local/nagios

make&& make install

 

6、安装与配置ApachePhp

 

Apache Php 不是安装nagios 所必须的,但是nagios提供了web监控界面,通过web监控界面可以清晰的看到被监控主机、资源的运行状态,因此,安装一个web服务是很必要的。

需要注意的是,nagiosnagios3.1.x版本以后,配置web监控界面时需要php的支持。这里我们下载的nagios版本为nagios-3.4.3,因此在编译安装完成apache后,还需要编译php模块,这里选取的php版本为php5.4.10

 

a. 安装Apache

 

# wgethttp://archive.apache.org/dist/httpd/httpd-2.2.23.tar.gz

 

# tarzxvf httpd-2.2.23.tar.gz

 

# cdhttpd-2.2.23

 

#./configure --prefix=/usr/local/apache2

 

# make&& make install

 

b. 安装Php

#wget http://cn2.php.net/distributions/php-5.6.10.tar.gz

# tar zxvfphp-5.6.10.tar.gz

# cd php-php-5.6.10

#./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs

# make

# makeinstall

 

7、配置apachehttpd.conf文件

打开配置文件“Vim /usr/local/apapche2/conf/httpd.conf”修改内容如下

7.1 修改运行用户为nagios


User nagios

Group nagios

7.2 添加index.php、类型(支持php)以及ServerName


<IfModule dir_module>

DirectoryIndex index.html index.php </IfModule>

</IfModule>

AddType application/x-httpd-php .php

ServerName 127.0.0.1:80

7.3 nagios 的web 监控页面必须经过授权才能访问,这需要增加验证配置,即在httpd.conf 文件最后添加如下信息

#setting for nagios

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

<Directory "/usr/local/nagios/sbin">

     AuthType Basic

     Options ExecCGI

     AllowOverride None

     Order allow,deny

     Allow from all

     AuthName "Nagios Access"

     AuthUserFile /usr/local/nagios/etc/htpasswd

     Require valid-user

</Directory>

Alias /nagios "/usr/local/nagios/share"

<Directory "/usr/local/nagios/share">

     AuthType Basic

     Options None

     AllowOverride None

     Order allow,deny

     Allow from all

     AuthName "nagios Access"

     AuthUserFile /usr/local/nagios/etc/htpasswd

     Require valid-user

</Directory>

创建密码:

# /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd nagios

8、通过IP地址访问nagios页面

8.1 重新启动apapche2和nagios

#/usr/local/apache2/bin/apachectl restart

#/etc/init.d/nagios restart

8.2 访问nagios(http:/192.168.0.107/nagios)

wKiom1XZTNOARFMoAACikw5y55k619.jpg

wKiom1XZTNPAN4bGAAFTr6cHm0I487.jpg

二、Nagios如何配置

    Nagios 主要用于监控一台或者多台本地主机及远程的各种信息,包括本机资源及对外的服务等。默认的Nagios 配置没有任何监控内容,仅是一些模板文件。若要让Nagios 提供服务,就必须修改配置文件,增加要监控的主机和服务,下面将详细介绍。


6.1 默认配置文件介绍

Nagios 安装完毕后,默认的配置文件在/usr/local/nagios/etc目录下。

cgi.cfg                控制CGI访问的配置文件

nagios.cfg              Nagios 主配置文件

resource.cfg  变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如$USER1$

objects   objects 是一个目录,在此目录下有很多配置文件模板,用于定义Nagios 对象

objects/commands.cfg      命令定义配置文件,其中定义的命令可以被其他配置文件引用

objects/contacts.cfg   定义联系人和联系人组的配置文件

objects/localhost.cfg  定义监控本地主机的配置文件

objects/printer.cfg      定义监控打印机的一个配置文件模板,默认没有启用此文件

objects/switch.cfg      定义监控路由器的一个配置文件模板,默认没有启用此文件

objects/templates.cfg定义主机和服务的一个模板配置文件,可以在其他配置文件中引用

objects/timeperiods.cfg     定义Nagios 监控时间段的配置文件

objects/windows.cfg  监控Windows主机的一个配置文件模板,默认没有启用此文件

 

6.2 配置文件之间的关系

nagios的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,nagios各个配置文件之间是互为关联,彼此引用的。

成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点:

第一:定义监控哪些主机、主机组、服务和服务组; 
第二:定义这个监控要用什么命令实现; 
第三:定义监控的时间段; 
第四:定义主机或服务出现问题时要通知的联系人和联系人组。

6.3 配置Nagios

 为了能更清楚的说明问题,同时也为了维护方便,建议将nagios各个定义对象创建独立的配置文件:

·         创建hosts.cfg文件来定义主机和主机组

·         创建services.cfg文件来定义服务

·         用默认的contacts.cfg文件来定义联系人和联系人组

·         用默认的commands.cfg文件来定义命令

·         用默认的timeperiods.cfg来定义监控时间段

·         用默认的templates.cfg文件作为资源引用文件

 

案例说明:

cd /usr/local/nagios/etc/

vim 192.168.0.12.cfg                   

define host{                                   #定义host

        use                     linux-server   #引用 templates.cfg模板下的linux-server主机属性       

        host_name             192.168.0.12

        alias                    0.12

        address                192.168.0.12

        }

define service{                              #定义监控的服务

        use           generic-service       #引用 templates.cfg模板下的generic-service的相关属性

        host_name               192.168.0.12

        service_description        check_ping

        check_command          check_ping!100.0,20%!200.0,50%

        #引用 commands.cfg模板下的check_ping命令

        max_check_attempts 5

       #nagios检测到问题时,一共尝试检测5次都有问题才会告警,如果该数值为1,那么检测到问题立即告警

        normal_check_interval 1 

      #重新检测的时间间隔,单位是分钟,默认是3分钟

        contact_groups   common #如下所示,在contacts.cfg中定义的common

       notifications_enabled  1

       #是否开启提醒功能。1为开启,0为禁用。一般,这个选项会在主配置文件(nagios.cfg)中定义,效果相同。

       notification_period   24x7

        #发送提醒的时间段。非常重要的主机(服务)我定义为7×24,一般的主机(服务)就定义为上班时间。如果不在定义的时间段内,无论什么问题发生,都不会发送提醒。

       #notification_options:w,u,c,r   ;这个是service的状态。wwaninguunknown, ccritical, rrecover(恢复了),类似的还有一个  host对应的状态:d,u,r   d = 状态为DOWN, u = 状态为UNREACHABLE, r = 状态恢复为OK,需要加入到host的定义配置里。

     

}

 

说明:check_ping!100.0,20%!200.0,50%commands.cfg下的进行比较

 

define command{

        command_name    check-host-alive     #命令名称,用来检测主机状态。

        command_line  $USER1$/check_ping -H $HOSTADDRESS$ -w3000.0,80% -c 5000.0,100% -p 5   

 

# 这里的变量$USER1$resource.cfg文件中进行定义,即$USER1$=/usr/local/nagios/libexec;

# 那么check_ping的完整路径为/usr/local/nagios/libexec/check_ping;

# “-w 3000.0,80%”“-w”说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。

# “-c 5000.0,100%”“-c”说明后面的一对值对应的是“CRITICAL”“100%”是其临界

# “-p 1”说明每次探测发送一个包。

 

notifications_enabled:如下图所示,表示该功能没有开

spacer.gif

 

注意:

监控页面出现

It appears as though you donot have permission to view information for any of the hosts you requested...

If you believe this is an error, checkthe HTTP server authentication requirements for accessing this CGI and checkthe authorization options in your CGI configuration file.

 

1、修改/etc/cgi.cfg

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

use_authentication=1      #1修改为0,保存

/etc/init.d/nagios restart

2、在次访问就能正常访问了

-----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

配置告警

vim /etc/nagios/objects/contacts.cfg

 //增加

define contact{

       contact_name               123

       use                        generic-contact

       alias                       aming

       email                      [email protected]

       }

define contactgroup{

       contactgroup_name           common

       alias                       common

       members                   123

}

三、监控nagios server本地相关服务
 
在nagios的主配置文件下(/usr/local/nagios/etc/nagios.cfg),启动如下的配置
 
log_file=/usr/local/nagios/var/nagios.log
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
 
#localhost.cfg即为监控nagios server本地的相关服务(启动了默认监控的内容,可以自定义)。
 
接下来,定义一个邮件报警(针对check_ssh服务进行测试)
 

 

首先:在contacts.cfg下自定义,报警的邮箱地址

 

define contact{

       contact_name               my_email

       use                        generic-contact   #调用templates.cfg中定义的generic-contact

       alias                       jiang

       email                      [email protected]

       }

define contactgroup{

       contactgroup_name           common

       alias                       common

       members                   my_email

}

 

Localhost.cfg针对ssh的报警配置

 

define service{

       use                            local-service       

       host_name                       localhost

       service_description               SSH

       check_command                 check_ssh

       notifications_enabled             1            #开启提醒功能

       contact_groups                  common      #调用邮件告警功能

       

       }

 

注意:

首先要确保sendmail 相关组件的完整安装,我们可以使用如下的命令来完成sendmail 的安装:

# yuminstall -y sendmail*

然后重新启动sendmail服务:

# servicesendmail restart

然后发送测试邮件,验证sendmail的可用性:

# echo"test" | mail [email protected]

 

spacer.gif

 

三、nagiosserver监控远程的nagios client

 

3.1 nagios server通过nrpe远程监控客户端信息

 

spacer.gif

 

Nagios 需要监控某个远程Linux 主机的服务或者资源情况时:

      Nagios 会运行check_nrpe这个插件,告诉它要检查什么;

      check_nrpe 插件会连接到远程的NRPEdaemon,所用的方式是SSL

      NRPE daemon 会运行相应的Nagios 插件来执行检查;

      NRPE daemon 将检查的结果返回给check_nrpe 插件,插件将其递交给nagios做处理。

   注意:NRPEdaemon 需要Nagios 插件安装在远程的Linux主机上,否则,daemon不能做任何的监控。

 

第一步:软件的安装

Nagiosserver:安装软件nrpe(安装其中的check_nrpe

Nagiosclientnagios-plugins(执行插件收集信息),nrpe(安装其中的nagios daemon

 

第二步:nagios server软件安装

# wgethttp://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz

# tar zxvfnrpe-2.13.tar.gz

# cd nrpe-2.13

# ./configure

# make all

安装check_nrpe 这个插件

[[email protected]_servernrpe-2.13]# make install-plugin

spacer.gif

 

第二步:nagios client软件安装

1、基础软件包安装

yum install -y gcc glibcglibc-common gd gd-devel xinetd openssl-devel

1、安装nagios-plugin

wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz

tarzxvf nagios-plugins-2.0.3.tar.gz

cd nagios-plugins-2.0.3

./configure--prefix=/usr/local/nagios

make&& make install

 

2、修改权限

Useradd nagios

# chown nagios.nagios /usr/local/nagios
# chown -R nagios.nagios /usr/local/nagios/libexex

 

3、安装nrpe_deamon

# wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz
# tar zxvf nrpe-2.13.tar.gz
# cd nrpe-2.13
# ./configure
# make all

安装deamon(nrpe的安装目录下,执行如下操作)

#[[email protected]_client nrpe-2.13]#make install-daemon

安装配置文件

#[[email protected]_client nrpe-2.13]#make install-daemon-config

现在再查看nagios 目录就会发现有5个目录了

spacer.gif

按照安装文档的说明,是将NRPE deamon作为xinetd下的一个服务运行的。在这样的情况下xinetd就必须要先安装好,不过一般系统已经默认安装了。

[[email protected]_clientnrpe-2.13]# make install-xinetd

注意:出现/usr/bin/install: cannot stat`sample-config/nrpe.xinetd': No such file or directory,修改当前sample-config目录下的名称即可

spacer.gif

可以看到创建了这个文件/etc/xinetd.d/nrpe

编辑这个脚本:修改红色部分的内容

servicenrpe

{

        flags           = REUSE

        socket_type     = stream

        port            = 5666

        wait            = no

        user            = nagios

        group           = nagios

        server          = /usr/local/nagios/bin/nrpe

        server_args     = -c /usr/local/nagios/etc/nrpe.cfg--inetd

        log_on_failure  += USERID

        disable         = no

        only_from       = 127.0.0.1 192.168.0.107

}

only_from 后增加监控主机的IP地址(既nagiosserverIP地址)

编辑/etc/services 文件,增加NRPE服务

nrpe            5666/tcp                # nrep

重启xinted 服务

# servicexinetd restart

查看nrpe服务是否启动

[[email protected]_clientnrpe-2.13]# netstat -an | grep 5666

tcp        0     0 :::5666                    :::*                        LISTEN

 

测试NRPE是否则正常工作

使用上面在被监控机上安装的check_nrpe 这个插件测试NRPE 是否工作正常。

#/usr/local/nagios/libexec/check_nrpe -H 被监控主机IP

 

1、出现错误

[[email protected]_servernrpe-2.13]# /usr/local/nagios/libexec/check_nrpe -H 192.168.0.105

CHECK_NRPE:Error - Could not complete SSL handshake.

 

修改nagios client的配置,如下(添加allowed_hosts)

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

allowed_hosts=127.0.0.1,192.168.0.107

修改/usr/local/nagios/etc/nrpe.cfg

log_facility=/var/log/nrpe/nrpe.log  #修改目录地址

server_port=5666                   #修改监听端口

 

/etc/init.d/xinetdrestart

 

测试结果

[[email protected]_servernrpe-2.13]# /usr/local/nagios/libexec/check_nrpe -H 192.168.0.105

NRPE v2.13                         #NRPE v2.13就是返回的正确结果,表示工作正常

 

Nagios server怎么监控nagios client

1.nagios client可以监控那些服务,如下所示,表示可监控的服务有check_userscheck_loadcheck_hda1check_zombie_procscheck_total_procs。注意红色部分的值的修改(路径/usr/local/nagios/etc/nrpe.cfg

[[email protected]_clientetc]# cat nrpe.cfg |grep -v "^#"|grep -v "^$"

log_facility=/var/log/nrpe/nrpe.log

pid_file=/var/run/nrpe.pid

server_port=5666

nrpe_user=nagios

nrpe_group=nagios

allowed_hosts=127.0.0.1,192.168.0.107

dont_blame_nrpe=0

debug=0

command_timeout=60

connection_timeout=300

command[check_users]=/usr/local/nagios/libexec/check_users-w 5 -c 10

command[check_load]=/usr/local/nagios/libexec/check_load -w15,10,5 -c 30,25,20

command[check_hda1]=/usr/local/nagios/libexec/check_disk -w20% -c 10% -p /dev/sda1

command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs-w 5 -c 10 -s Z

command[check_total_procs]=/usr/local/nagios/libexec/check_procs-w 150 -c 200

 

check_nrpe–H 被监控的主机 -c 要执行的监控命令

注意:-c 后面接的监控命令必须是nrpe.cfg 文件中定义的。也就是NRPEdaemon只运行nrpe.cfg中所定义的命令。

红色部分是命令名,也就是check_nrpe -c 参数可以接的内容,等号 “=” 后面是实际执行的插件程序(这与commands.cfg 中定义命令的形式十分相似,只不过是写在了一行)。也就是说check_users 就是等号后面/usr/local/nagios/libexec/check_users -w 5 -c 10 的简称。

Nagios server测试插件是否可用check_users就是nagios clientnrep.cfg所定义)

[[email protected]_serverlibexec]# ./check_nrpe -H 192.168.0.105 -c check_users

USERS OK -2 users currently logged in |users=2;5;10;0

 

Nagiosserver配置监控远程主机

1、配置commond.cfg(路径:/usr/local/nagios/etc/objects/commands.cfg

# 'check_nrpe' command definition
define command{
        command_name    check_nrpe         # 定义命令名称为check_nrpe,在services.cfg中要使用这个名称.
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$       #这是定义实际运行的插件程序.
                        #
这个命令行的书写要完全按照check_nrpe这个命令的用法       
}
 
2、在objects目录下,建立192.168.0.105.cfg
配置内容如下(vim 192.168.0.105.cfg)
define host{
        use                     linux-server
        host_name               Nagios-Linux
        alias                   0.105
        address                 192.168.0.105
        }
define service{
        use                     local-service
        host_name               Nagios-Linux
        service_description     Current Load
        check_command           check_nrpe!check_load
        }
 
define service{
        use                     local-service
        host_name               Nagios-Linux
        service_description     Check Disk hda1
        check_command           check_nrpe!check_hda1
        }
 
define service{
        use                     local-service
        host_name               Nagios-Linux
        service_description     Total Processes
        check_command           check_nrpe!check_total_procs
        }
 
define service{
        use                     local-service
        host_name               Nagios-Linux
        service_description     Current Users
        check_command           check_nrpe!check_users
        }
 
define service{
        use                     local-service
        host_name               Nagios-Linux
        service_description     Check Zombie Procs
        check_command           check_nrpe!check_zombie_procs
        }
3、在nagios server的主配置文件上,启动该文件
cfg_file=/usr/local/nagios/etc/objects/192.168.0.105.cfg
4、nagios server就可以查看到监控的主机了

wKiom1XZTvyDUmr1AAGX9Jizs3c894.jpg

5、如果还需监听在libexec中定义了的服务如check_swap,如下所示
在nagios client的nrpe.cfg配置中增加如下配置
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
在nagios server上的192.168.0.105.cfg上添加如下配置
define service{
        use                     local-service
        host_name               Nagios-Linux
        service_description   check swap
        check_command           check_nrpe!check_swap
        }
6、如果libexec中没有定义的服务呢?此时就需自定义服务了
1. 在客户端上创建脚本/usr/local/nagios/libexec/check_disk.sh
vim  /usr/local/nagios/libexec/check_disk.sh
写入如下内容:(client)

#! /bin/bash
row=`df -h |wc -l`
for i in `seq 2 $row`
do
   ava=`df -h |sed -n "$i"p|awk '{print $4}'`
   u_per=`df -h |sed -n "$i"p|sed -n "s/\%//"p|awk '{print $5}'`
   p_p=`df -h -P|sed -n "$i"p|awk '{print $6}'`
   if [ "$u_per" == "97" ]
   then
      echo -n "$p_p CRITICAL $u_per% $ava"
      sta[$i]=2
   elif [ "$u_per" -gt "95" ]
   then
      echo -n "$p_p WARNING! $u_per% $ava"
      sta[$i]=1
   else
      echo -n "$p_p OK $u_per% $ava"
      sta[$i]=0
   fi
done
n=0
for j in `seq 2 $row`
do
if [ "${sta[$j]}" -gt $n ]
then
     n=${sta[$j]}
fi
done
exit $n
注意:exit 0(表示OK),exit 1(表示 WARNING),exit 2(表示 CRITICAL)。在nagios server上是根据exit的返回值确定是否为 OK,WARNING,CRITICAL

2.
保存后,修改该脚本的权限
chmod +x  /usr/local/nagios/libexec/check_disk.sh
client上)
3.
然后编辑/etc/local/nagios/etc/nrpe.cfg文件
vim /etc/local/nagios/etc/nrpe.cfg  #
加入一行:(client上)
command[check_disk]=/usr/local/nagios/libexec/check_disk.sh
保存,重启xinetd服务
/etc/init.d/xinetd restart
client上)
4.
检测刚才的脚本是否正常运行的方法是,到server端执行如下命令
check_nrpe -H 192.168.0.105 -c check_disk
server上)
如果正常的话,会输出一行磁盘检测的数据,否则可能会报错。

5.
server上添加相应的service
cd /usr/local/nagios/etc/objects/192.168.0.105.cfg
vim 192.168.0.105.cfg     #
加入如下内容:
define service{
        use                     local-service
        host_name               Nagios-Linux
        service_description     Check Disk
        check_command           check_nrpe!check_disk
        }
6.
重启nagios服务
/etc/init.d/nagios restart   
server上)
7. 运行情况

wKioL1XZUaqDmyaAAAJQKwb9Rfg361.jpg