Nagios是一款开源的计算机系统和网络监视工具,可以监控Windows、Linux和Unix的主机状态,交换机路由器等网络设备,在系统或服务状态异常时发出邮件或短信报警,第一时间通知网站运维人员,在状态恢复后发出正常的电子邮件或短信通知。


1. Nagios工作原理

    Nagios的功能是监控服务和主机,但其自身并不包括这些功能,所有的监控、检测功能都是通过各种插件来完成的。安装完Nagios之后,在Nagios主目录下的/libexex里面放有Nagios自带的插件,如:check_disk是检查磁盘空间的插件,check_load是检查cpu负载的插件,每一个插件可以通过运行./check_xxx -h命令来检查其使用方法和功能。

 

2. Nagios的四种监控状态

Nagios可以识别四种状态返回信息。0(OK)表示状态正常(绿色显示),1(WARNING)表示出现警告(×××),2(CRITICAL)表示出现非常严重错误(红色),3(UNKNOWN)表示未知错误(深×××),nagios根据插件返回来的值来判断监控对象的状态,并通过web显示出来,以供管理员即时发现故障。

 

3. Nagios通过nrpe插件来远程管理服务的工作过程

(1) Nagios执行安装在它里面的check_nrpe插件,并告诉check_nrpe去检测哪些服务。

(2)通过ssl,check_nrpe连接远端机器上的NRPE daemon。

(3)NRPE运行本地的各种插件去检测本地服务器和状态(check_disk,...etc)。

(4)NRPE把检测的结果传给主机端的check_nrpe,check_nrpe再把结果送到nagios状态队列中。

(5)Nagios依次读取队列中的信息,再把结果显示出来。

 

 

案例:部署Nagios监控系统

    在目前而言,有服务器的地方就少不了监控系统,可以实时了解服务器的运行状况并能在出现问题时发出警告,使管理员及时解决问题。本案例使用三台服务器来配置Nagios监控系统,具体拓扑图如下:

杨书凡04.png


实验步骤如下:

1. 安装Nagios

[root@localhost ~]# service iptables stop 
[root@localhost ~]# useradd -s /sbin/nologin nagios
[root@localhost ~]# mkdir /usr/local/nagios
[root@localhost ~]# chown –R  nagios:nagios /usr/local/nagios
[root@localhost ~]# tar zxf nagios-4.0.1.tar.gz
[root@localhost ~]# cd nagios-4.0.1
[root@localhost nagios-4.0.1]# ./configure --prefix=/usr/local/nagios 
[root@localhost nagios-4.0.1]# make all  
[root@localhost nagios-4.0.1]# make install   //安装nagios的主程序,CGI和HTML文件    
[root@localhost nagios-4.0.1]# make install-init //在/etc/rc.d/init.d下创建启动脚本
[root@localhost nagios-4.0.1]# make install-commandmode  //配置目录权限
[root@localhost nagios-4.0.1]# make install-config     //安装nagios示例配置文件
[root@localhost nagios-4.0.1]# ls /usr/local/nagios/    
bin  etc  libexec  sbin  share  var       //各个目录结构以及功能如下图所示



2. 安装nagios插件

    Nagios提供的各种监控功能基本上是通过插件完成的

[root@localhost ~]# yum -y install openssl-devel  //监控端可被监控端需要SSL通道
[root@localhost ~]# yum -y install httpd          //可通过Web监控界面查看
[root@localhost ~]# yum -y install php            //配置Web监控界面需要PHP支持
[root@localhost ~]# tar zxf nagios-plugins-1.5.tar.gz
[root@localhost ~]# cd  nagios-plugins-1.5
[root@localhost nagios-plugins-1.5]#./configure --prefix=/usr/local/nagios
[root@localhost nagios-plugins-1.5]# make 
[root@localhost nagios-plugins-1.5]# make install

[root@localhost ~]# tar zxf nrpe-2.15.tar.bz2
[root@localhost ~]# cd nrpe-2.15
[root@localhost nrpe-2.15]#./configure
[root@localhost nrpe-2.15]#make all
[root@localhost nrpe-2.15]#make install-plugin

    为了安全,一般情况需要Nagios的Web监控界面经过授权才能访问,需要到/etc/httpd/conf.d/nagios.conf配置文件加入一些信息

[root@localhost ~]# vim /etc/httpd/conf.d/nagios.conf
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" 
<Directory "/usr/local/nagios/sbin">     
  AuthType Basic     
  Options ExecCGI     
  AllowOverride None     
  Order allow,deny     
  Allow from all     
  AuthName "Nagios Access"
  AuthUserFile /usr/local/nagios/etc/htpasswd  //此目录存放身份验证文件
  Require valid-user 
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">     
  AuthType Basic     
  Options None     
  AllowOverride None     
  Order allow,deny     
  Allow from all     
  AuthName "nagios Access"
  AuthUserFile /usr/local/nagios/etc/htpasswd     
  Require valid-user 
</Directory>
[root@localhost ~]# /usr/bin/htpasswd -c /usr/local/nagios/etc/htpasswd nagiosadmin
 New password:  (输入密码)     
 Re-type new password: (再输入一次密码)     
 Adding password for user nagiosadmin
[root@localhost ~]# cat /usr/local/nagios/etc/htpasswd  //查看认证内容
nagiosadmin:dH4sf78y9dfP9
[root@localhost ~]# service httpd start


    打开浏览器,输入http://192.168.1.10/nagios,输入用户名、密码即可


杨书凡05.png



目前只能是打开网页,很多的监控选项不能看到,如果需要监控远程的服务器,还需要做很多配置,下面开始配置。

 

 

3. Nagios监控系统的配置文件介绍

(1)Nagios的配置文件默认在/usr/local/nagios/etc/目录下

Nagios.cfg:主配置文件,定义各种配置文件的名称和位置

Cgi.cfg:控制CGI的配置文件

Resource.cfg:资源文件,定义各种变量,以便于其他文件调用

Objects:其他配置文件存放目录,此目录下主要有:

Command.cfg:命令配置文件,定义各种命令格式,以备其他文件调用

contacts.cfg:联系人和组,发邮件等告警信息时可以调用

localhost.cfg:监控本机的配置文件

timeperiods.cfg:定义监控时间的配置文件,便于其他文件调用

Hostgroups.cfg:定义监控的主机(组),需手动创建。


(2)配置文件之间的关系

    在Nagios的配置过程中涉及的几个定义有主机、主机组、服务、服务组、联系人、联系人组、监控时间和监控命令等。从这些定义可以看出,nagios各个配置文件之间互为关联、彼此引用的。成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点

a.定义监控那些主机,主机组,服务和服务组

b.定义这个监控要用什么命令实现

c.定义监控的时间段

d.定义主机或服务器出现问题时要通知的联系人和联系人祖

 

(3)配置nagios

    为了能更清楚的说明问题,同时也为了维护方便,建议将nagios各个定义的对象创建独立的配置文件。

a.创建conf目录来定义host主机

b.创建hostgroups.cfg文件来定义主机组

c.用默认的contacts.cfg文件来定义联系人和联系人组

d.用默认的commands.cfg文件来定义命令

e.用默认的timeperiods.cfg来定义监控时间段

f.用默认的templetes.cfg文件作为资源引用文件

 

 

4. 配置Nagios监控系统

1)修改主配置文件

[root@localhost ~]# mkdir /usr/local/nagios/etc/conf
[root@localhost ~]# vim /usr/local/nagios/etc/nagios.cgf  //添加两行
cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg
cfg_dir=/usr/local/nagios/etc/conf


2)添加/usr/local/nagios/etc/objects/commands.cfg(定义check_nrpe监控命令)

[root@localhost ~]# vim /usr/local/nagios/etc/objects/commands.cfg
define command{   
    command_name  check_nrpe
    command_line  $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

 


3)修改/usr/local/nagios/etc/objects/localhost.cfg(定义本机监控文件)

[root@localhost ~]# vim /usr/local/nagios/etc/objects/localhost.cfg       
define service{          
  use                      local-service       
  host_name                localhost     //主机名,在host段定义    
  service_description      Total Processes   //监控服务名称,在 Web页面显示     
  check_command            check_local_procs!250!400!RSZDT   //监控界值        
}

 

4)修改/usr/local/nagios/etc/objects/contacts.cfg(定义监控服务器联系人)

[root@localhost ~]# vim /usr/local/nagios/etc/objects/contacts.cfg
  define contact{    
  contact_name      ysf     //定义联系人名称
  alias             ysf     //别名
  service_notification_period    24x7  //监控主机服务24x7小时
  host_notification_period      24x7   //监控主机对角应用服务24x7小时
  service_notification_options    w,u,c,r    //告警级别参数
  host_notification_options       d,u,r    //定义在什么状态下发通知,分别表示宕机、不可到达、重新恢复
  service_notification_commands notify-service-by-email     //调用邮件名称
  host_notification_commands notify-host-by-email           //调用飞信名称
  email root                    //定义发送到哪个邮箱
}
define contacatgroup{
    contactgroup_name     ysf    
    alias                 ysf
    members               ysf
}


 

5)新建/usr/local/nagios/etc/objects/hostgroups.cfg(定义主机组)

[root@localhost ~]# vim /usr/local/nagios/etc/objects/hostgroups.cfg
define hosrgroup{
    hostgroup_name web    
    alias          web
    members        192.168.1.20
}
define hosrgroup{
    hostgroup_name mysql    
    alias          mysql
    members        192.168.1.30
}


6)具体监控MySQL、HTTP主机的存活、负载、进程

在/usr/local/nagios/etc/conf下面新建192.168.1.20.cfg文件和192.168.1.30.cfg

[root@localhost ~]# cd /usr/local/nagios/etc/conf/
[root@localhost ~]# vim 192.168.1.20.cfgdefine 
host{            //定义监控哪台主机
host_name 192.168.1.20
alias 192.168.1.20
address 192.168.1.20
check_command check-host-alive
max_check_attempts 5
check_period 24x7
contact_groups ysf
notification_period 24x7
notification_options d,u,r
}
define service{      //定义监控这台主机的存活
host_name 192.168.1.20
service_description check-host-alive
check_command check-host-alive
max_check_attempts 3
normal_check_interval 2
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups ysf
}
define service{      //定义这台主机进程数
host_name 192.168.1.20
service_description check-proce
check_command check_nrpe!check_total_procs
max_check_attempts 3
normal_check_interval 2
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups ysf
}
define service{       //定义这台主机进程数
host_name 192.168.1.20
service_description check-load
check_command check_nrpe!check_load
max_check_attempts 3
normal_check_interval 2
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7    
contact_groups ysf
}

    同理,在192.168.1.3.cfg的配置一样,改下IP即可


7)修改/usr/local/nagios/etc/cgi.cfg

将use-authentication=1修改为0


8)重启Nagios服务


[root@localhost ~]# service nagios restart
[root@localhost ~]# chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/ 
[root@localhost ~]# chcon -R -t httpd_sys_content_t /usr/local/nagios/share/  //如开启了selinux,需要配置以上命令


9)访问网页查看状态

杨书凡07.png





5. 配置被控端192.168.1.20、192.168.1.30(MySQL和Web)

[root@localhost ~]# yum -y install openssl openssl-devel
[root@localhost ~]# useradd -s /sbin/nologin nagios
[root@localhost ~]# tar zxf nagios-plugins-1.5.tar.gz
[root@localhost ~]# cd  nagios-plugins-1.5
[root@localhost nagios-plugins-1.5]# ./configure --prefix=/usr/local/nagios
[root@localhost nagios-plugins-1.5]# make 
[root@localhost nagios-plugins-1.5]# make install
[root@localhost nagios-plugins-1.5]# chown -R nagios:nagios /usr/local/nagios

[root@localhost ~]# tar zxf nrpe-2.15.tar.bz2
[root@localhost ~]# cd nrpe-2.15
[root@localhost nrpe-2.15]# ./configure
[root@localhost nrpe-2.15]# make all
[root@localhost nrpe-2.15]# make install-plugin
[root@localhost nrpe-2.15]# make install-daemon
[root@localhost nrpe-2.15]# make install-daemon-config

[root@localhost ~]# ps -ef | wc -l      //查看进程数,进程界值根据总进程数来进行调整
[root@localhost ~]# more /proc/cpuinfo | grep proc | wc -l  //负载是根据服务有几个CPU来调整界值的
[root@localhost ~]# vim /usr/local/nagios/etc/nrpe.cfg 
allowed_hosts=127.0.0.1,192.168.1.10     //添加监控服务器的IP地址
.
[root@localhost ~]#  /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d   //启动nrpe


    在Nagios服务器上测试nrpe运行是否正常,出现下面的信息说明正确。

[root@localhost ~]#  /usr/local/nagios/libexec/check_nrpe -H 192.168.1.20
NRPE v2.15

 

   在浏览器上访问

杨书凡08.png



也可在services.cfg文件中添加192.168.1.20.cgf文件中的参数

[root@localhost ~]# vi  /usr/local/nagios/etc/objects/services.cfg
1define service{    use         local-service
    host_name       nagios
    service_description ping
    check_command       check-host-alive
    }2define service{    use         local-service
    host_name       nagios
    service_groups      系统状况检查
    service_description 登陆用户数
    check_command       check-host-users!20!50
    }3define service{    use         local-service
    host_name       nagios
    service_groups      系统状况检查
    service_description 根分区
    check_command       check-local_disk!20%!10%!/
    }4define service{    use         local-service
    host_name       nagios
    service_groups      系统状况检查
    service_description 进程总数
    check_command       check-local_procs!250!400!RSZDT
    }5define service{    use         local-service
    host_name       nagios
    service_groups      系统状况检查
    service_description 系统负载
    check_command       check-host-load!5.0,4.0,3.0!10.0,6.0,4.0
    }6define service{    use         local-service
    host_name       nagios
    service_groups      系统状况检查
    service_description 交换空间利用率
    check_command       check-local_swap!20!10
    }7define service{
    servicegroup_name   系统状况检查
    alias           系统概况
    }





check_local_users!20!50  //监测远程主机当前的登录用户数量,如果大于20用户则报warning,如果大于50则报critical

check_local_disk!20%!10%!/   //如果可用空间低于20%会报Warning,如果可用空间低于10%则报Critical:

check_local_procs!250!400!RSZDT   //监测远程主机当前的进程总数,如果大于250进程则报warning,如果大于400进程则报critical,S(休眠)、R(运行)、Z(僵死)、D (不可中断)、T (停止)

check_load -w 5,4,3 -c 10,6,4这个命令的意义如下

当1分钟多于5个进程等待,5分钟多于4个,15分钟多于3个则为warning状态

当1分钟多于10个进程等待,5分钟多于6个,15分钟多于4个则为critical状态

服务组并不是必须的,这是配合nagios的监控页面的显示