由于Nagios只能监测自己所在的主机的一些本地情况,例如,cpu负载、内存使用、硬盘使用等等。如果想要监测被监控的服务器上的这些本地情况,就要用到NRPE。NRPE(Nagios Remote Plugin Executor)是Nagios的一个扩展,它被用于被监控的服务器上,向Nagios监控平台提供该服务器的一些本地的情况。NRPE可以称为Nagios的Linux客户端。
由于NRPE是通过SSL方式在监控和被监控主机上进行数据传输的,所以必须先安装ssl相关的软件包。
1 |
apt-get install libssl-dev libssl0.9.8 |
编译安装NRPE
1 2 3 4 5 6 7 |
tar zxvf nrpe-2.12.tar.gz cd nrpe-2.12 ./configure make all make install-plugin make install-daemon make install-daemon-config |
注:监控主机上只需要make install-plugin这一步就可以了。监控机上只要有一个check_nrpe插件用于连接被监控端nrpe的daemon就行了。
启动NRPE
1 |
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d |
验证NRPE是否正确安装
1 |
/usr/local/nagios/libexec/check_nrpe -H localhost |
注:如果成功,会返回NRPE的版本号。
三、Nagios被控端安装配置
1、创建Nagios用户及组
建立Nagios账号
1 |
/usr/sbin/useradd -m -s /sbin/nologin nagios |
2、编译并安装Nagios插件
1 2 3 4 5 6 |
tar zxvf nagios-plugins-1.4.15.tar.gz cd nagios-plugins-1.4.15 ./configure --with-nagios-user=nagios --with-nagios-group=nagios make make install cd .. |
验证程序是否被正确安装:
1 |
ls /usr/local/nagios/libexec |
显示安装的插件文件,即所有的插件都安装在libexec这个目录下。
3、安装NRPE
1 2 3 4 5 6 7 8 |
tar zxvf nrpe-2.12.tar.gz cd nrpe-2.12 ./configure make all make install-plugin make install-daemon make install-daemon-config cd .. |
4、启动NRPE
1 |
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d |
验证NRPE是否正确安装
1 |
/usr/local/nagios/libexec/check_nrpe -H localhost |
注:如果成功,会返回NRPE的版本号。
5、修改NRPE配置文件,让监控主机可以访问被监控主机的NRPE。
缺省NRPE配置文件中只允许本机访问NRPE的Daemon
1 2 3 4 |
vi /usr/local/nagios/etc/nrpe.cfg #缺省为127.0.0.1,只能本机访问 allowed_hosts=192.168.1.108 |
6、重启nrpe的方法
1 2 |
killall nrpe /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d |
四、Nagios配置文件关系说明
Nagios的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#控制cgi访问的配置文件 cgi.cfg #Nagios主配置文件 nagios.cfg #resource.cfg 定义了一些变量,以便被其他文件引用,如$USER1$resource.cfg #objects是一个目录,用于定义Nagios对象 objects #servers是自己创建的一个目录,Nagios可以加载一个目录下面的所有配置文件(需要在nagios.cfg中配置) servers ./objects: #命令定义配置文件,里面定义的命令可以被其他文件引用 commands.cfg #联系人和联系人组配置文件 contacts.cfg #监控本地机器的配置文件 localhost.cfg #监控打印机的一个事例配置文件(默认未启用) printer.cfg # 监控路由器的一个事例配置文件(默认未启用) switch.cfg # 模板配置文件,在此可以定义模板,在其他文件中引用 templates.cfg # 定义监控时间段的配置文件 timeperiods.cfg # 监控Windows的一个事例配置文件(默认未启用) windows.cfg ./server: # 自己创建的主机群组配置文件 hostgroup.cfg # 自己创建的监控远程Linux主机的配置文件 linux.cfg |
五、监控应用
监控一个项目最重要的有下面三点:首先是监控哪台机器,然后是这个监控要用什么命令实现,最后就是出了问题的时候要通知哪个联系人。
A、定义监控的主机
创建一个用于存放监控的项目的目录
1 |
mkdir -p /usr/local/nagios/etc/server |
配置nagios.cfg文件
让Nagios能够访问自定义的目录下的配置文件,增加以下内容:
1 |
cfg_dir=/usr/local/nagios/etc/server |
创建要监控主机的配置文件
这里我以示例的localhost.cfg为基础进行创建
1 |
cp /usr/local/nagios/etc/objects/localhost.cfg /usr/local/nagios/etc/server/linuxsever1.cfg |
先修改对linuxsever.cfg文件中对主机定义部分,服务部分的定义放在后面来说。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
vi /usr/local/nagios/etc/server/linuxsever.cfg define host{ use linux-server ; Name of host template to use ; This host definition will inherit all variables that are defined ; in (or inherited by) the linux-server host template definition. host_name linuxsever1 alias linuxsever1 address 192.168.1.106 } # Define an optional hostgroup for Linux machines define hostgroup{ hostgroup_name linuxsever ; The name of the hostgroup alias linuxsever ; Long name of the group members linuxsever1 ; Comma separated list of hosts that belong to this group } |
B、定义监控的命令
要对主机上的服务进行监控,首先需要定义监控服务所使用的监控命令。
监控远程服务和资源的命令以及如何发送邮件命令的定义一般都在commands.cfg中进行。大部分监控远程服务和资源的命令都是通过/usr/local/nagios/libexec下的脚本实现,如ping命令为check_ping。
配置commands.cfg文件
我们这里要对被监控服务器的一些本地资源情况,这里就先加入NRPE的支持。
定义NRPE支持,commands.cfg中增加以下内容
1 2 3 4 5 6 |
vi /usr/local/nagios/etc/objects/commands.cfg define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ } |
定义发送邮件的命令,实现邮件报警
修改commands.cfg中的notify-host-by-email和notify-service-by-email命令
1 2 3 4 5 6 7 8 9 10 11 12 13 |
vi /usr/local/nagios/etc/objects/commands.cfg # 'notify-host-by-email' command definition define command{ command_name notify-host-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendEmail -f nagiosdemo@163.com -t $CONTACTEMAIL$ -s smtp.163.com -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -xu nagiosdemo -xp nagiosdemo } # 'notify-service-by-email' command definition define command{ command_name notify-service-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/sendEmail -f nagiosdemo@163.com -t $CONTACTEMAIL$ -s smtp.163.com -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -xu nagiosdemo -xp nagiosdemo } |
注:监控主机上没有安装任何SMTP服务,这里就采用了外部邮件��务器上SMTP服务进行发送邮件。这样就需要一个可自定义SMTP服务器的邮件客户端。这里采用的是sendEmail。
SendEmail简单介绍
SendEmail官方地址:http://caspian.dotconf.net/menu/Software/SendEmail/
安装
1 |
apt-get install sendemail |
基本用法
1 |
sendemail -f nagiosdemo@163.com -t nagiosdemo@163.com -s smtp.163.com -u “from nagios” -xu nagiosdemo -xp nagiosdemo -m happy |
各参数具体含义
1 2 3 4 5 6 7 |
-f 表示发送者的邮箱 -t 表示接收者的邮箱 -s 表示SMTP服务器的域名或者ip -u 表示邮件的主题 -xu 表示SMTP验证的用户名 -xp 表示SMTP验证的密码(注意:这个密码有限制,一些特殊符号或者超长度密码不能被正确识别) -m 表示邮件的内容 |
更详细用法可参考官方文档或直接运行sendEmail就会显示详细的用法。
小技巧:如果这里的收件邮箱采用139的邮箱,就一举两得的同时实现了邮件报警和短信报警的两个功能。因为139邮箱提供了邮件到达后,免费短信提醒通知功能。也算是短信通知了另一种实现方式吧,呵呵!
注:飞信机器人在Ubuntu 10.04环境下不能成功运行,提示’No such file or directory’,由于无更多提示信息,暂不能解决。CentOS5.2下能成功运行,不知是不是由于官方提供的飞信机器人支持库是在CentOS环境编译的原因!
C、定义监控联系人和联系人组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
vi /usr/local/nagios/etc/objects/contacts.cfg define contact{ contact_name mike ; Short name of user use generic-contact ; Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user email nagios@nagios.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ****** } define contactgroup{ contactgroup_name admins alias Nagios Administrators members mike } |
D、定义常用监控的服务
Nagios监控功能非常的强大,这里只说下比较常见的一些监控项目。
A、通过NRPE监控被监控主机的本地资源信息
1、监控被监控主机的负载情况
1 2 3 4 5 6 7 8 |
vi /usr/local/nagios/etc/server/linuxsever.cfg define service{ use generic-service ; Name of service template to use host_name linuxsever1 service_description Current Load check_command check_nrpe!check_load } |
2、监控被监控主机上的登陆用户数
1 2 3 4 5 6 7 8 |
vi /usr/local/nagios/etc/server/linuxsever.cfg define service{ use generic-service ; Name of service template to use host_name linuxsever1 service_description Current Users check_command check_nrpe!check_users } |
3、监控被监控主机上的根分区磁盘使用情况
1 2 3 4 5 6 7 8 |
vi /usr/local/nagios/etc/server/linuxsever.cfg define service{ use generic-service ; Name of service template to use host_name linuxsever1 service_description Root Partition check_command check_nrpe!check_sda1 } |
4、监控被监控主机上的Swap使用情况
1 2 3 4 5 6 7 8 |
vi /usr/local/nagios/etc/server/linuxsever.cfg define service{ use generic-service ; Name of service template to use host_name linuxsever1 service_description Swap Usage check_command check_nrpe!check_swap } |