Nagios是一款用来监视系统和网络的开源应用软件。

利用其众多的插件实现对本机和远端服务的监控,当被监控对象异常时,会及时向管理员报警,用户可以直接调用插件,也可以自定义shell脚本来监控服务;可通过web页面显示对象状态,日志,报警信息。

1 搭建Nagios监控服务器

(1)部署Nagios服务运行环境

[root@ser56 ~]# yum -y install httpd php

[root@ser56 ~]# systemctl start httpd

[root@ser56 ~]#yum -y install gcc gcc-c++

[root@ser56 ~]# useradd nagios

[root@ser56 ~]# groupadd nagcmd

[root@ser56 ~]# usermod -G nagcmd nagios

(2)安装Nagios软件

[root@ser56 ~]#tar -xf nagios-4.2.4.tar.gz

./configure --help

[root@ser56 nagios-4.2.4]#./configure              

--with-nagios-user=nagios 

--with-nagios-group=nagcmd  

--with-command-user=nagios  

--with-command-group=nagcmd

[root@ser56 nagios-4.2.4]# make all             #编译

[root@ser56 nagios-4.2.4]# make install        #安装

[root@ser56 nagios-4.2.4]# make install-init  #安装控制脚本

[root@ser56 nagios-4.2.4]# make install-commandmode  #调配置文件的访问权限

[root@ser56 nagios-4.2.4]# make install-config        #安装配置 

[root@ser56 nagios-4.2.4]# make install-webconf    #部署网站配置

[root@ser56 nagios-4.2.4]# make install-exfoliation  #web页面格式

安装默认位置:/usr/local/nagios

(3)安装监控插件

[root@ser56 nagios]# tar -xf nagios-plugins-2.1.4.tar.gz

[root@ser56 nagios-plugins-2.1.4]# ./configure

[root@ser56 nagios-plugins-2.1.4]# make

[root@ser56 nagios-plugins-2.1.4]# make install

插件存放位置:/usr/local/nagios/libexec/

(4)启动监控服务

[root@ser56 ~]# /etc/init.d/nagios start

[root@ser56 ~]# /etc/init.d/nagios status

[root@ser56 ~]# vim /etc/httpd/conf.d/nagios.conf

在该文件内定义了目录别名以及用户认证

39行:Alias /nagios "/usr/local/nagios/share"  #定义目录别名位置

52行:AuthUserFile /usr/local/nagios/etc/htpasswd.users   #登录的用户名密码存放位置

为Nagios平台添加Web管理用户

[root@ser56 ~]# htpasswd -c  /usr/local/nagios/etc/htpasswd.users nagiosadmin  #该用户必须是此名称

[root@ser56 ~]# cat /usr/local/nagios/etc/htpasswd.users 

nagiosadmin:$apr1$QXl/iLJm$lFPRZ69PLrlvKmsFP6I6J1

此时重启httpd服务,重新加载/etc/httpd/conf.d/nagios.conf配置文件

firefox http://192.168.4.56/nagios

输入帐号和密码进入nagios首页

因为在/etc/httpd/conf.d/nagios.conf配置文件中定义了别名,首页的真正位置在/usr/local/nagios/share下

(5)查看监控信息

①默认监控服务:cpu, Current Users, HTTP, PING, 根, ssh, swap, 进程

CPU负载                 check_load

系统登录用户数量   check_users

网站服务运行状态   check_http

PING                       check_ping

根分区空闲空间       check_disk

ssh服务                   check_ssh

交换分区使用量       check_swap

系统总进程数量       check_procs

②监控显示状态:

ok:正常, warning:警告, unknown:监控配置错误, critical:报错, pending:监控中

nagios服务监控过程?

服务运行时,自动调用监控插件,将获取到的数据和插件的阀值做比较并返回监控状态信息。调用插件时,可以定义警告值和错误值。


2 配置Nagios监控服务

2.1 配置文件说明

(1)路径:/usr/local/nagios/etc下

(2)主配置文件:nagios.cfg  #服务启动加载文件

验证配置是否有错误: 

[root@ser56 etc]# /usr/local/nagios/bin/nagios  -v  /usr/local/nagios/etc/nagios.cfg

(3)宏定义文件:resource.cfg (设置nagios服务使用的变量)

(4)cgi.cfg  #定义CGI文件访问权限

什么时cgi文件?ls /usr/local/nagios/sbin/路径下有很多.cgi文件

开发者写好的脚本,用来设置那些用户有权限访问文件,允许登录的用户名(nagiosadmin)在此文件中配置。

(5)objects目录下:

localhost.cfg       #监控本机配置文件

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

define host{                      #定义监控主机

use  linux-server              #定义监控主机使用的模版

host_name  localhost      #定义主机名,网页面可以看到

alias        localhost          #定义描述信息 可选项

address    127.0.0.1       #被监控主机的IP地址

}

define service{               #定义监控主机资源

use  local-sever             #监控资源使用的模板

host_name     localhost

service_description   Root Partition       #设置监控资源显示名称

check_command      check_local_disk!20%!10%!/      #调用的监控命令 和localhost.cfg文件中commands.cfg相对应

}

 

commands.cfg #定义监控命令

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

define command{

        command_name    check_local_disk     #命令名称,和check_command相对应

        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$   #调用监控插件 -w警告值,-c错误值 -s 状态 -p 监控哪个分区

        }


-s 状态:R(运行)  Z(僵尸进程)

templates.cfg     定义监控模版配置文件

timeperiods.cfg   定义监控时间模版配置文件

contacts.cfg       指定接收监控报警消息邮箱地址


案例:监控本机的根分区使用情况

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

define service{

        use                   local-service

        host_name            localhost

        service_description    boot

        check_command       check_disk

}

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

define command{

        command_name    check_disk

        command_line       $USER1$/check_disk -w 50%  -c 25% -p /boot

        }

 

2.2 监控插件使用

(1)插件所在位置:

/usr/local/nagios/libexec

(2)插件帮助信息查看:

[root@ser56 libexec]#./check_users --help

[root@ser56 libexec]# dd if=/dev/zero of=/boot/a.txt  bs=1M  count=250   #模拟占用/boot分区的大小

[root@ser56 libexec]# ./check_procs -w 10 -c 12            #查看所有的进程

[root@ser56 libexec]# ./check_procs -w 20 -c 22  -s Z    #僵尸进程的状态  -s R 运行的中的进程

 

2.3监控远端主机

(1)监控主机的配置步骤:

①定义监控命令 

[root@ser56 ~]# vim /usr/local/nagios/etc/objects/commands.cfg 

②创建监控主机的配置文件

[root@ser56 ~]# grep -v '^#' /usr/local/nagios/etc/objects/localhost.cfg  > /usr/local/nagios/etc/objects/ser51.cfg

③在主配置文件加载监控主机的配置文件

[root@ser56 ~]# vim /usr/local/nagios/etc/nagios.cfg

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

④检查配置是否有错

⑤重启监控服务

⑥访问web页面查看监控信息的状态

⑦若监控项有警告状态或严重错误状态的,查看是否收到报警

 

2.4 监控远端主机的公有资源

/usr/local/nagios/libexec/check_http -H 192.168.4.51 -p 80

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

define command{

        command_name    check_51_http

        command_line    $USER1$/check_http -H 192.168.4.51 -p 80

        }

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

define host{

        use                    linux-server      #监控时使用的模版 

        host_name        server51          #监控页面显示的名称

        alias                   localhost         #描述信息,可以不写

        address             192.168.4.51   #监控远端的主机

        }

 

define service{

        use                                local-service

        host_name                   server51

        service_description      HTTP     #监控页面显示的监控项描述

        check_command          check_51_http

        notifications_enabled    0

        }

 

2.5 监控远端主机的私有资源

(1)配置被监控端

①安装获取私有资源的插件

[root@ser51 nagios]# tar -xf nagios-plugins-2.1.4.tar.gz 

[root@ser51 nagios]# ./configure && make && make install

[root@ser51 ~]#ls /usr/local/nagios/

②运行nrpe

nrpe调用本地的插件收集私有资源状态,通过5666端口发送给监控服务器。监控服务器安装连接nrpe的插件。

[root@ser51 ~]#yum -y install openssl-devel  openssl

[root@ser51 ~]#useradd nagios

[root@ser51 ~]#tar -xf nrpe-3.0.1.tar.gz

[root@ser51 ~]#./configure && make all

 

[root@ser51 ~]#make install-daemon        #守护进程

[root@ser51 ~]# ls /usr/local/nagios/bin/    #安装上一步多出的

[root@ser51 ~]#make install-config           #配置文件

[root@ser51 ~]#make install-init                #启动服务

[root@ser51 ~]#make install-plugin           #连接工具(测试)

主配置文件:

[root@ser51 ~]# vim /usr/local/nagios/etc/nrpe.cfg

command[nrpe_51_users]=/usr/local/nagios/libexec/check_users -w 1 -c 2

command[nrpe_51_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200   #自定义监控本机

allowed_hosts=127.0.0.1, 192.168.4.56  #除了本机也允许其它连接nrpe

[root@ser51 ~]# systemctl start nrpe

[root@ser51 ~]# systemctl enable nrpe

[root@ser51 ~]# netstat -anptu | grep :5666

③测试nrpe服务配置

[root@ser51 ~]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -p 5666 -c nrpe_51_users    #要和自定义的名称保持一致

(2)配置监控服务器

①安装连接nrpe服务的插件

yum -y install openssl openssl-devel

tar -xf nrpe-3.0.1

./configure && make all && make install-plugin

安装之后在该路径有:/usr/local/nagios/libexec/check_nrpe

测试:

[root@ser56 nrpe-3.0.1]# /usr/local/nagios/libexec/check_nrpe -H 192.168.4.51 -p 5666 -c nrpe_51_users

②定义监控远端主机私有资源的监控命令

[root@ser56 objects]# vim commands.cfg

define command{

        command_name    check_51_procs

        command_line       $USER1$/check_nrpe -H 192.168.4.51 -p 5666 -c nrpe_51_procs

        } #此命令调用的定义和被监控端的/usr/local/nagios/etc/nrpe.cfg中保持一致

③监控远端主机时调用定义的监控命令

vim ser51.cfg

define service{

        use                             local-service

        host_name                 ser51

        service_description    proces

        check_command       check_51_procs

       }#此定义的check_command和监控命令中的command_name 保持一致

④配置nagios服务运行时,加载监控远端主机的配置文件

2.6 监控报警

发生问题将信息以邮件的形式发送到邮箱:

grep email /usr/local/nagios/etc/object/contacts.cfg  

mail -s “test” nagios < /etc/hosts

su - nagios

mail  #查看是否收到邮件


3 Nagios工作原理

Nagios的主动模式和被动模式

被动模式:客户端起nrpe进程,服务端通过check_nrpe插件向客户端发送命令,客户端根据服务端的指示来调用相应的插件,插件可以获取到本机的相关信息,并把获取到的结果发送给服务端。因为需要调用客户端的插件去等待客户端返回的信息,所以叫做被动模式

主动模式:主动模式不需要调用客户端的插件,而是通过自己的插件主动去探测客户端的相关信息。

那么,因为主动模式和被动模式的区别这两种模式所擅长监控的服务也是不同的。

主动模式:主机死活,端口,http服务,MySQL服务等

被动模式:客户端主机的负载,硬盘空间,内存,用户登录数等