第1章 nagios监控工具介绍及原理

1.1nagios监控工具介绍与优势

Nagios是一款开源的网络及服务的监控工具,其功能强大,灵活性强。能有效监控Window,LinuxUnix的主机各种状态信息,交换机、路由器等网络设置,主机端口及URL服务等。根据不同业务故障界别发出告警信息给管理员,当故障恢复时也会发出恢复消息。

Nagios服务端可以在linux和类unix的系统上运行,目前无法再windows上运行。

官方网站地址:http://www.nagios.org/

官方快速安装说明:http://nagios.sourceforge.net/docs/3_0/quickstart-fedora.html

Nagios的特点:

01)监控网络服务(SMTPPOP3HTTPTCPPING等);

02)监控主机资源(CPU、负载、IP状况,虚拟及正式内存及磁盘利用率等);

03)简单的插件设计模式使得用户可以方便定制符合自己的服务的检测方法;

04)并行服务检查机制;

05)几倍定义网络分层结构的能力,用“parent”主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;

06)当服务或主机问题产生于解决时将告警发送给联系人(mail/im/sms/sound)

07)具备定义时间句柄功能,它可以在主机或服务的时间发生时获取更多问题定位;

08)自动的日志回滚;

09)可以支持并实现对主机的冗余监控;

10)可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等。

1.2Nagios监控系统家族成员构成

Nagios监控一般由一个主程序(Nagios一个插件程序(Nagios-plugin和一些可选的附加程序(NRPENSClient++NSCA、和NDOUtils等)。

Nagios本身就是一个监控的平台而已,其具体的监控工作都是通过插件(也可以自己编写)来实现的,因此,Nagios主程序和Nagios-plugins插件都是Nagios服务端必须要安装的程序组件,Nagios-plugins一般也要安装于被监控端。几个附加程序的描述如下:

1、NRPE

位置:此软件工作于被监控端,一般为linux/unix系统

用途:用于在被监控的远程Linux/Unix主机上执行脚本插件以实现对这些主机资源的监控。

2、NSClient++:

位置:此软件工作于windows系统的被监控端

作用:用于监控Window主机时安装在Windows主机上的组件,功能相当于linux下的NRPE

3、NDOUtils:(不推荐用)

位置:此软件工作于服务器端

作用:用于将Nagios的配置信息和各event产生的数据存入数据库以实现对这些数据的检索和处理。

4、NSCA

位置:此软件需要同时安装在nagios服务器端和客户端

作用:用于被监控的远程Linux/Unix主机主动将监控信息发送给Nagios服务器(在分布式监控集群模式中会用到)

第2章 Nagios服务端安装

2.1 nagios准备部分

2.1.1 服务器规划表

Nagios服务器端

一台

监控服务器

NFS客户端

两台

被监控的服务端

说明:总共需要2台服务器完成本次搭建

2.1.2 主机IP规划表

服务器说明

IP地址

主机名称规则

Nagios服务器端

172.16.1.61/24

m01

Nagios客户端

172.16.1.31/24

nfs01

Nagios客户端

172.16.1.8/24

web01

2.1.3 主机名解析

172.16.1.61    m01

172.16.1.31    nfs01

172.16.1.8     web01

2.2 安装环境

2.2.1 系统版本

[root@server ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@server ~]# uname -r
2.6.32-431.el6.x86_64
[root@server ~]# uname -m
x86_64

2.2.2 NFS软件版本

2.3 服务端安装

2.3.1解决perl编译问题(均需要)

后面编译的软件有perl程序,这里要提前设置下环境变量(不修改安装PNP时会报错)

echo 'export LC_ALL=C' >> /etc/profile
tail -1 /etc/profile
source /etc/profile
echo $LC_ALL
cd ~

2.3.2系统优化项(均需要)

  关闭防火墙

/etc/init.d/iptables stop
chkconfig iptables off

  关闭selinux

setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g'/etc/selinux/config

 时间同步

/usr/sbin/ntpdate pool.ntp.org
echo '*/10 * * * *  /usr/sbin/ntpdate pool.ntp.org &>/dev/null'>> /var/spool/cron/root
crontab -l

2.3.3安装nagios所需基础软件包

yum -y install gcc glibc glibc-common
yum -y install gd gd-devel
yum -y install mysql*
yum -y install httpd php php-gd
yum -y install openssl-devel

2.3.4创建nagios需要的用户及组

/usr/sbin/useradd -s /sbin/nologin nagios
groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd apache    #<==yum安装自动创建apache,否则手动创建
id -n -G nagios
id -n -G apache

2.3.5软件包下载地址

http://sourceforge.net/projects/nagios/files

 

2.3.6安装nagios

tar -zxvf nagios-3.2.1.tar.gz
cd nagios-3.2.1
./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-commandmode
make install-config

2.3.7安装nagios web配置文件及创建登录用户

  安装nagios web配置文件

cd /usr/local/src/nagios-3.2.1
make install-webconf

  创建nagios登录用户

[root@m01 nagios-3.2.1]# htpasswd -c/usr/local/nagios/etc/htpasswd.users oldboy
New password:
Re-type new password:
Adding password for user oldboy
[root@m01 nagios-3.2.1]# cat/usr/local/nagios/etc/htpasswd.users
oldboy:mNNaAzgat77Sw

注:可使用htpasswd -bc /usr/local/nagios/etc/htpasswd.users oldboy 123456 不用交互式输入密码

2.3.8邮件报警地址修改

vim /usr/local/nagios/etc/objects/contacts.cfg  +35行,修改如下:

email                           **********@qq.com

快速修改:

sed -i 's#nagios@localhost#**********@qq.com#g'/usr/local/nagios/etc/cgi.cfg

开启邮件服务:

yum -y install sendmail
/etc/init.d/sendmail start   #<==如果启动慢,修改hosts的127.0.0.1对应主机
lsof -i :25
chkconfig sendmail --level 3 on

2.3.9启动apache服务

/etc/init.d/httpd start
netstat -lntup |grep 80
echo '/etc/init.d/httpd start' >>/etc/rc.local

2.3.10安装服务端插件

cd /usr/local/src
tar -zxvf nagios-plugins-2.2.1.tar.gz
cd nagios-plugins-2.2.1
./configure --with-nagios-user=nagios--with-nagios-group=nagios --enable-perl-moudles
make  #<==此编译遇到make:*** [all] Error 2, configure后加--with-mysql=/usr/local/mysql
echo $?
cd ..
ls /usr/local/nagios/libexec/ | wc -l

2.3.11添加nagios服务开机自启动

chkconfig nagios --level 3 on
echo '/etc/init.d/nagios start'>> /etc/rc.local
/etc/init.d/nagios checkconfig   #<==可改/etc/init.d/nagios+177,去掉>/dev/null,打印输出
/usr/local/nagios/bin/nagios -v/usr/local/nagios/etc/nagios.cfg
/etc/init.d/nagios start
ps -ef |grep nagios

2.3.12安装NRPE

cd /usr/local/src
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 ..
ls -l /usr/local/nagios/libexec/check_nrpe

第3章 客户端安装

nagios服务端相比,nagios客户端不需要安装如下内容:

1、nagios客户端无需安装lamp环境

2、客户端无需安装nagios

3.1客户端添加用户

/usr/sbin/adduser -s /sbin/nologin -M nagios
id nagios

3.2安装客户端插件

cd /usr/local/src
tar -zxvf nagios-plugins-2.2.1.tar.gz
cd nagios-plugins-2.2.1
./configure --with-nagios-user=nagios --with-nagios-group=nagios--enable-perl-moudles
make
make install
ls /usr/local/nagios/libexec/ | wc -l
55

3.3安装客户端NRPE

cd /usr/local/src
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 ..
ls -l /usr/local/nagios/libexec/check_nrpe

3.4配置nrpe.cfg

cd /usr/local/nagios/etc/
cp nrpe.cfg{,.ori}

修改文件的第79行为nagios监控服务器,如果有多台,那么用逗号隔开。

sed -i's#allowed_hosts=127.0.0.1#allowed_hosts=172.16.1.61#g' nrpe.cfg
allowed_hosts=127.0.0.1     #<79行
allowed_hosts=172.16.1.61

修改配置文件的199-203行:

原:

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

修改后:

command[check_load]=/usr/local/nagios/libexec/check_load-w 15,10,5 -c 30,25,20
command[check_mem]=/usr/local/nagios/libexec/check_memory.pl-f -w 10% -c 3%
command[check_disk]=/usr/local/nagios/libexec/check_disk-w 15% -c 7% -p /
command[check_swap]=/usr/local/nagios/libexec/check_swap-w 20% -c 10%
command[check_users]=/usr/local/nagios/libexec/check_users-w 5 -c 10

注意:以上均为对负载,内存,硬盘,缓存,用户的监控,这些都是本地的服务(我们一般通过nrpe去客户端执行脚本插件获取信息),这样的模式称为被动模式,由nagios服务器端通过nrpe插件定时去clientnrpe服务定期获取信息。

3.5启动NRPE

/usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d
echo '#naigos nrpe process cmd by liutao at2017-11-14' >> /etc/rc.local
echo '/usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d' >> /etc/rc.local
tail -2 /etc/rc.local

检查启动结果

ps -ef |grep nrpe
lsof -i :5666

第4章 配置服务器端

4.1nsgios主要配置文件说明

4.1.1nagios目录

[root@m01 ~]# ll /usr/local/nagios/
total 28
drwxrwxr-x 2 nagios nagios 4096 Nov 12 23:53 bin      
drwxrwxr-x 3 nagios nagios 4096 Nov 12 23:53 etc
drwxr-xr-x 2 root   root   4096 Nov 12 23:23 include
drwxrwxr-x 2 nagios nagios 4096 Nov 12 23:53 libexec
drwxrwxr-x 2 nagios nagios 4096 Nov 12 22:46 sbin
drwxrwxr-x 10 nagios nagios 4096 Nov 12 23:23share
drwxrwxr-x 5 nagios nagios 4096 Nov 14 10:33 var

4.1.2主配置文件nagios.cfg

nagios主配置文件为nagios.cfg,默认在/usr/local/nagios/etc/目录下。/usr/local/nagios/etc目录下有个objects目录,里面放的是主配置文件nagios.cfg包含的其他的nagios配置文件。

[root@m01 etc]# tree
.
├── cgi.cfg
├── htpasswd.users
├── nagios.cfg
├── nrpe.cfg
├── objects
│   ├──commands.cfg
│   ├──contacts.cfg
│   ├── localhost.cfg
│   ├──printer.cfg
│   ├──services.cfg
│   ├──switch.cfg
│   ├──templates.cfg
│   ├──timeperiods.cfg
│   └──windows.cfg
└── resource.cfg

4.1.3多个配置文件

nagios.cfg中,既可以指定单独包含一个cfg文件,也可以指定包含一个目录,即该目录下所有的cfg文件都会包含进来。

为了目录结构看起来更清晰和批量部署服务的需要,我们把主配置文件包含的配置文件修改如下:

配置文件名称

说明

commands.cfg

存放命令相关配置(也可以执行commands目录)

services.cfg

存放服务的相关配置(默认不存在)

hosts.cfg

存放主机相关配置(默认不存在)

contacts.cfg

存放报警联系人相关配置

timeperiods.cfg

存放报警周期时间等相关配置

templates.cfg

模板配置文件

4.2配置前准备

4.2.1备份初始配置文件

cd /usr/local/nagios/
tar zcvf etc.tar.gz ./etc/

4.2.2配置nagios.cfg

vim nagios.cfg +34  增加如下两行

cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/services.cfg

注释如下一行:

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

4.2.3增加配置文件

  hosts.cfg

cd /usr/local/nagios/etc/objects
head -51 localhost.cfg > hosts.cfg
chown -R nagios.nagios hosts.cfg

  services.cfg

cd /usr/local/nagios/etc/objects
touch services.cfg
chown -R nagios.nagios services.cfg

4.3nagios的监控模式定义

按照监控的行为来看,可以吧Nagios的监控分为主动监控和被动监控。

主动监控:把对于像URL监控这样的一般由服务器端发出请求主动探测就可以得到数据的监控方式,定义为主动监控方式,也就是说不需要在客户端安装任何插件。当然,主动模式也可以配置成为被动模式。

被动监控:把对负载,内存,硬盘,虚拟内存,磁盘IP等的监控,这些都是本地的资源,非系统对外提供的服务,这种资源的监控是由nagios服务端通过nrpe插件定时去连接clientnrpe服务,然后定期获取信息发回到服务端。这样的监控模式称之为被动监控。

如何选择主动模式和被动模式?

1)对于本地资源性能等的监控,一般用被动模式,例如:对负载,内存,硬盘,虚拟内存,磁盘IO等的监控;

2)对于WEB服务这种能对外提供服务的监控,一般用主动模式,例如:http,ssh,mysql等的服务;

4.4hosts.cfg配置

  添加主机和主机组

define host{
       use                    linux-server         
       host_name               web01
       alias                   web01
       address                 172.16.1.8
        }
define host{
       use                    linux-server
       host_name               nfs01
       alias                   nfs01
       address                172.16.1.31
        }
define hostgroup{
       hostgroup_name  linux-servers
       alias           Linux Servers
       members         web01,nfs01
        }

4.5services.cfg配置

  配置services.cfg

define service {
       use                    generic-service
       host_name              web01,nfs01
       service_description     DiskPartition
       check_command           check_nrpe!check_disk
       max_check_attempts      8
       normal_check_interval   3
       retry_check_interval    2
       check_period            24x7
       notification_interval   3
       notification_period     24x7
       notification_options    w,u,c,r
        contact_groups          admins
       process_perf_data       1
        }

4.6check_nrpe!check_disk的说明

  check_nrpe

是在配置文件/usr/local/nagios/etc/objects/commands.cfg里面定义的,默认不存在,需要自己定义。与其类似的还有check_tcpcheck_http等。

  check_disk

check_disk是在配置文件/usr/local/nagios/etc/nrpe.cfg里面定义的,定义如下:

command[check_disk]=/usr/local/nagios/libexec/
check_disk
 -w $ARG1$ -c $ARG2$ -p $ARG3$

注意:红色标记的check_disk其实是插件名

 

4.7commands.cfg配置

services.cfg配置完成之后,使用/etc/init.d/nagios chkconfig检查,会有报错,因为check_nrpe未定义,需要在commads文件里定义

在文件末尾填入如下内容

#'check_nrpe' command definition
define command{
       command_name    check_nrpe
       command_line    $USER1$/check_nrpe-H $HOSTADDRESS$ -c $ARG1$
        }

检查/etc/init.d/nagioschkconfig,未报错

平滑重启nagios服务端

/etc/init.d/nagios reload

4.8cgi.cfg配置

配置访问nagios用户的权限,共有7处:

cd /usr/local/nagios/etc
vim cgi.cfg +119
authorized_for_system_information=nagiosadmin    #<==默认配置(7处)
:g/nagiosadmin/s//oldboy
authorized_for_system_information=oldboy

4.9手动检测

通过如下命令,可以检测插件和nrpe命令是否可用。

/usr/local/nagios/libexec/check_nrpe-H 172.16.1.8 -c check_disk
DISK OK - free space: / 15033 MB (88.26%inode=94%);| /=1999MB;15252;16687;0;17944

第5章 主动模式监控

5.1端口监控(rsync:873)

  使用插件

/usr/local/nagios/libexec/check_tcp
/usr/local/nagios/libexec/check_tcp -H 172.16.1.8-p 5666

  配置监控

cd /usr/local/nagios/etc/objects/services
cat rsync.cfg
define service {
       use                    generic-service
       host_name              web01,nfs01
       service_description     RSYNC_873
       check_command           check_tcp!873
        }

5.2ping服务

  使用插件

/usr/local/nagios/libexec/check_ping

  配置监控

define service {
       use                    generic-service
       host_name              web01,nfs01
       service_description     PING
       check_command          check_ping!100.0,20%!500.0,60%
        }

5.3检测URL

  使用插件

/usr/local/nagios/libexec/check_http
/usr/local/nagios/libexec/check_http -H172.16.1.8
 
define service {
       use                    generic-service
       host_name               web01
       service_description     check_url
       check_command          check_http!-H 172.16.1.8
        }

第6章 图形显示

pnp出图软件官方站点为:http://www.pnp4nagios.org

6.1安装依赖软件

软件:libart_lgpl-2.3.17.tar.gzrrdtool-1.2.14.tar.gz

yum安装基础pnp软件需要的包

yum -y install cairo pango zlib zlib-develfreetype freetype-devel gd gd-devel

  编译安装rrdtool依赖包libart

wget http://ftp.gnome.org/pub/gnome/sources/libart_lgpl/2.3/libart_lgpl-2.3.17.tar.gz
cd /usr/local/src
tar -zxvf libart_lgpl-2.3.17.tar.gz
cd libart_lgpl-2.3.17
./configure
make
make install

后面容易报错,还是直接yum安装吧!!

yum -y install libart_lgpl-devel
yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker  #<==后面perl编译有问题再安装

  编译安装rrdtools

wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.2.14.tar.gz
cd /usr/local/src
tar -zxvf rrdtool-1.2.14.tar.gz
cd rrdtool-1.2.14
./configure --prefix=/usr/local/rrdtool--disable-python --disable-tcl
make
make install
ls /usr/local/rrdtool/bin/

6.2安装出图软件pnp-0.4.14

软件:pnp-0.4.14.tar.gz

下载:

wget http://downloads.sourceforge.net/project/pnp4nagios/PNP/pnp-0.4.14/pnp-0.4.14.tar.gz--no-check-certificate
cd /usr/local/src
tar -zxvf pnp-0.4.14.tar.gz
cd pnp-0.4.14
./configure --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
ll /usr/local/nagios/libexec/ | grep process

6.3出图的相关配置

  配置nagios.cfg文件

vim /usr/local/nagios/etc/nagios.cfg +833
process_performance_data=1                       #<==0改1
host_perfdata_command=process-host-perfdata      #<==取消注释
service_perfdata_command=process-service-perfdata#<==取消注释

  配置comnmand.cfg文件

vim /usr/local/nagios/etc/objects/commands.cfg+225,替换原来的配置如下

删除如下:

define command{
       command_name   process-host-perfdata
       command_line    /usr/bin/printf"%b""$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n">> /usr/local/nagios/var/host-perfdata.out
        }
 
 
# 'process-service-perfdata' command definition
define command{
       command_name   process-service-perfdata
       command_line    /usr/bin/printf"%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n">> /usr/local/nagios/var/service-perfdata.out
        }

  替换结果

# 'process-host-perfdata' command definition
define command{
       command_name   process-host-perfdata
       command_line    /usr/local/nagios/libexec/process_perfdata.pl  
        }
# 'process-service-perfdata' command definition
define command{
       command_name   process-service-perfdata
       command_line    /usr/local/nagios/libexec/process_perfdata.pl  
        }
/etc/init.d/nagios checkconfig
/etc/init.d/nagios reload

6.4出图地址整合

****/nagios/pnp/index.php

是否出图的参数:

process_perf_data               1    #<==1表示出图,模板或服务里加

6.4.1配置服务记录抓取数据

  服务出图记录数据设置

vi services.cfg
process_perf_data               1    #<==1表示出图,模板或服务里加

  主机里面也需要配置

vim /usr/local/nagios/etc/objects/hosts.cfg    #<==linux-server

在模板配置文件里面的linux-server里面加如下内容:

       process_perf_data               1

6.4.2配置主机出图

vim /usr/local/nagios/etc/objects/hosts.cfg

host主机配置里增加如下配置(或者模板)

       action_url             /nagios/pnp/index.php?host=$HOSTNAME$

6.4.3配置服务出图

在服务的配置模板里面增加如下内容:

      action_url             /nagios/pnp/index.php?host=$HOSTNAME$&serv=$SERVICEDESC$