部署说明

我们这里要实现对30多台服务器、2台内部交换机、1台核心交换机以及多个硬件设备进行监测。服务器根据不同的功能连接到两台内部交换机上,两台内部交换机通过2个网口聚合连到核心交换机上。其他的硬件设备由于网路上的要求,直接连到核心交换机上。

部署完后的nagios map图为:

clip_p_w_picpath002


系统及监测项

服务器操作系统包括windows和centos。

Windows上要监测的除了基本的cpu、内存、硬盘容量之外,主要还包括windows的服务、进程、一些tomcat的tcp端口;

Centos上要监测的除了基本的cpu、内存、硬盘容量之外,主要还包括进程、http并发、dhcp、dns、tomcat的tcp端口以及处于系统上的要求,需要关心的监测项。


少数硬件设备尚未在本次监测中配置监测项,可根据这些硬件的情况(如是否支持snmp监测协议)进行增加。


Nagios软件准备

Nagios服务器,英文文档中叫Nagios Server,有些资料上称监测服务器等。安装Nagios服务器端所需的软件。

被监测机,英文文档中叫Remote Computer,或Client Computer,即待监测的服务器或待监测的终端设备。

Nagios服务器端的操作系统可以是:centos5.5 32bit 或者 centos5.8 64bit及相近版本。

64位的依赖包rpm都要安装64位的版本。

32位centos需要安装的软件包括:

nagios-3.5.0.tar.gz

nagios-plugins-1.4.16.tar.gz

nrpe-2.14.tar.gz

mrtg-2.17.4.tar.gz

net-snmp-libs-5.3.2.2-9.el5.i386.rpm

net-snmp-5.3.2.2-9.el5.i386.rpm

net-snmp-utils-5.3.2.2-9.el5.i386.rpm

httpd(apache) 服务;

待监测的Centos机器上需要安装的是:

nagios-plugins-1.4.16.tar.gz

nrpe-2.14.tar.gz

待监测的Windows机器:

32位的windows机器:NSCP-0.4.1.101-Win32.msi。需要注意的是,本人安装后期的NSCP-0.4.2.17-Win32.msi版本,出现很多监测项失败,如C分区的使用情况监测项无法监测。

64位的windows机器:NSCP-0.4.1.101-x64.msi

待监测的centos系统上的Oracle数据库除了安装nagios-plugins-1.4.16.tar.gz和nrpe-2.14.tar.gz之外,如果要监测Oracle数据库表空间,还需要安装:

check_oracle_health-1.7.8.1.tar.gz

DBD-Oracle-1.64.tar.gz

DBI-1.627.tar.gz


Nagios服务器软件安装

Nagios服务器要实现对所有的待监测服务器发送监测通知,因此,负荷会随着待监测设备的增加而增加。本次待监测设备数量也不少,而且也没有单独的服务器承担这个角色。对所有的服务器经过删选后,选取192.168.50.22这台负载比较轻的服务器,作为Nagios服务器。

1.1 端口使用情况

根据Nagios的官方文档,Nagios使用以下端口号:

clip_p_w_picpath004

确认centos系统所有的服务器端口号未被使用:

#lsof -i:5666

提醒下,在Windows待监控的机器安装NSCP程序,使用的端口号为:12489。也要确认该端口号未被使用:

C:\>netstat -a

1.2 Nagois软件安装
1.2.1 nagios-3.5.0安装

1, 下载nagios-3.5.0.tar.gz

http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.5.0/nagios-3.5.0.tar.gz/download

2, 检查依赖包是否都已经安装,如果尚未安装,测根据centos操作系统包安装的方法进行安装。检查httpd、php、gcc、glibc、glibc-common、gd、gd-devel,以及net-snmp、net-snmp-utils是否都已经安装上。以下命令检查httpd是否已经安装,其他包检查方法类似:

#rpm -qa|grep httpd

这里发现php没有安装,到centos安装盘中找到 php-common-5.1.6-32.el5.i386.rpm php-cli-5.1.6-32.el5.i386.rpm和 php-5.1.6-32.el5.i386.rpm,使用“rpm -ivh 文件名”进行安装,如:

rpm -ivh php-common-5.1.6-32.el5.i386.rpm

如果服务器是连到internet的话,也可以用yum安装:

yum -y install httpd php gcc glibc glibc-common gd gd-devel net-snmp net-snmp-utils mysql mysql-server mysql-devel openssl


说明下:这里安装mysql是为了下面将监测的数据写入到mysql数据库,以便cacti能够显示。如果不用cacti的话,就不需要安装mysql。本人经过尝试,发现cacti其实也没什么用。还不如安装Pnp来显示监测的趋势图。不过起先为了了解cacti,还是进行了详细的安装。

主要注意的是:

在mysql数据库中,只有nagios_hosts表以及由这个表自动生成的npc_hosts表中有数据时,cacti中的npc才能够显示nagios获取到的服务器各项监测数据。本人在安装完Ndoutils插件后,这个表的数据始终没有插入。后来安装centos5.8 64位操作系统,全部用同样的安装方法,这个表就有数据,而且cacti也能够正常显示数据了。

网上也有资料说使用mysql源代码进行安装,如果出现这个表没有数据,则可以尝试下使用源代码安装mysql。本人在centos6.4 64位操作系统上使用mysql源代码安装,nagios就能成功的将数据写入nagios_hosts表。

因为需要使用snmp协议监测交换机,因此还要安装net-snmp、net-snmp-utils。如果未安装这两个包,则nagios的插件check_snmp不会生成。如果在首次尚未安装这两个包,则需要重新编译nagios插件包并进行安装。编译并安装插件包后,check_snmp文件就会生成。

3, 创建用户

#useradd -m nagios

passwd nagios

groupadd nagcmd

usermod -a -G nagcmd nagios

usermod -a -G nagcmd apache

4, 安装nagios

#tar zxvf nagios-3.5.0.tar.gz

#cd nagios-3.5.0

#./configure --with-command-group=nagcmd --prefix=/usr/local/nagios --with-gd-lib=/usr/local/lib --with-gd-inc=/usr/local/include

#make all && make install

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

#chown -R nagios.nagios /usr/local/nagios (这个命令可以在最后全部搞定后执行)

#make install-webconf

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

输入密码如:admin

#service httpd restart

在ie上使用http://192.168.50.22/nagios,输入nagiosadmin以及刚才创建的密码就能登录nagios主页了。当然,此时nagios什么都做不了。

5, 配置nagios

1) 修改contacts.cfg

将contacts.cfg文件中的最后4行注销掉,因为本次安装不需要对外发送通知信息:

#vi /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

service_notification_period 24x7

host_notification_period 24x7

service_notification_options w,u,c,r

host_notification_options d,u,r

# service_notification_commands notify-service-by-email,notify-service-by-fetion

# host_notification_commands notify-host-by-email,notify-host-by-fetion

# pager 10086

# email nagios@localhost ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

}

2) 修改nagios.cfg

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

# You can specify individual object config files as shown below:

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

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

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

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

# Definitions for monitoring the local (Linux) host

#cfg_file=/usr/local/nagios/etc/objects/localhost.cfg #所有的监测文件都放到servers文件夹中

# Definitions for monitoring a Windows machine

#cfg_file=/usr/local/nagios/etc/objects/windows.cfg

# Definitions for monitoring a linux machine

#cfg_file=/usr/local/nagios/etc/objects/linux.cfg

# Definitions for monitoring a router/switch

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

# Definitions for monitoring a network printer

#cfg_file=/usr/local/nagios/etc/objects/printer.cfg

# You can also tell Nagios to process all config files (with a .cfg

# extension) in a particular directory by using the cfg_dir

# directive as shown below:

#创建/usr/local/nagios/etc/servers文件夹,所有服务器的监测文件都放在这里

cfg_dir=/usr/local/nagios/etc/servers

#cfg_dir=/usr/local/nagios/etc/printers

#创建/usr/local/nagios/etc/switches文件夹,所有交换机的监测文件都放在这里

cfg_dir=/usr/local/nagios/etc/switches

#cfg_dir=/usr/local/nagios/etc/routers

# interval_length改成1,以1秒为单位进行监测。真正的监测时间是监测文件中的数值×1,如监测文件中的“check_interval 5”,表示监测项是5×1=5秒监测一次:

interval_length=1

# command_check_interval改成10。具体意思参考本文最后部分“配置文件解释”:

command_check_interval=10s

#command_check_interval=-1

这个参数本项目可以改成0,即所有的通知都不发,或者在每个监测的文件中定义也行:

enable_notifications=0

修改成符合自己查看的日期格式:

date_format=iso8601

3) 创建两文件夹

#su - nagios

$mkdir -p /usr/local/nagios/etc/servers

mkdir -p /usr/local/nagios/etc/switches

6, 创建nagios服务

#chkconfig --add nagios

chkconfig nagios on

7, 检查配置文件

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

如果通过,则可以启动nagios服务。

8, 启动nagios服务:

#service nagios start

service httpd restart

如果httpd报错,则修改下默认的配置文集:

#vi /etc/httpd/conf/httpd.conf

增加ServerName(这里,增加了ServerName 192.168.50.22:80):

#ServerName www.example.com:80

ServerName 192.168.50.22:80

这样,重新启动就不会报错了。

如果nagios.cfg中没有注销掉cfg_file=/usr/local/nagios/etc/objects/localhost.cfg,此时,就能看到本机的一些监测项了!不过,监测项都有问题,提示监测命令找不到,这个问题就是现在还没有安装nagios插件所致,根据以下两节安装nrpe和插件。

1.2.2 nrpe-2.14安装

1, openssl安装

nagios服务器与待监测机器通过nrpe实现监测的数据可以通过ssl加密方式进行传输,因此,服务器和待监测机都要安装openssl。请检查nagios服务器以及被监测机器是否安装了openssl,如果尚未安装,则可以到centos安装盘上找openssl以及openssl-devel相应的rpm文件进行安装。

如果没有安装,则nagios服务器在监测待监测机器时,会报ssl握手失败的信息,完成不了监测的任务。

2, 插件安装

#tar -zxvf nrpe-2.14.tar.gz

#cd nrpe-2.14

#./configure --enable-ssl --with-ssl-lib

#make all && make install-plugin && make install-daemon && make install-daemon-config

3, 配置

在commands.cfg中定义nrpe这个外部构件,增加如下几行。

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

# 'check_nrpe' command definition

define command{

command_name check_nrpe

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

}

下面的图上还能看到check_nt。这里先解释下,默认的命令中没有-s 111111,这个6个1是windows中安装NSCP-0.4.1.101-Win32.msi时输入的密码。

clip_p_w_picpath006

1.2.3 nagios-plugins安装

# tar -zxvf nagios-plugins-1.4.16.tar.gz

#cd nagios-plugins-1.4.16

#./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios

#make && make install

#chown -R nagios.nagios /usr/local/nagios/

#chown -R nagios.nagios /usr/local/nagios/libexec/


1.2.4 host组创建

我们这里要监测的设备很多,最好根据他们在系统中的角色给他们划分到组。比如2台内部交换机可以是一个交换机组;4vss视频服务器是一个组;4台录制 服务器是一个组;6cdn是一个组。

我们在 /usr/local/nagios/etc/objects/ 文件夹中创建组文件:

[root@server nagios]# cd /usr/local/nagios/etc/objects/

[root@server objects]# vi hostgroups.cfg


define hostgroup{

hostgroup_name cdn-group

alias cdn-hosts

# members 50.31_cdn1,50.32_cdn2,50.33_cdn3,50.34_cdn4,50.35_cdn5,50.36_cdn6

}


define hostgroup{

hostgroup_name vss-group

alias vss-hosts

# members 50.41_vss1,50.42_vss2,50.43_vss4,50.44_vss4

}


define hostgroup{

hostgroup_name tss-group

alias tss-hosts

# members 50.51_tss1,50.52_tss2,50.53_tss3,50.54_tss4

}


这里,我们将组中的成员members注释掉,等组成员的cfg配置文件建立好后,再一个个将host加进来。否则nagios server启动就会报找不到host的错误。

1.2.5 父类继承创建

我们大部分的设备都是连接在两台内部交换机上,因此,可以认为接在这两台交换机下的服务器,都可以看作他的子类。因此,我们可以创建两个模板类,这两个模板的父类分别为一台交换机;而交换机下的服务器都从这个模板继承。这样,就达到了我们的目的。我们在 /usr/local/nagios/etc/object/templates.cfg添加两个模板类:

[root@server objects]# vi templates.cfg

define host{

name linux-vod-sw

use generic-host ; The name of this host template

check_period 24x7

check_interval 5

retry_interval 1

max_check_attempts 10

check_command check-host-alive

icon_p_w_picpath linux40.png

statusmap_p_w_picpath linux40.gd2

parents 50.252_VodSw

process_perf_data 1 ; Process performance data

action_url /pnp4nagios/graph?host=$HOSTNAME$'class='tips'rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=_HOST_

register 0

}


define host{

name linux-anyview-sw

use generic-host ; The name of this host template

check_period 24x7

check_interval 5

retry_interval 1

max_check_attempts 10

check_command check-host-alive

icon_p_w_picpath linux40.png

statusmap_p_w_picpath linux40.gd2

parents 50.253_AnyviewSw

process_perf_data 1 ; Process performance data

action_url /pnp4nagios/graph?host=$HOSTNAME$'class='tips'rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=_HOST_

register 0

}


几个参数解释下:

name :模板名称,以后所有创建的host配置文件都“use”这个名字,即都从这个名字继承;

icon_p_w_picpathstatusmap_p_w_picpath:是两个图,一个是png格式,一个是gd2格式,这两个图是在nagiosmap中显示的,如果没有的话,在map中所有的图都是很难看的默认的?图形。后面还会详细介绍。

parents :即这个模板的父亲,由于现在两个交换机的配置文件尚未建立,因此nagios启动会失败。最好是先将这两个交换机的配置文件先建好,可以参考下面的交换机配置一节;要么先将这个parents注释掉;

process_perf_data:表示要记录获取的监测到的数据;

action_url:可以让监测项根据记录的数据画出趋势图;这两个参数会在pnp画趋势图一节详细介绍。


至此,服务器端的软件安装完毕。等待监控机器的nagios插件以及nrpe插件安装完毕后,在服务器端还需要配置监测待监测服务器的配置文件。