一、Nagios简介
What's the Nagios?
Nagios是一款用于系统和网络监控的应用程序。它可以在你设定的条件下对主机和服务进行监控,在状态变差和变好的时候给出告警信息。
Nagios最初被设计为在Linux系统之上运行,然而它同样可以在类Unix的系统之上运行。
官方网站:http://www.nagios.org
中文帮助文档:http://nagios-cn.sourceforge.net/nagios-cn/index.html
二、服务器端安装
1、安装环境需求;
Apache
PHP
GCC compiler
GD development libraries
需要root权限,以上环境可以及编译安装,也可以yum安装。具体可参考文章《构建LAMP环境》。
2、建立Nagios用户和组
#useradd nagios
#groupadd nagcmd
#usermod -a -G nagcmd nagios
#usermod -a -G nagcmd apache
3、软件下载及安装
因版本经常更新,在此只列出版本,请自行去Nagios官网下载最新稳定版本。
nagios-3.3.1.tar.gz
nagios-plugins-1.4.15.tar.gz
nrpe-2.8.1.tar.gz
安装Nagios
一般将所有源码文件放置在/usr/local/src,下面所有源码操作默认目录为此目录。
#tar zxvf nagios-3.3.1.tar.gz
#cd nagios
#./configure --prefix=/usr/local/nagios --with-command-group=nagcmd
#make all
#make install
#make install-init
#make install-config
#make install-commandmode
配置WEB接口
#++++++如果是yum安装的apache,直接执行make install-webconf。如果是编译安装的apache,则将sample-config/httpd.conf拷贝到apache的配置文件目录,或者参考该文件内容自行配置。本次配置方法为以下配置:
#cp sample-config/httpd.conf /usr/local/apache/conf/extra/nagios.conf
并且编辑apache配置文件httpd.conf添加如下语句:
Include conf/extra/nagios.conf
创建一个nagiosadmin的用户用于Nagios的WEB接口登录。
#/usr/local/apache/bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
以上配置完成后重启apache是配置生效
#/usr/local/apache/bin/apachectl restart
去浏览器访问http://$IP/nagios 测试WEB借口配置是否成功,如不能正常访问,请检查以上配置。
编译并安装Nagios插件
#tar zxvf nagios-plugins-1.4.15.tar.gz
#cd nagios-plugins
#./configure --with-nagios-user=nagios --with-nagios-group=nagios
#make && make install
启动Nagios
首先将Nagios加入到服务列表,以便在系统启动时自动启动
#chkconfig --add nagios
#chkconfig nagios on
验证nagios配置样例文件
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
如果没有报错,可以启动Nagios服务
#service nagios start
此时,Nagios安装基本完毕。登录WEB借口测试安装结果。如果出现“http 500”内部服务器错误,请检查SELinux是否关闭,以及相关apache配置。
三、Nagios配置
1、Nagios默认配置文件介绍
Nagios安装完毕后,默认的配置文件在/usr/local/nagios/etc目录下,每个文件或目录含义如下所示:
文件名 用途
cgi.cfg 控制cgi访问的配置文件
htpasswd.user 由htpasswd生成的访问控制文件
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主机的一个配置文件,默认没有启用此文件
2、Nagios配置文件之间的关系
在nagios的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,nagios各个配置文件之间是互为关联,彼此引用的。
成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点:
第一:定义监控哪些主机、主机组、服务和服务组
第二:定义这个监控要用什么命令实现,
第三:定义监控的时间段,
第四:定义主机或服务出现问题时要通知的联系人和联系人组。
3、开始配置Nagios
为了维护方便,我们将Nagios各个定义对象创建独立的配置文件,文件列表及说明如下:
/internal-servers/host.cfg 定义主机和主机组
/internal-servers/services.cfg 定义服务
/objects/contacts.cfg 使用默认的联系人和联系人祖定义文件
/objects/commands.cfg 使用默认的命令定义文件
/objects/timeperiods.cfg 使用默认的时间段定义文件
/objects/templates.cfg 使用默认的资源引用文件
在配置之前,先理清一个思路。根据上文所列出的“Nagios配置文件之间的关系”可以有一个基本的思想,
首先,要确定我们要进行监控的主机、服务等;
其次,是怎么去监控,用什么命令去监控,这个就是在commands.cfg文件中定义了,当然默认的配置文件中基本的命令都有了;
再次,监控的服务或者主机需要在什么时间去监控?7x24的监控?这个是在timeperiods.cfg文件中定义的;
最后,当被监控的服务或状态发生变化的时候需要通知谁?这个可以再contacts.cfg文件中来指定。
有了以上思路,我们就可以开始配置了,本文档以监控一台CentOS主机的常规状态和Web服务为例;
1)templates.cfg文件详情
以下主要列出 generic-contact、generic-host、linux-server、generic-service的参数情况,其他暂不做讨论。 
define contact{
        name                            generic-contact ; 定义联系人模板名称
        service_notification_period     24x7 ; 当服务出现异常时,发送通知的时间段,这个时间段“7x24"在timeperiods.cfg文件中定义
        host_notification_period        24x7 ; 当主机出现异常时,发送通知的时间段,这个时间段“7x24"在timeperiods.cfg文件中定义
        service_notification_options    w,u,c,r,f,s ; 这个定义的是“通知可以被发出的情况”w即warn,表示警告状态,u即unknown,表示不明状态,c即criticle,表示紧急状态,r即recover,表示恢复状态
        host_notification_options       d,u,r,f,s ; 定义主机在什么状态下需要发送通知给使用者,d即down,表示宕机状态,u即unreachable,表示不可到达状态,r即recovery,表示重新恢复状态。
        service_notification_commands   notify-service-by-email ; 服务故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件,其中“notify-service-by-email”在commands.cfg文件中定义
        host_notification_commands      notify-host-by-email ; 主机故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件,其中“notify-host-by-email”在commands.cfg文件中定义
        register                        0       ; 不注册,这里是在定义一个模板
        }
define host{
        name                            generic-host ; 主机模板名称
        notifications_enabled           1       ; 开启通知
        event_handler_enabled           1       ; 事件处理开启
        flap_detection_enabled          1       ; 摆动检测开启
        failure_prediction_enabled      1       ; Failure prediction is enabled
        process_perf_data               1       ; 是否启用进程性能数据记录、Nagios的数据输出功能
        retain_status_information       1       ; 重启时保留状态信息
        retain_nonstatus_information    1       ; Retain non-status information across program restarts
notification_period 24x7 ; 异常时通知时间段
        register                        0       ; 不注册
        }
define host{
name linux-server ; 主机模板名称
use generic-host ; 引用templates.cfg文件中定义的generic-host
check_period 24x7 ; 告诉nagios检查主机的时间段
check_interval 5 ; 检测主机时间间隔
retry_interval 1 ; 主机检查重试间隔1分钟
max_check_attempts 10 ; 主机异常到发送警报的时间,10个时间单位
check_command       check-host-alive ; 默认的检测linux主机命令
notification_period workhours ; 主机故障时,发送通知的时间范围,其中“workhours”在timeperiods.cfg中进行了定义
notification_interval 120 ; 在主机出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间。单位是分钟。如果你觉得,所有的事件只需要一次通知就够了,可以把这里的选项设为0
notification_options d,u,r ; 定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态,u即unreachable,表示不可到达状态,r即recovery,表示重新恢复状态。
contact_groups admins ; 指定联系人组,这个“admins”在contacts.cfg文件中定义
register 0 ; 不注册
}
define service{
        name                            generic-service ; 服务模板名称
        active_checks_enabled           1       ; 开启主动服务检查
        passive_checks_enabled          1       ; 被动服务检查
        parallelize_check               1       ; Active service checks should be parallelized (disabling this can lead to major performance problems)
        obsess_over_service             1       ; We should obsess over this service (if necessary)
        check_freshness                 0       ; 默认服务状态为未检查
        notifications_enabled           1
        event_handler_enabled           1
        flap_detection_enabled          1
        failure_prediction_enabled      1
        process_perf_data               1
        retain_status_information       1
        retain_nonstatus_information    1
        is_volatile                     0       ; The service is not volatile
        check_period                    24x7
        max_check_attempts              3
        normal_check_interval           10 ; 硬态重新检测的时间间隔,默认为3个时间单位
        retry_check_interval            2 ; 每隔两分钟重新检测服务直到可以确定为硬状态
        contact_groups                  admins
notification_options w,u,c,r
notification_interval 120 ; 在主机出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间
notification_period 24x7 ; 在主机出现异常后,Nagios通知联系人的时间段
        register                        0
        }
其他几个模板基本类似,在此不做过多解释。
2)创建host.cfg文件
#192.168.1.100 #注释
define host {
use             linux-server #use表示引用,也就是将主机linux-server的所有属性引用到本host定义中来,在nagios配置中,很多情况下会用到引用。
host_name       server_name #定义主机名称,可以根据被监控主机的情况进行命名
alias           server_alias #主机别名
address         192.168.1.100 #主机IP地址
}
 
define hostgroup {
hostgroup_name  MyServer #定义主机组名称
alias           My_Server #定义主机组别名
members         server_name #成员列表
}
3)修改contacts.cfg文件
define contact{
contact_name    nagiosadmin #Short name of user
use             generic-contact #引用templates.cfg文件中generic-contact对象定义
alias           Nagios Admin #Full name of user
email           ****@139.com #报警需要通知的邮件地址,本例为使用139邮箱转发邮件到手机的报警方式
        }
define contactgroup{
contactgroup_name admins #联系人组名称
alias                   Nagios Administrators #别名
members                 nagiosadmin #成员
        }
4)创建services.cfg文件
define service {
use                     generic-service #引用templates.cfg文件中generic-service服务对象定义
hostgroup_name          MyServer #指定对主机组MyServer进行该服务监控
service_description     Disk Partition #服务名称
check_command           check_nrpe!check_disk #监控命令,这里使用的是nrpe方式监控磁盘使用状况,稍后讨论nrpe的使用和配置
}
其他服务监控类似,不一一详解了。
5)检测配置并启动Nagios
Nagios可以检查配置文件的正确性,使用以下命令;
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
如果有错误,我们可以通过错误提示很快定位错误配置位置进行修改;
没有错误后,就可以启动nagios了!
#service nagios start
还有reload restart stop 操作。
6)Nagios发送邮件报警配置
Nagios发送报警有比较多的方式,如飞信、MSN、短信猫和139邮箱等。本文使用139邮箱方式,因为139邮箱的短信通知可以方便的实现手机通知。
配置主机hosts文件,在127.0.0.1后添加nagios-test.com;nagios-test.com可以自己定义
配置/etc/sysconfig/network文件,将hostname更改为nagios-test.com,可以自己定义,但是这两处必须保持一致,然后重启network服务使配置生效。
使用以下命令测试是否可以发送邮件;
#printf “This is a test mail” | mail -s “My test mail” 15800000000@139.com
在这个过程中,如果没有收到邮件,可以去查看/var/log/maillog,是否发送邮件,以及是否拒绝接收,决绝原因等。
如果以上方式可以发送邮件之后,Nagios默认配置及可以发送邮件报警。转发到手机的配置请在139邮箱里进行设置。
 
四、客户端安装及配置
1)下载并安装NRPE
NRPE是Nagios的客户端,NRPE的设计初衷是允许我们在远程Linux/Unix上执行Nagios-plugins。这样做的主要原因是为了让Nagios监控远程Linux/Unix主机就像监控“本地主机”资源。更详尽的情况可参考:http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf
在Nagios官网可以下载到最新稳定版NRPE,本文档使用的版本为nrpe-2.8.1.tar.gz。
添加nagios用户
#useradd nagios
安装nagios-plugins
#tar zxvf nagios-plugins-1.4.15.tar.gz
#cd nagios-pulgins-1.4.15
#./configure
#make && make install
安装NRPE
#tar zxvf nrpe-2.8.1.tar.gz
#cd nrpe-2.8.1
#./configure
#make all
#make install-plugin
#make install-daemon
#make install-daemon-config
以上没有错误的话,NRPE就安装完成了。
2)NRPE配置
NRPE只有一个配置文件
#/usr/local/nagios/etc/nrpe.cfg
一般配置文件只需要更改允许的IP就可以使用了。编辑nrpe.cfg;
修改allowed_hosts=127.0.0.1为我们的Nagios_Server_IP即可。
3)启动NRPE
#/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
将这条命令添加到/etc/rc.local文件,在系统启动时启动。
#echo ‘/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d’ >> /etc/rc.local
4)检测NRPE启动情况
#netstat -ap | grep nrpe
正常的话应该显示
tcp        0      0 *:5666                      *:*                         LISTEN      2561/nrpe
监听端口5666,nrpe启动正常。如果没有以上结果,请检查你的iptables配置。
5)检查NRPE是否允许服务端访问
在Nagios服务端执行
#/usr/local/nagios/libexec/check_nrpe -H nrpe_host_IP
如果返回NRPE的版本信息,证明nrpe客户端安装成功。
五、关于Nagios与NRPE的关系的一些经验
Nagios在使用NRPE进行监控时,是Nagios服务端主动去被监控端检测,服务端使用的是check_nrpe -H nrpe_host_ip -c command进行的请求,在被监控端,NRPE收到后会在nrpe配置文件nrpe.cfg中查找定义的command,如果找不到,会告诉服务端没有定义该命令。找到该命令后,会按照nrpe.cfg定义的命令所指向的本地命令去检测本机相关状态,检测完成后将检测结果返回给Nagios服务端。
参考资料:
http://nagios-cn.sourceforge.net/nagios-cn/index.html
http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf
http://www.nagios.org/documentation

Nagios部署文档 _Nagios