一、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服务使配置生效。
使用以下命令测试是否可以发送邮件;
在这个过程中,如果没有收到邮件,可以去查看/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