1 Nagios简介
Nagios 全名为(Nagios Ain’t Goona Insist on Saintood),最初项目名字是 NetSaint。它是一款免费的开源 IT 基础设施监控系统,其功能强大,灵活性强,能有效监控 Windows 、Linux、VMware 和 Unix 主机状态,交换机、路由器等网络设置等。一旦主机或服务状态出现异常时,会发出邮件或短信报警第一时间通知 IT 运营人员,在状态恢复后发出正常的邮件或短信通知。Nagios 结构简单,可维护性强,越来越受中小企业青睐,以及运维和管理人员的使用。同时提供一个可选的基于浏览器的 Web 界面,方便管理人员查看系统的运行状态,网络状态、服务状态、日志信息,以及其他异常现象。
Nagios利用其众多的插件实现对本机和远端服务的监控,当被监控对象出现异常,Nagios就会及时给管理人员告警。它是一个基于TCP/IP协议的软件包,包含有nagios主程序和它的各个插件。
Nagios的主要功能特点简介:
- 监视网络服务(SMTP, POP3, HTTP, NNTP, PING等)
- 监视主机资源(进程,磁盘等)
- 简单的插件设计可以轻松扩展Nagios的监视功能
- 服务等监视的并发处理
- 错误通知功能(通过email,pager, 或其他用户自定义方法)
- 可指定自定义的事件处理控制器
-可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等
- 可以通过手机查看系统监控信息
2 Nagios工作原理
Nagios 软件需安装在一台独立的服务器上运行,这台服务器称为监控中心,监控中心服务器可以采用 Linux 或 Unix 操作系统;每一台被监视的硬件主机或服务都运行一个与监控中心服务器进行通信的 Nagios 软件后台程序,也可以理解为 Agent 或插件均可。监控中心服务器读取配置文件中的指令与远程的守护程序进行通信,并且指示远程的守护程序进行必要的检查。虽然 Nagios 软件必须在 Linux 或 Unix 操作系统上运行,但是远程被监控的机器可以是任何能够与其进行通信的主机,根据远程主机返回的应答,Naigos 将依据配置进行回应;接着 Nagios 将通过本地的机器进行测试,如果检测返回值不正确,Nagios 将通过一种或多种方式报警;具体原理如下图所示:
3 Nagios监控系统搭建
3.1 部署规划
监控主机 rango 192.168.56.1
被监控机1 vm1 192.168.56.101
被监控机2 vm2 192.168.56.102
3.2 Nagios安装
1. 安装前准备:
在编译安装前需确保安装以下包:gdgd-devel png png-devel jpeg
jpeg-devel zlib zlib-devel,使nagiosweb界面的Maps、Trends等功能有效:
yum install gd fontconfig-devel libjpeg-devel libpng-devel gd-devel perl-GD openssl-devel php mailx postfix cpp gcc gcc-c++ libstdc++ glib2-devel
2. 创建用户和组:
groupadd nagios
groupadd nagcmd
useradd -g nagios -G nagcmd -d /home/nagios -c "Nagios Admin" nagios
3. 在监控主机上编译安装Nagios主程序Nagios-4.0.1.tar.gz:
[root@rango ~]# tar zxvf Nagios-4.0.1.tar.gz ; cd nagios-4.0.1
[root@rango nagios-4.0.1]#./configure --prefix=/usr/local/nagios --with-nagios-user=nagios \ --with-nagios-group=nagios --with-command-user=nagios --with-command-group=nagcmd --enable-event-broker --enable-nanosleep --enable-embedded-perl --with-perlcache --with-gd-lib=/usr/lib --with-gd-inc=/usr/include
[root@rango nagios-4.0.1]#make all
[root@rango nagios-4.0.1]#make install
[root@rango nagios-4.0.1]#make install-init
[root@rango nagios-4.0.1]#make install-commandmode
[root@rango nagios-4.0.1]#make install-webconf
[root@rango nagios-4.0.1]#make install-config
4. 安装与配置apache:
编辑apache 的httpd.conf
最后面添加:
ScriptAlias /nagios/cgi-bin"/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
# SSLRequireSSL
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">
# SSLRequireSSL
Options None
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile/usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>
再次验证配置文件:/usr/local/nagios/bin/nagios -v/usr/local/nagios/etc/nagios.cfg
设置用户访问权限:
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
重新启动nagios 和apache:
service httpd restart
service nagios restart
5. 安装Postfix邮件服务:
Nagios 监控平台支持邮件报警功能,所以需要安装邮件服务。这里采用互联网比较主流的 MTA ―Postfix. 也可根据自己的生产环境去定义, 如: Sendmail、Qmail 等。由于 Nagios 只用到了 Postfix 的邮件发送功能,所以这里不需要对 Postfix 邮件服务作过多配置,安装 Postfix 套件,启动服务并在下次服务器重启自动加载即可。具体如下命令:
#yum install postifx#chkconfig postfix on; /etc/init.d/postfix restart
3.3 安装Nagios插件
Naigos 提供的各种监控功能基本上是通过插件来完成的,而 Nagios 的核心指提供了很少的功能,因此安装插件是非常有必要的。Nagios 官网提供了很多不同版块的插件应用,同时插件版本与 Nagios 版本也没有什么关联。
在监控系统的所有节点上安装Nagios插件:nagios-plugins-1.5.tar.gz
tar zxvf nagios-plugins-1.5.tar.gz && cd nagios-plugins-1.5
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-command-user=nagios --with-command-group=nagcmd --prefix=/usr/local/nagios
make all
make install
chmod 755 /usr/local/nagios
ll /usr/local/nagios/libexec/
total 5428
-rwxr-xr-x 1 nagios nagios 318368 Nov 8 21:19 check_apt
-rwxr-xr-x 1 nagios nagios 2248 Nov 8 21:19 check_breeze
-rwxr-xr-x 1 nagios nagios 121055 Nov 8 21:19 check_by_ssh
lrwxrwxrwx 1 nagios nagios 9 Nov 8 21:19 check_clamd -> check_tcp
-rwxr-xr-x 1 nagios nagios 84743 Nov 8 21:19 check_cluster
-r-xr-xr-x 1 nagios nagios 116277 Nov 8 21:19 check_dhcp
-rwxr-xr-x 1 nagios nagios 115838 Nov 8 21:19 check_dig
-rwxr-xr-x 1 nagios nagios 330608 Nov 8 21:19 check_disk
-rwxr-xr-x 1 nagios nagios 9286 Nov 8 21:19 check_disk_smb
-rwxr-xr-x 1 nagios nagios 122763 Nov 8 21:19 check_dns
-rwxr-xr-x 1 nagios nagios 64375 Nov 8 21:19 check_dummy
-rwxr-xr-x 1 nagios nagios 3050 Nov 8 21:19 check_file_age
-rwxr-xr-x 1 nagios nagios 6312 Nov 8 21:19 check_flexlm
lrwxrwxrwx 1 nagios nagios 9 Nov 8 21:19 check_ftp -> check_tcp
-rwxr-xr-x 1 nagios nagios 116722 Nov 8 21:19 check_hpjd
-rwxr-xr-x 1 nagios nagios 406658 Nov 8 21:19 check_http
-r-xr-xr-x 1 nagios nagios 122480 Nov 8 21:19 check_icmp
-rwxr-xr-x 1 nagios nagios 90529 Nov 8 21:19 check_ide_smart
-rwxr-xr-x 1 nagios nagios 15131 Nov 8 21:19 check_ifoperstatus
-rwxr-xr-x 1 nagios nagios 12592 Nov 8 21:19 check_ifstatus
lrwxrwxrwx 1 nagios nagios 9 Nov 8 21:19 check_imap -> check_tcp
-rwxr-xr-x 1 nagios nagios 6884 Nov 8 21:19 check_ircd
-rwxr-xr-x 1 nagios nagios 102018 Nov 8 21:19 check_ldap
lrwxrwxrwx 1 nagios nagios 10 Nov 8 21:19 check_ldaps -> check_ldap
-rwxr-xr-x 1 nagios nagios 103094 Nov 8 21:19 check_load
-rwxr-xr-x 1 nagios nagios 6017 Nov 8 21:19 check_log
-rwxr-xr-x 1 nagios nagios 20281 Nov 8 21:19 check_mailq
-rwxr-xr-x 1 nagios nagios 90563 Nov 8 21:19 check_mrtg
-rwxr-xr-x 1 nagios nagios 90820 Nov 8 21:19 check_mrtgtraf
-rwxr-xr-x 1 nagios nagios 102902 Nov 8 21:19 check_nagios
lrwxrwxrwx 1 nagios nagios 9 Nov 8 21:19 check_nntp -> check_tcp
-rwxrwxr-x 1 nagios nagios 65913 Nov 17 15:19 check_nrpe
-rwxr-xr-x 1 nagios nagios 119556 Nov 8 21:19 check_nt
-rwxr-xr-x 1 nagios nagios 119658 Nov 8 21:19 check_ntp
-rwxr-xr-x 1 nagios nagios 112690 Nov 8 21:19 check_ntp_peer
-rwxr-xr-x 1 nagios nagios 109906 Nov 8 21:19 check_ntp_time
-rwxr-xr-x 1 nagios nagios 145777 Nov 8 21:19 check_nwstat
-rwxr-xr-x 1 nagios nagios 8779 Nov 8 21:19 check_oracle
-rwxr-xr-x 1 nagios nagios 103337 Nov 8 21:19 check_overcr
-rwxr-xr-x 1 nagios nagios 124240 Nov 8 21:19 check_ping
lrwxrwxrwx 1 nagios nagios 9 Nov 8 21:19 check_pop -> check_tcp
-rwxr-xr-x 1 nagios nagios 325061 Nov 8 21:19 check_procs
-rwxr-xr-x 1 nagios nagios 100621 Nov 8 21:19 check_real
-rwxr-xr-x 1 nagios nagios 9578 Nov 8 21:19 check_rpc
-rwxr-xr-x 1 nagios nagios 1451 Nov 8 21:19 check_sensors
-rwxr-xr-x 1 nagios nagios 328529 Nov 8 21:19 check_smtp
-rwxr-xr-x 1 nagios nagios 381507 Nov 8 21:19 check_snmp
-rwxr-xr-x 1 nagios nagios 98154 Nov 8 21:19 check_ssh
-rwxr-xr-x 1 nagios nagios 88321 Nov 8 21:19 check_swap
-rwxr-xr-x 1 nagios nagios 112126 Nov 8 21:19 check_tcp
-rwxr-xr-x 1 nagios nagios 100527 Nov 8 21:19 check_time
lrwxrwxrwx 1 nagios nagios 9 Nov 8 21:19 check_udp -> check_tcp
-rwxr-xr-x 1 nagios nagios 110765 Nov 8 21:19 check_ups
-rwxr-xr-x 1 nagios nagios 83131 Nov 8 21:19 check_users
-rwxr-xr-x 1 nagios nagios 2933 Nov 8 21:19 check_wave
-rwxr-xr-x 1 nagios nagios 104604 Nov 8 21:19 negate
-rwxr-xr-x 1 nagios nagios 98773 Nov 8 21:19 urlize
-rwxr-xr-x 1 nagios nagios 1936 Nov 8 21:19 utils.pm
-rwxr-xr-x 1 nagios nagios 2917 Nov 8 21:19 utils.sh
重启Nagios服务:
/etc/init.d/nagios restart
/etc/init.d/httpd restart
chkconfig httpd on
chkconfig naigos on
3.4 防火墙和SELinux设置
Selinux 和 Iptables 是 Linux 系统提供的安全防护机制,主要用来防护 Linux 系统下的服务或应用程序不受外界安全攻击等。一般企业考虑到 Nagios 监控平台的安全可靠性,都会采用硬件的防火墙或其他安全设备来对服务器进行防护,故此处禁用SELinux和iptables
3.5 其他插件的安装和说明
nrpe_2.12.tar.gz ――监控Linux 需要(被监控的Linux服务器安装)
nsclient++0.3.5――监控windows 需要(被监控的Windows服务器安装)
ndoutils:ndoutils是将Nagios的配置及监控信息存储到数据库里,NPC通过调用ndo所存储的数据来展现Nagios的信息。启动:/usr/local/nagios/bin/ndo2db-c /usr/local/nagios/etc/ndo2db.cfg。
ps:ndoutils最新版本为1.5.2,只兼容Nagios3.x和NagiosXI,4.x版本不兼容,会报Error:Could not load module '/usr/local/nagios/bin/ndomod-3x.o' ->/usr/local/nagios/bin/ndomod-3x.o: undefined symbol:servicedependency_list的错误。
NPC:(NagiosPlugin for Cacti)是一个Cacti插件,安装后可以在Cacti界面里使用Nagios的功能。
3.6 Nagios Web访问
通过浏览器,在地址栏输入: http://192.168.56.1/nagios, 输入用户名及密码即可访问 Naigos 登录界面。
3.7 Nagios配置
1. Nagios目录与相关配置文件
Nagios 安装完成后,/usr/local/nagios/目录下会生成 nagios 相关目录及配置文件,默认的的配置文件在/usr/local/nagios/etc 目录下,如下表为Nagios 相关目录的名称及用途
目录名称 | 作用 |
---|---|
bin | Nagios 可执行程序所在目录 |
etc | Nagios 配置文件目录 |
sbin | Nagios cgi 文件所在目录, 也就是执行外部 命令所需要文件所在的目录 |
share | Nagios 网页存放路径 |
libexec | Nagios 外部插件存放目录 |
var | Nagios 日志文件、Lock 等文件所在的目录 |
var/archives | Nagios 日志自动归档目录 |
var/rw | 用来存放外部命令文件的目录 |
下表为配置文件作用
配置文件 | 说明 |
---|---|
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 主机的一个配置文件模板,默认没有启用此文件 |
备注: | Nagios 在配置方面非常灵活,默认的配置文件并不是必需的。可以使用这些默认的配置文件,也可以创建自己的配置文件,然后在主配置文件 nagios.cfg 中引用即可。 |
2. Nagios配置文件之间的关联
Nagios 的配置过程涉及几个定义有:主机、主机组、服务、服务组、联系人、联系人组、监控时间和监控命令等,从这些定义可以看出,Nagios 的各个配置文件之间是互为关联、彼此引用的。成功配置一台 Nagios 监控系统,需要掌握每个配置文件之间依赖与被依赖的关系,可从下面四个步骤来入手,第一步:定义哪些主机、主机组、服务和服务组,第二步:要定义这个监控要通过什么命令实现,第三步:要定义监控的时间段,第四步:要定义主机或服务出现问题时要通知的联系人和 联系人组;强烈建议依据以上顺序对 Nagios 系统进行相关配置。
3. 主要配置文件详解
templates.cfg文件
define contact{
name generic-contact #联系人名称
service_notification_period 24x7 #当服务出现异常时,发送通知的时间段,时间段是 7x24 小时
host_notification_period 24x7 #当主机出现异常时,发送通知的时间段,时间段是 7x24 小时
service_notification_options w,u,c,r #这个定义的是“通知可以被发出的情况”。w 即 warning,表示警告状态,u 即 unknown,表示不明状态,c 即 criticle,表示紧急状态,r 即 recover,表示恢复状态
host_notification_options d,u,r #定义主机在什么状态下需要发送通知给使用者,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 文件中定义。
}
define host{
name linux-server #主机名称
use generic-host #use 表示引用,也就是将主机 generic-host 的所有属性引用到 linux-server 中来,在 nagios 配置中,很多情况下会用到引用。
check_period 24x7 #这里的 check_period 告诉 nagios 检查主机的时间段
check_interval 5 #nagios 对主机的检查时间间隔,这里是 5 分钟。
retry_interval 1 #重试检查时间间隔,单位是分钟。
max_check_attempts 10 #nagios 对主机的最大检查次数, check_command check-host-alive #指定检查主机状态的命令,其中“check-host-alive”在 commands.cfg 文件中定义。
notification_period workhours #主机故障时,发送通知的时间范围,其中“workhours”在 timeperiods.cfg 中进行了定义,下面会陆续讲到。
notification_interval 30 #在主机出现异常后,故障一直没有解决,nagios 再次对使用者发出通知的时间。单位是分钟
notification_options d,u,r #定义主机在什么状态下可以发送通知给使用者,d 即 down,表示宕机状态,u 即 unreachable,表示不可到达状态,r 即 recovery,表示重新恢复状态。
contact_groups admins #指定联系人组,这个“admins”在 contacts.cfg 文件中定义。
define service{
name local-service #定义一个服务名称
use generic-service #引用服务 local-service 的属性信息,local-service 主机在 templates.cfg 文件中进行了定义
max_check_attempts 4 #最大检测 4 次,为了确定服务最终状态
normal_check_interval 5 #每 5 分钟检测一次
retry_check_interval 1 #每 1 分钟重新检测服务,最终的状态能被确定
}
hosts.cfg文件
此文件默认不存在,需要手动创建,主要用来指定被监控的主机地址及相关属性信息,比如以下定义的vm1的主机信息:
define host{
use linux-server
host_name vm1
alias vm1
address 192.168.56.101
}
......
services.cfg文件
此文件默认不存在,需要手动创建。主要用于定义监控的服务和主机资源,例如监控 HTTP 服务、FTP 服务、主机磁盘空间、主机系统负载等。比如定义监控vm1的http和ftp等服务的配置如下:
define service{
use generic-service
host_name vm1
service_description HTTP
check_command check_http
}
define service{
use generic-service
host_name vm1
service_description FTP
check_command check_ftp
}
......
nagios.cfg文件
Nagios的主配置文件,包括Nagios日志文件、cfg文件、Nagios用户,组、lock文件等等Nagios的所有全局设置均在此设置,其中本例需要添加以下设置来指定三个被监控的主机的配置文件的位置:
# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
cfg_file=/usr/local/nagios/etc/objects/vm1.cfg
cfg_file=/usr/local/nagios/etc/objects/vm2.cfg
4. 实例配置
Nagios允许单独定义某个主机的主机信息和服务配置信息到一个cfg文件中,比如vm1的配置文件如下:vm1.cfg
define host{
use linux-server
host_name vm1
alias vm1
address 192.168.56.101
}
define service{
use generic-service
host_name vm1
service_description HTTP
check_command check_http
}
define service{
use generic-service
host_name vm1
service_description FTP
check_command check_ftp
}
define service{
use generic-service
host_name vm1
service_description SSH
check_command check_ssh
}
define service{
use generic-service
host_name vm1
service_description check-load
check_command check_nrpe!check_load
}
define service{
use generic-service
host_name vm1
service_description zombie_procs
check_command check_nrpe!check_zombie_procs
}
define service{
use generic-service
host_name vm1
service_description check-users
check_command check_nrpe!check_users
}
define service{
use generic-service
host_name vm1
service_description total_procs
check_command check_nrpe!check_total_procs
}
此处定义监控ip地址为192.168.56.101的主机vm1的SSH、FTP等服务信息。
3.8 Nagios启动运行
1. 验证配置文件的正确性
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Nagios 提供的这个验证功能非常有用,如果你的配置文件有语法或配置错误,它会显示出错的配置文件及在文件中哪一行。检测结果中的报警信息通常是可以忽略的,因为一般只是建议性的提示。
此处可以利用别名机制来简化Nagios配置检测机制:在当前用户的.bashrc文件下增加别名设置:
alias nagioscheck='/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg'
使生效:source ./.bashrc
2. 启动Nagios服务
通过初始化脚本启动Nagios:
/etc/init.d/nagios start|restart|stop 或者 service nagios start
手动方式启动Nagios:
通过 Nagios 命令的-d 参数来启动 nagios 过护进程。
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cf
4 Nagios性能分析图标
Nagios 对服务或主机监控的是一个瞬时状态,有时候系统管理员需要了解主机在一段时间内的性能及服务的响应状态,并且形成图表,这就需要通过查看日志数据来分析。但是这种方式不仅烦琐,而且抽象。为了能更直观的查看主机运行状态,这里采用 PNP 来实现此功能。PNP 是一个小巧的开源软件包,它是基于 PHP 和 Perl 脚本编写,PNP 可以利用 rrdtool 工具将 Nagios 采集的数据绘制成图表,然后显示主机或者服务在一段时间内运行的状况。以下详细介绍 PNP 安装配置流程:
1. 安装RDDtool:yum install rrdtool
2. 编译安装PNP:
下载PNP http://pkgs.fedoraproject.org/repo/pkgs/pnp4nagios/pnp-0.4.14.tar.gz/9dbbf08191a258f6798c9516b3821ff0/
tar zxvf pnp-0.4.14.tar.gz
cd pnp-0.4.14
#通过./configure --help查看configure的选项设置
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata
#最后一项指明存储rrd数据文件的目录
make all
make install
make install-config
make install-init
注解:configure可能出现以下错误:
checking for Perl Module Time::HiRes… no
configure: error: Perl Module Time::HiRes not available
解决办法:安装相应的模块:yum install perl-Time-HiRes
3. 配置PNP:
3.1 PNP 配置文件定义
在 PNP 安装完成后, 默认安装目录下回自带相应的模板配置文件, 因此只需要参考相应的模板文件进行修改即可:
cd /usr/local/nagios/etc/pnp/
cp process_perfdata.cfg-sample process_perfdata.cfg
cp npcd.cfg-sample npcd.cfg
cp rra.cfg-sample rra.cfg
chown -R nagios:nagios /usr/local/nagios/etc/pn
3.2 修改 process_perfdata.cfg 文件
打开 Nagios 下的 process_perfdata.cfg 文件,修改相关内容。将数字 0 变更为 2 是开启了日志的调试功能,操作如下:
LOG_FILE = /usr/local/nagios/var/perfdata.log
#
# Loglevel 0=silent 1=normal 2=debug
#
LOG_LEVEL = 2
3.3 修改 Nagios 相关配置文件
增加数据图标识:修改 templates.cfg,增加一个定义 PNP 的 host 和 service:
#pnp host set
define host{
name hosts-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=_HOST_
process_perf_data 1
}
# pnp service set
define service{
name services-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
process_perf_data 1
}
修改 nagios.cfg
如果想让 nagios 将数据输出,首先要修改 nagios 的主配置文件 nagios.cfg,找到如下几项,如有注释的将其去掉。修改后的信息如下:#vim /usr/local/nagios/etc/nagios.cfgprocess_performance_data=1
host_perfdata_command=process-host-perfdataservice_perfdata_command=process-service-perfdata
修改 commands.cfg
process-host-perfdata 和 process-service-perfdata 指令声明了 nagios 输出哪些值到输出文件中。 不过这些定义相对简单,而 PNP 提供了一个 Perl 脚本,非常详细地定义了一个输出数据的方法,process_perfdata.pl 其实是 PNP 自带的一个脚本,这个脚本在 PNP 安装完成后会自动生成。因此,可以将 process-host-perfdata 和 process-service-perfdata 指令中对应的执行命令的内容替换成此脚本。增加下图的内容:
define command{
command_name process-host-perfdata
command_line /usr/bin/perl /usr/local/nagios/libexec/process_perfdata.pl -d HOSTPERFDATA
}
define command{
command_name process-service-perfdata
command_line /usr/bin/perl /usr/local/nagios/libexec/process_perfdata.pl
}
修改 hosts.cfg 与 services.cfg(此处为vm1.cfg、vm2.cfg)
将 hosts-pnp 和 services-pnp 引用到 vm1.cfg 和 vm2.cfg 中,修改后的 vm1.cfg 内容为
define host{
use linux-server,hosts-pnp
host_name vm1
alias vm1
address 192.168.56.101
}
define service{
use generic-service,services-pnp
host_name vm1
service_description HTTP
check_command check_http
}
.......
3.4 查看性能图标功能
访问Nagios的Web界面,点击数据图标查看相应的性能图示。
5 利用NRPE扩展Nagios功能
监控linux本地主机时,我们可以直接更改配置文件进行监控,如果需要监控的主机与nagios不在同一机器上,即监控远程linux主机时,我们需要借助NRPE插件实现。通过在远程服务器上安装 NRPE 构件及 Nagios 插件程序来向 Nagios 监控平台提供该服务器的一些本地情况,如 CPU 负载、内存使用、硬盘使用,服务等。这里将 Nagios 监控平台称为 Nagios 服务器 端,而将远程被监控的服务器称为 Nagios 客户端。如下为NRPE原理图,
5.1 NRPE的组成部分和监测类型
NRPE 总共由两部分组成:
check_nrpe 插件,位于监控主机上
NRPE daemon,运行在远程被监控的 Linux 主机上
当监控远程 Linux/UNIX 主机服务或资源时,工作流程如下:
nagios 会运行 check_nrpe 这个插件,并且会告诉它需要检查什么;
check_nrpe 插件会连接到远程的 NRPE daemon,所用的方式是 SSL;
NRPE daemon 会运行相应的 Nagios 插件来执行检查动作;
NPRE daemon 将检查的结果返回给 check_nrpe 插件,插件将其递交给 Nagios 做处理。
NRPE daemon 需要 Nagios 插件安装在远程的 Linux 主机上,否则 daemon 不能做任何的监控。
NRPE 的检测类型分为两种:
直接检测:检测的对象是运行 NRPE 的那台 Linux 主机的本地资源,原理如下:
直接使用 NRPE 插件监控远程 Linux/UNIX 主机的本地或者私有资源;如 CPU 负载、内存使用、SWAP 空间使用、硬盘等运行状况。如下为直接检测工作原理图,
间接检测:当运行 Nagios 的监控主机无法访问到某台被监控主机,但是运行 NRPE 的机器可以访问得到的时候,运行 NRPE 的主机就充当一个中间代理,将监控请求发送到被监控对象上。如下为间接检测图,
5.2 服务器端安装配置NRPE
1. 安装NRPE
tar zxvf nrpe-2.15.tar.gz ; cd nrpe-2.15
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
2. 定义check_nrpe命令
在文件/usr/local/nagios/etc/objects/commands.cfg后面增加:
# check nrpe
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$
}
3. 创建/usr/local/nagios/etc/objects/remotehost.cfg,比如vm1.cfg文件的定义:
host定义示例:
define host{
use linux-server
host_name vm1
address 192.168.56.101
}
Service定义示例:
define service{
use generic-service
service_description Root Partition
check_command check_nrpe!check_disk
}
查看配置文件是否正确:nagioscheck
重新加载配置文件:/etc/init.d/nagios reload
5.3 Linux客户端安装NRPE
1. 安装Nagios插件nagios-plugin
添加 nagios 用户名,且不允许 nagios 用户登录, 此用户用于与 Nagios 服务器通信所用:
useradd -s /sbin/nolgin nagios
tar zxvf nagios-plugins-1.5.tar.gz ; cd nagios-plugin-1.5
./configure
make && make install
2. 安装NRPE
tar zxvf nrpe-2.15.tar.gz
cd nrpe-2.15
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
yum install xinetd
make install-xinetd
3. 配置NRPE
定义被监控的 Linux 主机的对象,监控此主机的 CPU 负载、登录用户数、磁盘分区、进程、swap 使用情况等,编辑/usr/local/nagios/etc/nrpe.cfg 文件,示例如下,
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
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
4. 定义xinetd服务支持NRPE
修改 only_from 项,增加 Ngaios 服务器的地址,这样一来服务器与客户端就可进行 nrpe 会话,监控到 Linux 客户端相关信息,被监控端也更加容易维护管理:
# default: on
# description: NRPE (Nagios Remote Plugin Executor)
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 = 127.0.0.1 localhost 192.168.56.1
}
5. 定义服务端口
在 Linux 客户端"/etc/services" 文件增加一行:
nrpe 5666/tcp #NRPE
6. 测试NRPE功能
由于 NRPE 相应的插件已经安装成功, 这里使用 check_nrpe 命令来验证是否 nrpe 是否正常运行,如果执行以下命令能够显示 NRPE 的具体版本信息,则表示 nrpe 运行正常,加载重启 xinetd 服务即可:
/usr/local/nagios/libexec/check_nrpe -H localhost
NRPE v2.15
/etc/init.d/xinetd restart
6 Nagios管理平台简介
通过上面所有的软件及插件的安装与配置,Nagios 监控系统架构成功的完成了;若想进一步扩展,如监控 Windows 平台,则需要在 Windowns 系统安装 NSClient 软件,并在 Nagios 服务器定义 windows.cfg 等文件,VMware 则需要 Nagios 官网下载相应的插件及模块文件,并在 Nagios 服务器编辑 command.cfg、hosts.cfg、services.cfg 文件,示例如下,
Window 平台
vim /usr/local/nagios/etc/monitor/windows.cfg |
define host{ use windows-server,hosts-pnp host_name Windowns Server 2003_192 alias Remote win2003 192 address 192.168.1.192 } define service{ use generic-service,services-pnp host_name Windowns Server 2003_192 service_description NSClient++ Version check_command check_nt!CLIENTVERSION } } ……… |
VMware 平台
vim/usr/local/nagios/etc/monitor/commands.cfg |
define command{ command_name check_esx3_host_net_usage command_line $USER1$/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l net -s usage -w $ARG3$ -c $ARG4$ } define command{ command_name check_esx3_host_runtime_issues command_line $USER1$/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l runtime -s issues …… |
7 Nagios邮件报警功能设置
Nagios的报警系统主要有以下三种方式:
一、声音报警
二、电子邮件报警
三、手机短讯报警
以下为邮件报警系统的设置过程(以sendmail为邮件服务器)
1. 开启系统自带的sendmail服务
/etc/init.d/sendmail start
注解:若未安装,可:yum install -y sendmail* ; /etc/init.d/sendmail start
测试服务:echo "test" | mail youraddress
2. 配置Nagios报警邮箱
vim /usr/local/nagios/etc/objects/contacts.cfg:
define contact{
contact_name nagiosadmin ; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined above)
alias Nagios Admin ; Full name of user
email [email protected] ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}
3. 设置报警方式
vim /usr/local/nagios/etc/objects/templates.cfg:
define contact{
name generic-contact ; The name of this contact 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-email ; send service notifications via email
host_notification_commands notify-host-by-email ; send host notifications via email
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
}
注解:此处的notify-service-by-email和notify-host-by-email是在command.cfg那里定义的,使用默认定义即可。
重新加载配置文件使生效:/etc/init.d/nagios reload
至此完成邮件报警功能设置,可以通过停掉某些服务来测试功能是否正常。
8 总结
通过此篇文章描述了 Nagios 监控管理平台的工作原理,以及如何在 Linux 平台部署开源软件的管理平台,掌握 Naigos 配置管理,通过外部插件的方式来对服务对象 Windows 、Linux、 Unix 、 VMware 等平台进行有效的管理与监控,适合运行部门及管理部门的 IT 人员使用,不仅提高了效率同时减少了管理人员未能及时发现问题所带来的的困绕,也提高了生产的环境的可用性。
――Rango Chen