Nagios的安装

本论文以如下三台主机为例进行事例搭建监控,三台主机详细信息如下

5-1 三台事例主机详细信息

主机名

操作系统

IP

作用

nagios-server

redhat 9

192.168.77.128

监控机

linux-client

redhat 9

192.168.77.130

被监控机

window-client

xp

192.168.77.1

被监控机

注:

监控机:安装了nagios软件的机器,对监控的数据做处理,并且提供web界面查看和管理.当然也可以对本机自身的信息进行监控.

被监控机:安装了NRPE等客户端,根据监控机的请求执行监控,然后将结果回传给监控机.

准备工作

本监控平台不需要特别的运行环境支持,只要求操作系统是主流Linux即可,本监控平台能很好的支持各类Linux的分支系统如RedHat、Fedora、opeensuse、Ubuntu等。在监控环境下,由于主监控机承担着揭示整个监控系统运行情况的工作,所以需要安装有ApaChe(或者其他http服务,大多数发行版Linux都已自带)用来提供一个直观的界面来查看所有的汇总监控信息。

1.前提条件

基于nagios是在linux主机上的一种开源软件,所以需要在linux系统的主机上才能搭建。

2.需要的软件

nagios-2.9.tar.gz(nagios主程序)

nagios-plugins-1.4.9.tar.gz(监控linux主机需要)

nrpe-2.8.1.tar.gz(监控linux主机需要))

3.配置防火墙selinux

如果系统开启了selinux服务,则默认为拒绝nagios web cgi程序的运行。从而无法执行监控页面,通过下面的命令来确认系统关闭了selinux:

#setenforce 0

想在以后完全关闭selinux,可以通过编辑/etc/sysconfig/selinux文件,将其中的selinux后面的值“force”修改为“disable”即可。


5.1.2安装依赖包,启动相关服务

1、 解决安装Nagios的依赖关系:

Nagios基本组件的运行依赖于httpd、gcc和gd。可以通过以下命令来检查nagios所依赖的rpm包是否已经完全安装:

# yum -y install httpd gcc glibc glibc-common gd gd-devel php php-mysql mysql mysql-server

此外,要想完整的安装关运行本文中所描述的环境,您得准备一个功能完备的LAMP运行环境。(linux+apache+mysql+php)

2.启动相关服务

因为nagios监控系统是基于web页面形式的,所以需要开始httpd服务,又因为之后要用到邮件报警所以,也需要邮件服务sendmail开始

5.1.3 Nagios监控系统的编译安装

一、添加nagios运行所需要的用户和组:

# groupadd nagcmd

# useradd -m nagios

# usermod -a -G nagcmd nagios

把apache加入到nagcmd组,以便于在通过web Interface操作nagios时能够具有足够的权限:

# usermod -a -G nagcmd apache

二、编译安装nagios:

# tar zxf nagios-3.1.2.tar.gz

# cd nagios-3.1.2

# ./configure --with-command-group=nagcmd --enable-event-broker

# make all&& make install&& make install-init&& make install-config&& make install-commandmode

说明:第一步执行make install安装主要的程序、CGI及HTML文件,第二步执行make install-init的步骤,它的作用是把nagios做成一个运行脚本,使nagios随系统开机启动,这是一个很方便的措施。第三步执行 make install-config 把配置文件的例子复制到nagios的安装目录。执行 make install-commandmode 给外部命令访问nagios配置文件的权限。


为email指定您想用来接收nagios警告信息的邮件地址,默认是本机的nagios用户:

# vi /usr/local/nagios/etc/objects/contacts.cfg

email        nagios@localhost       #这个是默认设置

在httpd的配置文件目录(conf.d)中创建Nagios的Web程序配置文件:

# make install-webconf

创建一个登录nagios web程序的用户,这个用户帐号在以后通过web登录nagios认证时所用:

# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

以上过程配置结束以后需要重新启动httpd:

# service httpd restart

三、编译、安装nagios-plugins

nagios的所有监控工作都是通过插件完成的,因此,在启动nagios之前还需要为其安装官方提供的插件。

# tar zxf nagios-plugins-1.4.13.tar.gz

# cd nagios-plugins-1.4.13

# ./configure --with-nagios-user=nagios --with-nagios-group=nagios

# make&& make install

四、配置并启动Nagios

(1)把nagios添加为系统服务并将之加入到自动启动服务队列:

# chkconfig --add nagios

# chkconfig nagios on

(2)检查其主配置文件的语法是否正确:

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

(3)如果上面的语法检查没有问题,接下来就可以正式启动nagios服务了:

# service nagios start

(4)通过web界面查看nagios:

http://192.168.77.128/nagios

5.1.4 Nagios的初始化前配置

1)预备知识

Nagios自己定义了一套规则用于配置文件,其中最重要的概念就是”对象”----object.通俗的理解:假定我们首先定义了”性别”这个对象,它的值只可能是男,女 ,然后定义某人为一个对象,例如张三,定义张三的时候有”性别”这个属性,它的值就必须来源了之前定义的性别这个对象,要么是男是女,在Nagios里面定义了一些基本的对象,一般用到的有:

另外,多个被监控主机可以定义为一个主机组,多个联系人可以被定义为一个联系人组,多个服务还能定义成一个服务组呢.回到上面的例子,定义张三需要之前定义的性别,我们定义一个被监控的服务,当然就要指定被监控的主机,需要监控的时间段,要用哪个命令来完成这个监控操作,出了问题向哪个联系人报告.

2)修改配置文件-开启相应的配置

vi /usr/local/nagios/etc/nagios.cfg

/usr/loca check_external_commands=1//允许在web界面下执行重启nagios停止主机/服务检查等操作

command_check_interval=10s(根据自己的情况定这个命令检查时间间隔,不要太长也不要太短)。

3)修改CGI脚本控制文件cgi.cfg

(确保use_authentication=1//验证)

//多个用户之间用逗号隔开(用户名来自htpasswd,不要添加过多)

authorized_for_system_information=nagiosadmin,用户名

4)定义监控时间段,创建配置文件timeperiods.cfg

5)定义联系人,创建配置文件contacts.cfg

6)下面就可以将多个联系人组成一个联系人组contactgroups.cfg

7)定义被监控主机,创建文件hosts.cfg

注意:按照对应的方式简单的复制修改主机名、IP和别名就可以创建多个被监控主机.

8)与联系人可以组成联系人组一样,多个主机也可以组成主机组. hostgrops.cfg

注意:按照对应的方式简单的复制修改主机名、IP和别名就可以创建多个被监控主机组。

9)定义监控的项目,也叫服务,services.cfg

注意:按照对应的方式简单的复制修改主机名、命令和组名就可以创建多个服务。并且主机名要与hosts.cfg文件中定义的一致

10)在运行nagios之前首先做测试

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg


看到下面这些信息就说明没问题了

Total Warnings: 0

Total Errors:0

Things look okay - No serious problems were detected during the pre-flight check

11)作为守护进程后台启动nagios,并设置为开机自动启动

12)一切配置完成,即可登录页面查看监控信息

5.2使用Nrpe插件监控Linux主机上的本地信息

对于像磁盘容量,cpu负载这样的”本地信息”,nagios只能监测自己所在的主机,而对其他的机器则显得有点无能为力.毕竟没得到被控主机的适当权限是不可能得到这些信息的.为了解决这个问题,nagios有这样一个附加组件----NRPE.用它就可以完成对linux类型主机”本地信息”的监控.

其中的具体原理已经在2.5节详细说明,此节重点说明具体的实现过程。

5.2.1被监控linux主机上的 配置

1)增加用户并设置密码

[root@dbpi root]# useradd nagios

[root@dbpi root]# passwd nagios

2)编译安装nagios插件nagios-plugins

3)编译安装监控插件nrpe

4)编辑这个nrpe脚本

vi /etc/xinetd.d/nrpe

only_from= 127.0.0.1 192.168.77.128(监控主机ip地址)//注意中间用空格而不是逗号间隔

5)编辑/etc/services文件,增加NRPE服务

Vi /etc/services

Nrpe 5666/tcp

6)重启xinetd服务

[root@dbpi nrpe-2.8.1]# service xinetd restart

7)查看NRPE是否已经启动

[root@dbpi nrpe-2.8.1]# netstat -at|grep nrpe

[root@dbpi nrpe-2.8.1]# netstat -an|grep 5666

8)测试NRPE是否则正常工作

/usr/local/nagios/libexec/check_nrpe -H localhost//正确结果会返回当前NRPE的版本

9)可查看或添加 NRPE的监控命令//在/usr/local/nagios/etc/目录下

ps:我的linux服务器端的配置文件代码如下

/usr/local/nagios/etc/nagios.cfg

/usr/local/nagios/etc/objects/localhost.cfg

# Define a host for the local machine
define host{
use         linux-server,hosts-pnp      ; 给网络设备用的
host_name       HomeSwitch
alias           HomeSwitch
address                192.168.77.128
icon_p_w_picpath              switch.gif
statusmap_p_w_picpath         switch.gd2
2d_coords       100,200
3d_coords       100,200,100
}
define host{
use                     linux-server,hosts-pnp
host_name               monitor
alias                   理工毕业设计
parents         HomeSwitch
address                 192.168.77.128
icon_p_w_picpath              web.gif
statusmap_p_w_picpath         web.gd2
2d_coords       100,300
3d_coords       100,300,100
}
#define host{
#        use                     linux-server
#        host_name               MyGamePC
#        alias                   MyGamePC
#   parents         HomeSwitch
#        address                 127.0.0.1
#        icon_p_w_picpath              server.gif
#        statusmap_p_w_picpath         server.gd2
#   2d_coords       200,300
#   3d_coords       200,300,100
#        }
#define host{
#        use                     linux-server
#        host_name                  HomeRouter
#        alias                   HomeRouter
#   parents         HomeSwitch
#        address                 127.0.0.1
#        icon_p_w_picpath              router.gif
#        statusmap_p_w_picpath         router.gd2
#   2d_coords       200,200
#   3d_coords       200,200,100
#        }
#define host{
#        use                     linux-server
#        host_name                  xDSL
#        alias                   xDSL
#   parents         HomeSwitch
#        address                 127.0.0.1
#        icon_p_w_picpath              router.gif
#        statusmap_p_w_picpath         router.gd2
#   2d_coords       200,100
#   3d_coords       200,100,100
#        }
#define host{
#        use                     linux-server
#        host_name                  Firewall
#        alias                   Firewall
#   parents         HomeRouter
#        address                 127.0.0.1
#        icon_p_w_picpath              router.gif
#        statusmap_p_w_picpath         router.gd2
#   2d_coords       300,200
#   3d_coords       300,200,100
#        }
#define host{
#        use                     linux-server
#        host_name                  RADIUS
#        alias                   RADIUS
#   parents         xDSL,MainSwitch
#        address                 192.168.2.1
#        icon_p_w_picpath              router.gif
#        statusmap_p_w_picpath         router.gd2
#   2d_coords       300,100
#   3d_coords       300,100,100
#        }
#
#define host{
#   use         linux-server        ; 给网络设备用的
#   host_name       MainSwitch
#   alias           MainSwitch
#   parents         Firewall
#        address                 127.0.0.1
#        icon_p_w_picpath              switch.gif
#        statusmap_p_w_picpath         switch.gd2
#   2d_coords       400,200
#   3d_coords       400,200,100
#   }
#define host{
#        use                     linux-server
#        host_name               IBME450
#        alias                   IBME450
#   parents         MainSwitch
#        address                 127.0.0.1
#        icon_p_w_picpath              server.gif
#        statusmap_p_w_picpath         server.gd2
#   2d_coords       300,300
#   3d_coords       300,300,100
#        }
#define host{
#        use                     linux-server
#        host_name                  SunUltra10
#        alias                   SunUltra10
#   parents         MainSwitch
#        address                 127.0.0.1
#        icon_p_w_picpath              server.gif
#        statusmap_p_w_picpath         server.gd2
#   2d_coords       400,300
#   3d_coords       400,300,100
#        }
#define host{
#        use                     linux-server
#        host_name                  Manager
#        alias                   Manager
#   parents         MainSwitch
#        address                 127.0.0.1
#        icon_p_w_picpath              server.gif
#        statusmap_p_w_picpath         server.gd2
#   2d_coords       500,200
#   3d_coords       500,200,100
#        }
###############################################################################
###############################################################################
#
# HOST GROUP DEFINITION
#
###############################################################################
###############################################################################
# Define an optional hostgroup for Linux machines
define hostgroup{
hostgroup_name  linux-servers ; The name of the hostgroup
alias           Linux Servers ; Long name of the group
members         *     ; Comma separated list of hosts that belong to this group
}
define hostgroup{
hostgroup_name 本地监控机器组
alias   毕业设计服务器
members monitor
}
define servicegroup{
servicegroup_name 系统负荷检查
alias 负荷检查
members monitor,进程总数,monitor,登录用户数,monitor,根分区,monitor,交换空间利用率
}
define servicegroup{
servicegroup_name 全部联通性检查
alias 联通性检查
members HomeSwitch,PING,monitor,PING
}
###############################################################################
###############################################################################
#
# SERVICE DEFINITIONS
#
###############################################################################
###############################################################################
# Define a service to "ping" the local machine
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                       *
service_description             PING
check_command           check_ping!100.0,20%!500.0,60%
}
# Define a service to check the disk space of the root partition
# on the local machine.  Warning if < 20% free, critical if
# < 10% free space on partition.
define service{
use                             local-service         ; Name of service template to use
host_name                       monitor
service_description             根分区
check_command           check_local_disk!20%!10%!/
}
# Define a esrvice to check the number of currently logged in
# users on the local machine.  Warning if > 20 users, critical
# if > 50 users.
define service{
use                             local-service         ; Name of service template to use
host_name                       monitor
service_description             登录用户数
check_command           check_local_users!20!50
}
# Define a service to check the number of currently running procs
# on the local machine.  Warning if > 250 processes, critical if
# > 400 users.
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                       monitor
service_description             进程总数
check_command           check_local_procs!250!400!RSZDT
}
# Define a service to check the load on the local machine.
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                      monitor
service_description             系统负荷
check_command           check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
# Define a service to check the swap usage the local machine.
# Critical if less than 10% of swap is free, warning if less than 20% is free
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                      monitor
service_description             交换空间利用率
check_command           check_local_swap!20!10
}
# Define a service to check SSH on the local machine.
# Disable notifications for this service by default, as not all users may have SSH enabled.
define service{
use                             local-service,services-pnp         ; Name of service template to use
host_name                      monitor
service_description             SSH
check_command           check_tcp!22!1.0!10.0
notifications_enabled       0
}
# Define a service to check HTTP on the local machine.
# Disable notifications for this service by default, as not all users may have HTTP enabled.
define service{
use                             local-service,services-pnp        ; Name of service template to use
host_name                       monitor
service_description             HTTP
check_command           check_http
notifications_enabled       0
}
#网卡流量
define service{
use                             local-service,services-pnp
host_name monitor
service_description check_traffic
check_command check_traffic
max_check_attempts 5
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
}

/usr/local/nagios/etc/objects/mylinux-client.cfg

define host{
use         linux-server
host_name   mylinux-client
alias       mylinux
address     192.168.77.130
#小太阳图标画图
process_perf_data  1
action_url  /nagios/pnp/index.php?host=$HOSTNAME$
}
define service{
use                 generic-service
#使用的是/usr/local/nagios /etc/objects/templates.cfg中所定义的
host_name           mylinux-client
service_description Swap Usage
check_command       check_nrpe!check_swap
}
define service{
use                 generic-service
host_name           mylinux-client
service_description Current Load
check_command       check_nrpe!check_load
}
define service{
use                 generic-service
host_name           mylinux-client
service_description Partition Usage
check_command       check_nrpe!check_disk
}
define service{
use                 generic-service
host_name           mylinux-client
service_description Current Users
check_command       check_nrpe!check_users
}
define service{
use                 generic-service
host_name           mylinux-client
service_description Total Processes
check_command       check_nrpe!check_total_procs
}
define service{
use                 generic-service
host_name           mylinux-client
service_description PING
check_command       check_nrpe!check_ping
}
define service{
use                    generic-service
host_name            mylinux-client
service_description  httpd
check_command     check_http! -H 192.168.77.130
#此时ip为监控对方客户端ip!
}

5.2.2 Nagios的监控主机上的配置

因为之前监控主机上,已经将nagios运行起来了,现在要做的事情是:

1) 安装check_nrpe插件并测试与被监控linux主机的联通性

监控机使用check_nrpe与被监控机(192.168.77.130)运行的nrpedaemon之间的通信.

/usr/local/nagios/libexec/check_nrpe -H 192.168.77.130

注意:监控主机与被监控主机使用的nrpe版本要一致!

2) 在commands.cfg中创建check_nrpe的命令定义

因为只有在commands.cfg中定义过的命令才能在services.cfg中使用

vi /usr/local/nagios/etc/commands.cfg(确定是在nagios.cfg定义的)

define command{

command_name check_nrpe

command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$

}


3)在services.cfg文件中创建对被监控主机的监控项目

4)在被监控机上增加check_swap命令的定义

vi /usr/local/nagios/etc/nrpe.cfg

增加下面这一行

command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

注意:如果你是以独立的daemon运行的nrpe,那么需要手动重启.如果你是在xinetd或者inetd下面运行的,则不需要.由于我们是xinetd下运行的,所以不需要重启服务

5.3使用NSClient插件监控windows主机系统

NSClient的原理如下图

根据前几个章节的具体描述可以看到,NSClient与nrpe最大的区别就是:

被监控机上安装有nrpe,并且还有插件,最终的监控是由这些插件来进行的.当监控主机将监控请求发给nrpe后,nrpe调用插件来完成监控.NSClient则不同,被监控机上只安装NSClient,没有任何的插件.当监控主机将监控请求发给NSClient后,NSClient直接完成监控,所有的监控是由NSClient完成的.这也说明了NSClient的一个很大的问题,不灵活,没有可扩展性.它只能完成自己本身包含的监控操作,不能由一些插件来扩展.好在NSClient已经做的不错了,基本上可以完全满足我们的监控需要.

监控 Windows 服务必须在被监控端装有插件程序,基于我校监控系统对所有 windows 服务器安全保护措施,在实现过程中仅以个人主机为被监控的windows客户端。:

5.3.1 Windows 服务器被监控主机的配置

1.下载安装NSClient

http://sourceforge.net/projects/nscplus下载并解压安装,按一般windows软件进行安装即可。

2.在运行里面输入services.msc打开”服务” 看到下图就说明NSClient服务已经安装上了

3. 修改NSCliet++ 的配置文件NES.ini,默认安装在C盘下

在[modules]选项里,启用所有注释的配置命令,但保留 CheckWMI.dll 和 RemoteConfiguration.dll 的注释。

4.更改[Settings]选项

修改 allowd_host=192.168.77.128 //nagios 服务器的 ip 地址

5.修改[NSClient]选项

启用 port=12489 的配置,系统通过端口 12489 侦听,系统中取消对该端口的限制后再执行 nsclient 命令。

6.重启服务,确认服务开启,并处于监听状态

我的电脑—右键管理—服务和应用程序—启动NSClient++服务,打开cmd执行netstat –an查看监听状态

5.3.2 Nagios 服务器监控主机端的配置

对监控主机的配置

与之前的nrpe的过程类似,在监控主机上做的就3件事情

1.安装监控windows的插件(已经默认安装了,check_nt)

2.定义命令

3.定义要监控的项目

第一种方法:如果只是定义一台windows主机,那么可以使用templates.cfg里面的windows配置板,此处我只定义一台windows主机,所以我使用模板

1.首先更改nagios.cfg配置文件,让其支持windows.cfg定义对象,找到41行,去掉前面#

2.查看nagios的命令配置定义对象,看是否有check_nt的定义,如果没有,自行加入(此处commands.cfg文件中已有定义,不用自己编写)

3.定义主机,编辑objects/windows.cfg文件,此文件中,只需更改29行的ip地址即可,改成被监控端windows的(由于此文件中已经写好要监控的东西,所以不用再另行编写,如果想定义此文件中没有的内容,可自动编写)

Vim  /usr/local/nagios/etc/objects/windows.cfg

define host{
use     windows-server,hosts-pnp    ; Inherit default values from a template
host_name   zangwinserver   ; The name we're giving to this host
alias       My Windows Server   ; A longer name associated with the host
address     192.168.77.1; IP address of the host
process_perf_data 1
action_url /nagios/pnp/index.php?host=$HOSTNAME$
}
define hostgroup{
hostgroup_name  windows-servers ; The name of the hostgroup
alias       Windows Servers ; Long name of the group
}
define service{
use         generic-service
host_name       zangwinserver
service_description NSClient++ Version
check_command       check_nt!CLIENTVERSION
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description Uptime
check_command       check_nt!UPTIME
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description CPU Load
check_command       check_nt!CPULOAD!-l 5,80,90
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description Memory Usage
check_command       check_nt!MEMUSE!-w 80 -c 90
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description C:\ Drive Space
check_command       check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description W3SVC
check_command       check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
}
define service{
use         generic-service,services-pnp
host_name       zangwinserver
service_description Explorer
check_command       check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
}


4.最后检查配置是否正确,并重启nagios服务。


5.4 监控网络核心交换机配置

1)编辑 Nagios 的主配置文件:

root@sz-yunfan:~# vi /usr/local/nagios/etc/nagios.cfg

启用下面这行配置

cfg_file=/usr/local/nagios/etc/objects/switch.cfg

2)配置 Nagios

需要做些对象定义用于监控新的交换机与路由器等网络设备。

打开 switch.cfg 配置文件进行配置

# vi /usr/local/nagios/etc/objects/switch.cfg

对被监控的交换机加一个新的主机对象定义。 编辑主机对象中的 host_name、alias 和 address 值。

define host{

use generic-switch

host_name 交换机名称

alias 交换机别名

address 核心交换机ip地址

hostgroups 主机组成员

}

3)监控丢包率和 RTA

增加服务定义配置,用于监控被 Nagios 监控主机到交换机的丢包率和平均回包周期 RTA,检测周期一般是每 5 分钟。

define service{

use generic-service

host_name RG6806E

service_description PING

check_command check_ping! 200.0,20%! 600.0,60%

normal_check_interval 5

retry_check_interval 1

}

Nagios 监控系统实现了网络服务系统重要信息的监控,提供了可靠的、稳定的应用服务,保证了网络服务的正常运行。解决了日常网络服务器管理的繁杂工作,释放了大量的人工管理工作时间。 Nagios 监控系统能准确记录、定位并及时报警,为解决网络操作系统故障提供了宝贵的时间,同时也将故障导致服务中断的时间降低至最低。有效、可靠的报警为网络服务的正常运行提供了良好的保障。

/usr/local/nagios/etc/nagios.cfg

define host{
use     generic-switch,hosts-pnp        ; Inherit default values from a template
host_name   switch      ; The name we're giving to this switch
alias       Linksys SRW224P Switch  ; A longer name associated with the switch
address     192.168.32.25       ; IP address of the switch
hostgroups  switches        ; Host groups this switch is associated with
}
define hostgroup{
hostgroup_name  switches        ; The name of the hostgroup
alias       Network Switches    ; Long name of the group
}
define service{
use         generic-service,services-pnp    ; Inherit values from a template
host_name       switch  ; The name of the host the service is associated with
service_description PING        ; The service description
check_command       check_ping!200.0,20%!600.0,60%  ; The command used to monitor the service
normal_check_interval   5       ; Check the service every 5 minutes under normal conditions
retry_check_interval    1       ; Re-check the service every minute until its final/hard state is determined
}
#监控SNMP状态信息
# Monitor uptime via SNMP
define service{
use         generic-service ; Inherit values from a template
host_name       switch
service_description Uptime
check_command       check_snmp! -C public -o sysUpTime.0
}
监控端口带宽和流量
define service{
use         generic-service ; Inherit values from a template
host_name       linksys-srw224p
service_description Port 1 Link Status
check_command       check_snmp!-C public -o ifOperStatus.1 -r 1 -m RFC1213-MIB
}
# Monitor bandwidth via MRTG logs
define service{
use         generic-service ; Inherit values from a template
host_name       linksys-srw224p
service_description Port 1 Bandwidth Usage
#check_command      check_local_mrtgtraf!/var/lib/mrtg/192.168.20.25_1.log!AVG!1000000,1000000!5000000,5000000!10
}

5.5 监控网络核心路由器配置

5.5 nagios报警功能

5.5.1邮箱报警方式

Nagios 的报警功能一直是它最强大的地方,Nagios 默认使用mail 命令发送报警邮件,RedHat默认安装并启动了sendmail,使用邮件报警,可以使用139 邮箱的短信通知功能,如此可以省得很大一部分资金的开销,测试你的Nagios 是否可以正常发送邮件:

[root@Nagios-Server ~]# echo "hehe" | mail -s "test" [email protected]

如果测试没问题,你的Nagios 配置也没有问题,就可以正常使用了。

注意:发送的邮件一般会被当做垃圾邮件,存放在垃圾邮件箱。

5.5.2飞信报警方式

1.安装飞信机器人程序。

# tar -zxvf fetion_linux_2010...tar.gz(现在飞信用的是新版本)

# cp sms /usr/local/nagios/libexec

然后拷贝Library32下的所有库文件到 /lib 以及/usr/lib。 现在可以测试飞信是否能发信息。

# /usr/local/nagios/libexec/sms -f 号码 -p 飞信的密码 -t 接受信息的手机号码 -m ″信息内容″

注意:只能给好友发信息,发送成功后系统会有相应的提示。 可以使用 /usr/local/nagios/libexec/sms --help 获得飞信的使用帮助。

2.增加Nagios监控服务器的飞信报警命令。

(1)修 改/usr/local/nagios/etc/objects/command.cfg 文件在邮件报警相关定义 “# ′notify-service-by-email′”后,加入飞信报警的定义。

#notify-host-by-sms

define command{

command_name notify-host-by-sms

command_line /usr/local/nagios/libexec/sms -f号码 -p 飞信密码 -t $CONTACTPAGER$ -m ″$HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ on $TIME$ result is $SERVICEOUTPUT$″ $CONTACTPAGER$

}

#notify-service-by-sms

define command{

command_name notify-service-by-sms

command_line /usr/local/nagios/libexec/sms -f号码 -p 飞信密码 -t $CONTACTPAGER$ -m ″$HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ on $TIME$ result is $SERVICEOUTPUT$″ $CONTACTPAGER$

}

(2) 修 改/usr/local/nagios/etc/objects/contacts.cfg 文 件 , 定义报警短信的接受人。@163.com,报警短信接收手机号为18238811

define contact{

contact_name zang

use generic-contact

alias System-Admin

email [email protected]

pager

}

然后把zang添加到组中。

define contactgroup{

contactgroup_name admins

alias Nagios Administrators

members zang

}

(3)修 改/usr/local/nagios/etc/objects/templates.cfg模 版 文 件 。

增加飞信报警。

service_notification_commands notify-service-by-sms, noti-fy-service-by-email

host_notification_commands notify-host-by-sms, notify-service-by-email

保存以上修改后,重启Nagios服务。 至此基于飞信报警的Nagios服务器配置成功。 现在可以把Nagios监控的一个服务关闭,测试飞信报警。

在复杂的大型网络的管理中,利用飞信和Nagios网络监控系统进行管理,网络管理人员可大大减轻工作量,提高工作效率,最重要的是能够及时发现网络的异常,快速处理故障,保证正常教学工作的有效进行。

5.5.3关闭报警

报警是使用率最高的功能了,如果某些服务器需要送修,如果预期进行某些主机和服务的维护工作,我们可以提前关闭该主机或者服务的报警功能,不然你的邮箱会不停的接受报警邮件,默认5 分钟发送一封报警邮件,直到恢复为止(Nagios 誓不罢休的精神值得我们应用到学习中)。在Services 标签下,点击相应的服务名称,在右侧点击Disable notifications for this service,直接提交即可关闭,完成后,返回Services 标签,你会发现,在该服务前面有个小喇叭的符号,上面有个红色的X。

四、Nagios性能分析图表的实现
1)安装PNP支持包rrdtool工具
[root@localhost aaa]# tar zxf rrdtool-1.4.5.tar.gz
[root@localhost aaa]# cd rrdtool-1.4.5
[root@localhost rrdtool-1.4.5]# ./configure --prefix=/usr/local/rrdtool ; make ; make install
2)安装PNP
[root@localhost rrdtool-1.4.5]# cd /aaa/
[root@localhost aaa]# tar zxf pnp-0.4.13.tar.gz
[root@localhost aaa]# cd pnp-0.4.13
[root@localhost pnp-0.4.13]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata ; make all ; make install ; make install-config ; make install-init
3)配置PNP
A,创建默认配置文件
[root@localhost pnp-0.4.13]# cd /usr/local/nagios/etc/pnp/
[root@localhost pnp]# cp process_perfdata.cfg-sample process_perfdata.cfg
[root@localhost pnp]# cp npcd.cfg-sample npcd.cfg
[root@localhost pnp]# cp rra.cfg-sample rra.cfg
[root@localhost pnp]# chown -R nagios:nagios /usr/local/nagios/etc/pnp/
B,修改process_perfdata.cfg
[root@localhost pnp]# vi /usr/local/nagios/etc/pnp/process_perfdata.cfg
44 LOG_LEVEL = 2
4)修改Nagios主配置文件
A,增加小太阳图标
[root@localhost pnp]# cd /usr/local/nagios/etc/
[root@localhost etc]# vi templates.cfg
define host{
name hosts-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$
process_perf_data 1
}
define service{
name services-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
process_perf_data 1
}
B、修改nagios.cfg
找到如下几行去掉注释
[root@localhost etc]# vi nagios.cfg
833 process_performance_data=1
845 host_perfdata_command=process-host-perfdata
846 service_perfdata_command=process-service-perfdata
C、修改commands.cfg
# 'process-host-perfdata' command definition
define command{
command_name process-host-perfdata
command_line /usr/bin/perl  /usr/local/nagios/libexec/process_perfdata.pl  
}

# 'process-service-perfdata' command definition
define command{
command_name process-service-perfdata
command_line /usr/bin/perl  /usr/local/nagios/libexec/process_perfdata.pl
}
D、修改hosts.cfg文件和services.cfg文件
[root@localhost ~]# vi /usr/local/nagios/etc/objects/hosts.cfg
define host{
use linux-server,hosts-pnp
host_name web
alias benet-web
address 192.168.1.1
}
define host{
use linux-server,hosts-pnp
host_name mysql
alias benet-mysql
address 192.168.1.2
}
define hostgroup{
hostgroup_name sa-servers
alias sa servers
members web,mysql
}
[root@localhost ~]# vi /usr/local/nagios/etc/objects/services.cfg
################- benet web -##########################
define service{
use local-service,services-pnp
host_name web
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service,services-pnp
host_name web
service_description SSH
check_command check_ssh
}
点击小太阳,出现对主机或服务的监控页面