# useradd -m nagios [ Enter ]
# passwd nagios [ Enter ]
并将nagios以及apache用户加入到nagcmd组中
# groupadd nagcmd [ Enter ]
# usermod -G nagcmd nagios [ Enter ]
# usermod -G nagcmd apache [ Enter ]
完成之后将下载的nagios压缩包拷贝到/usr/local目录中,并且执行下面的步骤进行编译和安装:
# tar -zxf nagios-3.0.3.tar.gz [ Enter ]
# cd nagios-3.0.3 [ Enter ]
首先初始化和建立编译的环境
# ./configure --with-command-group=nagcmd [ Enter ]
如果能看到下面的基本配置信息则说明初始的环境已经成功配置完成:
*** Configuration summary for nagios 3.0.3 06-25-2008 ***:
General Options:
-------------------------
Nagios executable: nagios
Nagios user/group: nagios,nagios
Command user/group: nagios,nagcmd
Embedded Perl: no
Event Broker: yes
Install ${prefix}: /usr/local/nagios
Lock file: ${prefix}/var/nagios.lock
Check result directory: ${prefix}/var/spool/checkresults
Init directory: /etc/rc.d/init.d
Apache conf.d directory: /etc/httpd/conf.d
Mail program: /bin/mail
Host OS: linux-gnu
Web Interface Options:
------------------------
HTML URL: http://localhost/nagios/
CGI URL: http://localhost/nagios/cgi-bin/
Traceroute (used by WAP): /bin/traceroute
Review the options above for accuracy. If they look okay,
type 'make all' to compile the main program and CGIs.
之后按照提示执行命令来进行编译:
# make all [ Enter ]
如果编译过程顺利完成,则需要执行下面的命令:
# make install [ Enter ]
# make install-init [ Enter ]
# make install-config [ Enter ]
# make install-commandmode [ Enter ]
分别用于安装二进制文件、初始化脚本、示例配置文件和设置目录权限。
# ls /usr/local/nagios [ Enter ]
安装完成之后,在/usr/local/nagios目录下如果能够看到这些目录:bin etc sbin share var就表示Naigos安装成功了。
不过在完成之后还不能启动Nagios,因为还有一些操作需要执行。
Nagios的样例配置文件默认安装在/usr/local/nagios/etc目录下,这些样例文件可以配置Nagios使之正常运行,只需要做一个简单的修改。用你擅长的编辑器软件来编辑这个/usr/local/nagios/etc/objects/contacts.cfg配置文件,更改email部分,在nagiosadmin的联系人定义信息中的EMail信息为你的EMail信息以接收报警内容。
# vi /usr/local/nagios/etc/objects/contacts.cfg [ Enter ]
之后执行下面的命令来安装Nagios的WEB配置文件到Apache的conf.d目录下:
# make install-webconf [ Enter ]
在Apache中使用基本认证的方式创建一个nagiosadmin的用户用于Nagios的WEB界面登录。记下你所设置的登录口令。该用户登录口令和账号信息会存储到/usr/local/nagios/etc/passwd.users文件中:
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin [ Enter ]
在Nagios主程序安装之后会自动将相关apache配置文件放到/etc/http/conf.d目录下,文件名是nagios.conf。文件内容如下:
# cat /etc/httpd/conf.d/nagios.conf [ Enter ]
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
这就意味着只有通过认证用户才可以通过http访问/usr/loca/nagios/share以及/usr/local/nagios/sbin目录下内容。而这个能够通过认证的用户也就是nagiosadmin,之后可以重启apache来应用配置:
# service httpd restart [ Enter ]
# chkconfig --level 345 httpd on [ Enter ]
刚才已经提到Nagios主程序只是一个控制中心,而能够起到服务监测和系统监测等功能的是众多Nagios的插件,没有插件的Nagios系统其实只是一个空壳。因此在安装了Nagios平台之后我们还需要安装插件。
Nagios插件同样是在其官方网站下载,目前版本是1.4.12。我将下载的源码包放到/usr/local目录下,按照下面的步骤进行解压,编译和安装:
# tar -zxf nagios-plugins-1.4.12.tar.gz [ Enter ]
# cd nagios-plugins-1.4.12 [ Enter ]
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios [ Enter ]
# make [ Enter ]
# make install [ Enter ]
然后把Nagios加入到服务列表中以使之在系统启动时自动启动:
# chkconfig --add nagios [ Enter ]
# chkconfig nagios on [ Enter ]
执行下面的命令来验证Nagios的样例配置文件:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg [ Enter ]
如果最后的结果类似下面而没有报错,可以启动Nagios服务:
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
# service nagios start
之后可以在浏览器上访问链接http://192.168.1.10/nagios,如果能够正常看到页面,证明主程序和插件都安装和配置成功(如图pic32.png所示)!点击“Service Detail”的链接来查看你本机的监视详情。此时可能需要给点时间让Nagios来检测你机器上所依赖的服务(如图pic33.png-pic34.png所示)。
实际上在装完Nagios之后此时网络监测工作只是刚刚开始而已,毫无疑问用户的需求不是只监测本地系统,而是大量的远程服务器上的系统状况以及服务运行状况。
有几种不同方式来监测远程Linux/UNIX服务器的服务与属性。
其中之一是应用共享式SSH密钥,即运行check_by_ssh插件来执行对远程主机的检测。这种方法会导致安装有Nagios的监测服务器产生很高的系统负荷,尤其是要同时监测成百个主机中的上千个服务时,这是因为要建立大量的SSH连接的总开销会很高。
另一种方法是使用NRPE外部构件监测远程主机。NRPE外部构件可以在远程的Linux/Unix主机上执行插件程序。如果是要象监测本地主机一样对远程主机的磁盘利用率、CPU负荷和内存占用率等情况下,NRPE外部构件将非常有用。
提到“外部构件”这个概念的时候需要说明一下,Nagios有许多"外部构件"软件包可供使用。外部构件可以扩展Nagios的应用并使之与其他软件集成,而且能够通过WEB接口来实现管理配置文件,监测远程主机(*NIX,Windows等),对远程主机的强制监测,减化并扩展告警逻辑等功能。
NRPE是一个可在远程Linux/Unix主机上执行的插件的外部构件包。如果你需要监测远程的主机上的本地资源或属性,如磁盘利用率、CPU负荷、内存利用率等时是很有用的。最终效果和用check_by_ssh插件来实现的功能一样,但是他不需要占用更多的监测主机的CPU负荷,所以当你需要监测大量的主机时这个构件将起到很重要的作用(如图pic35.png所示)。
通过该图可以看出,我们需要在被监测主机上部署NRPE,他相当于一个守护进程负责监听。而监测主机使用check_nrpe并通过SSL连接访问这个daemon,然后调用被监测方的check_disk,check_load等脚本获取信息并将结果传递到监测主机。同时这些脚本也有能力监测到其他主机的相关信息。
NRPE的使用环境有direct check和indirect check两种,direct check指的是NRPE运行在被监测主机的本地,而indirect check意味着运行NRPE的服务器只是一个中间人,他会继续通过刚才所提及的脚本来监测其他更多远程主机上的服务和系统信息。层次化的监测就是通过这种方式来实现。
为了简单说明问题,我们将部署的是基于direct check的环境部署NRPE。所以下面的操作将会在被监测主机192.168.1.220上进行。
首先要建立Nagios账号,这里我使用同样的密码:
# useradd nagios [ Enter ]
# passwd nagios [ Enter ]
之后按照和上面相同的步骤来编译和安装nagios-plugin软件:
# tar -zxf nagios-plugins-1.4.12.tar.gz [ Enter ]
# cd nagios-plugins-1.4.12 [ Enter ]
# ./configure [ Enter ]
# make [ Enter ]
# make install [ Enter ]
然后对相关的目录设置权限和所属用户组:
# chown nagios.nagios /usr/local/nagios [ Enter ]
# chown –R nagios.nagios /usr/local/nagios/libexec [ Enter ]
接着NRPE包放到/usr/local目录下,按照下面的步骤解压缩,并且编译和安装:
# tar -zxf nrpe-2.12.tar.gz [ Enter ]
# cd nrpe-2.12 [ Enter ]
# ./configure [ Enter ]
# make all [ Enter ]
# make install-plugin [ Enter ]
# make install-daemon [ Enter ]
# make install-daemon-config [ Enter ]
同时安装NRPE的插件、进程以及进程范例配置文件。
接着执行命令将nrpe安装为依赖xinetd超级进程的非独立服务,那么前提是必须安装xinetd。不过一般系统都会自动安装该服务。 最后执行下面的命令将NRPE安装为xinetd超级进程所管理的进程之一。
# make install-xinetd [ Enter ]
完成之后需要编辑/etc/xinetd.d目录下的nrpe文件,并且在最后添加允许实施监测的主机IP地址,这里是192.168.1.10,那么整个配置文件全文如下:
# cat /etc/xinetd.d/nrpe [ Enter ]
service nrpe
{
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 = 192.168.1.10
}
然后修改/etc/services档,并添加下面的内容:
nrpe 5666/tcp # nrpe
重启服务:
# /etc/init.d/xinetd restart [ Enter ]
此时检查nrpe服务启动状况如下:
# netstat -nl | grep 5666 [ Enter ]
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN
# lsof -i:5666
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
xinetd 9949 root 5u IPv4 28764 TCP *:nrpe (LISTEN)
现在最关键的一步是确保安装的NRPE进程能够正常工作,所以要使用check_nrpe插件进行测试。在监测主机192.168.1.10上执行命令:
# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.220 [ Enter ]
如果能够出现如下的版本号显示,则证明在被监测主机上配置的NRPE已经正常工作,并且监测主机能够通过SSL与被监测主机上的NRPE正常通信。NRPE v2.12
但是如果出现一些error信息,则需要检查配置,检查的内容包括主要有下面几项:
define host{
use linux-box ; Inherit default values from a template
host_name localhost ; The name we're giving to this server
alias RHEL5u2 ; A longer name for the server
address 192.168.1.220 ; IP address of the server
}
同时在“HOST GROUP DEFINITION”部分,将192.168.1.220这台主机加入到linux-servers这个hostgroup中。如果有多台主机都属于这个hostgroup,可以用逗号将其隔开。以下是我添加的内容:
define hostgroup{
hostgroup_name linux-servers ; The name of the hostgroup
alias Linux Servers ; Long name of the group
members 192.168.1.220 ; Comma separated list of hosts that belong to this group
}
而在最后的“SERVICE DEFINITION”部分,所有未注释的部分实际上是关于对localhost也就是本机所要监测的内容。其格式和语法就是我在提到Nagios监测原理方面举例说明的内容。对于localhost来说不需要修改了,但是可以把他的内容复制到自定义的cfg档中并照葫芦画瓢修改成对192.168.1.220这台 主机的命令定义。我们下面就来做这样的操作:
在/usr/local/nagios/etc/objects目录下针对监测的服务建立服务定义,建立一个新的文件remotehosts.cfg,加入下面内容:
下面是自定义的:
define service{
use generic-service
host_name localhost
service_description CPU Load
check_command check_nrpe!check_load
}
表示监测远程主机的CPU负载。
如果要监测当前在远程主机的磁盘空间,则加入:
define service{
use generic-service
host_name localhost
service_description /dev/sda3 Free Space
check_command check_nrpe!check_disk /dev/sda3
}
如果要监测当前远程主机的僵死进程数,则加入:
define service{
use generic-service
host_name localhost
service_description Zombie Processes
check_command check_nrpe!check_zombie_procs
}
同时使用vi编辑器末行模式的r功能读取当前目录下的localhost.cfg档,删除“HOST DEFINITION”和“HOST GROUP DEFINITION”部分。只保留“SERVICE DEFINITION”部分并修改为下面的内容: 第一个命令定义:
通过check_ping脚本确保监测主机和被监测主机的连通性,如果网络丢包率到达20%则产生warning警告,到达60%则产生critical警告:
define service{
use local-service ; Name of service template to use
host_name 192.168.1.220
service_description PING REMOTE HOST
check_command check_ping!100.0,20%!500.0,60%
} 第二个命令定义:
监测远程主机根分区磁盘状况,如果根分区可用空间低于20%会产生Warning警告,如果可用空间低于10%则产生Critical警告:
define service{
use local-service ; Name of service template to use
host_name 192.168.1.220
service_description Root Partition of Remote Server
check_command check_local_disk!20%!10%!/
} 第三个命令定义:
监测远程主机当前的登录用户数量,如果登录数量大于20用户则产生warning警告,如果大于50则产生critical警告:
define service{
use local-service ; Name of service template to use
host_name 192.168.1.220
service_description Current Users of Remote Server
check_command check_local_users!20!50
} 第四个命令定义:
监测远程主机当前的进程总数,如果大于250进程则产生warning警告,如果大于400进程则产生critical警告:
define service{
use local-service ; Name of service template to use
host_name 192.168.1.220
service_description Total Processes of Remote Machine
check_command check_local_procs!250!400!RSZDT
} 第五个命令定义:
监测远程主机当前的本地负载量:
define service{
use local-service ; Name of service template to use
host_name 192.168.1.220
service_description Current Load of Remote Machine
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
} 第六个命令定义:
监测远程主机swap文件系统使用量,如果swap可用空间低于20%则产生warning警告,低于10%则产生critical警告:
define service{
use local-service ; Name of service template to use
host_name 192.168.1.220
service_description Swap Usage of Remote Server
check_command check_local_swap!20!10
} 第七个命令定义:
监测SSH连接可用性,但消息通知功能默认被关闭,因为并不是所有用户都有权限SSH。
define service{
use local-service ; Name of service template to use
host_name 192.168.1.220
service_description SSH of Remote Machine
check_command check_ssh
notifications_enabled 0
}
# Define a service to check HTTP on the remote machine.
# Disable notifications for this service by default, as not all users may have HTTP enabled. 第八个命令定义:
监测远程主机上的HTTP服务,但类似于SSH,该服务的消息通知功能默认关闭。
define service{
use local-service ; Name of service template to use
host_name 192.168.1.220
service_description HTTP of Remote Machine
check_command check_http
notifications_enabled 0
}
保存该档后,按照其他cfg文件的权限和属性为该文件指定所属用户和组:
# chown nagios.nagios /usr/local/nagios/etc/objects/remotehosts.cfg [ Enter ]
至于想定义的其他内容,我就不再向该文件中添加了,我想大家应该已经掌握了这种命令定义的方法了。
最后不要忘了一步关键的操作——在主配置文件中定义Nagios启动之后读取刚才修改的这些配置,也就是确保刚才修改的配置文件在nagios主配置文件/usr/local/nagios/etc/nagios.cfg中都有正确指定,信息如下:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg [ Enter ]
如果校验完全通过,则重启Nagios服务:
# chkconfig --level 345 nagios on [ Enter ]
# service nagios restart [ Enter ]
此时如果再通过浏览器访问http://192.168.1.10/nagios,我们就可以看到被监测主机192.168.1.220上所反应出来的内容信息。下面是几个效果图:(如图pic37.png-pic39.png所示)
到此为止,Nagios的基本原理和强大的功能就基本介绍完了。而事实上Nagios不但能在现有的功能基础上实现功能扩展,而且还能够实现和第三方软件的结合,例如和前面所介绍的MRTG和Cacti联用来构建动态显示图标;同时按照前面所说明的内容可以配置各种事件级别的邮件通知功能。但因为篇幅的限制我们会在下次有机会的时候向大家介绍。尽管在配置的难度上显得比较高,但是其强大的功能和灵活性却给我们留下了极深的印象。因此这也是在一些中型甚至是大型企业中所推崇并逐步采用的一种监测方案。