Nagios安装与配置

安装环境:centos

1、 安装支持包

#yum -y install gcc gcc-c++ gd gd-devel php httpd openssl-devel

注:3.2的nagios,web首页已经由html变为php,必须安 装php支持

2、 安装nagios

创建用户

#useradd  nagios
#passwd nagios

创建组

#groupadd nagcmd
#usermod -G nagcmd nagios
#usermod -G nagcmd apache

nagios主文件下载地址:http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.4.1.tar.gz

nagios plugins下载地址:http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.16.tar.gz

NRPE 下载地址:http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz

安装

#tar zxvf nagios-3.2.0.tar.gz
#cd nagios-3.2.0
#./configure --with-command-group=nagcmd --prefix=/usr/local/nagios
#make all
#make install        # 使用make install来安装主程序,CGI和HTML文件 
#make install-init        # 使用make install-init在/etc/rc.d/init.d安装启动脚本 
#make install-config        # 使用make install-cofig来安装示例配置文件,安装的路径是/usr/local/nagios/etc. 
#make install-commandmode        # 使用make install-commandmode来配置目录权 限
nagios目录功能的简要说明:

bin    Nagios执行程序所在目录,nagios文件即为主程序

etc    Nagios配置文件位置

sbin    Nagios Cgi文件所在目录,也就是执行外部命令所 需文件所在的目录

Share    Nagios网页文件所在的目录

var    Nagios日志文 件、spid 等文件所在的目录

var/archives    日志归档目录

var/rw    用来存放外部命令文件 

配置apache

#vi /etc/httpd/conf/httpd.conf        #加入末尾
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" 
<Directory "/usr/local/nagios/sbin">
#  SSLRequireSSL
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory> 
Alias /nagios "/usr/local/nagios/share" 
<Directory "/usr/local/nagios/share">
#  SSLRequireSSL
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory> 
创建apache目录验证文件

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

New password: (输入密码)
Re-type new password: (再输入一次密码)
Adding password for user nagiosadmin

#service httpd restart

配置nagios配置文件

#vi /usr/local/nagios/etc/objects/contacts.cfg        # 将里面的email地址改为自己的email地址 


三、安装nagios插件 

#tar zxvf nagios-plugins-1.4.13.tar.gz
#cd nagios-plugins-1.4.13
#./configure --with-nagios-user=nagios --with-nagios-group=nagios --prefix=/usr/local/nagios
#make && make install

 

四、启动nagios 

添加服务

#chkconfig --add nagios
#chkconfig nagios on

检查配置文件

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

启动nagios

#service nagios start

启动apache

#service httpd start

访问http://localhost/nagios 输入用户名密码

 

五、安装nrpe 

#tar zxvf nrpe-2.12.tar.gz
#cd nrpe-2.12
#./configure
#make all
#make install-plugin        # 服务器端只要安装nrpe监控插件就行 
在/usr/local/nagios/etc/objects/commands.cfg中定义check_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$
        }

六、在被监控机上安装nagios插件和nrpe 

#useradd nagios
#tar zxvf nagios-plugins-1.4.13.tar.gz
#cd nagios-plugins-1.4.13
#./configure
#make
#make install
#chown nagios.nagios /usr/local/nagios/
#chown -R nagios.nagios /usr/local/nagios/libexec/
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make all       
make install-plugin         #安装nrpe插件,本监控端可以不装      
make install-daemon        # 安装nrpe守护进程       
make install-daemon-config         #安装 nrpe配置文件 
#vi /usr/local/nagios/etc/nrpe.cfg        #修改nrpe配置文件,允许Nagios监控服务器(192.168.1.170)监控 
allowed_hosts=127.0.0.1,192.168.1.170       #多台机器用逗号隔开 

#/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d        以独立守护进程启动nrpe,也可以使用xinetd 启动nrpe,具体清查看nrpe官方文档。 

#cat >> /etc/rc.d/rc.local << EOF               #开机自动启动nrpe 
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
EOF

# /usr/local/nagios/libexec/check_nrpe -H localhost        #检查nrpe是否安装正常 

NRPE v2.12

#netstat -tln        #查看端口 
tcp        0      0 0.0.0.0:5666                0.0.0.0:*   

我们需要在/usr/local/nagios/etc/nrpe.cfg中定义我们用到的监控本地资源的命令。

下面的命令是默认定义的:

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

下面的命令是自己定义的:

#监控交换分区的使用情况,使用超过20%时为警告状态,超过10%时为严 重状态 

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

#监控根分区磁盘使用情况

command[check_disk_root]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /

七、nagios监控流程 

NRPE总共由两部分组成:

(1).check_nrpe插件,运行在 监控主机上。

(2).NRPE daemon,运行在远程的linux主机上 (通常就是被监控机)

按照上图,整个的监控过程如下:

当Nagios需要监控某个远程linux主机的服务或 者资源情况时:

1).nagios会 运行check_nrpe插件,我们要在nagios配置文件中 告诉它要检查什么.

2).check_nrpe插件会通过SSL连接到远程的NRPE daemon.

3).NRPE daemon会运行相应的nagios插件来执行检查本地资源或服务.

4).NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理.

注意:NRPE daemon需要nagios插件安装在远程被监控linux主机上,否则,daemon不能做任何的监控.


八、nagios配置文件 

#控制cgi访问的 配置文件 

cgi.cfg

#Nagios主配置文件 

nagios.cfg

#resource.cfg定义了一些变量,以便被其他文件引用, 如$USER1$ 

resource.cfg

# objects是一个目录, 用于定义Nagios对象 

objects

# servers是自己创建的一个目录,Nagios可以加载一个目录下面的所有配置文件(需要在nagios.cfg中配置)

servers


./objects:

#命令定 义配置文件,里面定义的命令可以被其他文件引用 

commands.cfg

#联系人和联系人组配置文件 

contacts.cfg

#监控本地机器的配置文件 

localhost.cfg

#监控打印机的一个事例配置文件(默认未启用) 

printer.cfg

#监控路由器的一个事例配置文件(默认未启用) 

switch.cfg

#模板配置文件,在此可以定义模板,在其他文件中引用 

templates.cfg

#定义监控时间段的配置文件 

timeperiods.cfg

#监控Windows的一个事例配置文件(默认未启用) 

windows.cfg


./servers:

#自己创建的主机群组配置文件

hostgroup.cfg

#自己创建的监控远程Linux主机的配置文件 

sectop.cfg


配置文件是怎样引用的?

 


用nagios主要是监控一台主机的各种信息,包括本机资源以及对外的服务等等.这些在nagios里面都是被定义为一个个的项目(nagios称 之为服务,为了与主机提供的服务相区别,我这里用项目这个词),而实现每个监控项目,则需要通过commands.cfg文件中定义的命令。

为了 不必重复定义一些项目,Nagios引入了一个模板配置文件(templates.cfg),将一些共性的属性定义成模板,以便于多次引用。

我们 现在有一个监控项目是监控一台机器的web服务是否正常, 我们需要哪些元素呢?最重要的有下面三点:首先是监控哪台机器,然后是这个监控 要用什么命令实现,最后就是出了问题的时候要通知哪个联系人。


我们首先应该在commands.cfg中定义监控远程服务和资源的命令,以及如何发送邮件的 命令。大部分监控远程服务和资源的命令的命令通过/usr/local/nagios/libexec下的脚本实 现,如ping命令为check_ping。

/usr/local/nagios/libexec下的脚本命令的使用发法可以通过-h参数查 看

然后我们在contacts.cfg文件中定义联系人和联系人组,在timeperiods.cfg中定义监控时间段。

最后我们在服务 器监控配置文件中引用前面定义的元素来监控服务器状态。

下面引用配置文件中部分配置做说明:

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

#定义$USER1$变量,设置插 件路径 

$USER1$=/usr/local/nagios/libexec


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

#定义check-host-alive命令

define command{

        command_name    check-host-alive  #命令名称 

        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5

        }

#上面的$USER1$和$HOSTADDRESS$引用自已定义的配置文 件。变量不需现定义才能被引用。 


# 'check_nrpe ' command definition

define command{

        command_name check_nrpe

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

        }



#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


        email                           test@gmaile.com         ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

        }

#上面的generic-contact在templates.cfg中定 义。 

#定义联系人组 

define contactgroup{

        contactgroup_name       admins

        alias                   Nagios Administrators

        members                 nagiosadmin   #在此可以加 入多个联系人,中间用逗号隔开 

        }

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

#定义监控的时间段 

define timeperiod{

        timeperiod_name 24x7   #监控所有时间段(7*24小时) 

        alias           24 Hours A Day, 7 Days A Week

        sunday          00:00-24:00

        monday          00:00-24:00

        tuesday         00:00-24:00

        wednesday       00:00-24:00

        thursday        00:00-24:00

        friday          00:00-24:00

        saturday        00:00-24:00

        }


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

#定义generic-contact联系人模板,并非真正的联系人,真正 的联系人在contacts.cfg中定义 

define contact{

        name                            generic-contact         ; The name of this contact template

        service_notification_period     24x7                    ; service notifications can be sent anytime

        host_notification_period        24x7                    ; host notifications can be sent anytime

        service_notification_options    w,u,c,r,f,s             ; send notifications for all service states, flapping events, and scheduled downtime events

        host_notification_options       d,u,r,f,s               ; send notifications for all host states, flapping events, and scheduled downtime events

        service_notification_commands   notify-service-by-email ; send service notifications via email

        host_notification_commands      notify-host-by-email    ; send host notifications via email

        register                        0                       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!

        }

------------------------------------------------------------------------------------------------------------------

service_notification_period     24x7

服务出了状况通知的时间段,这个时间段就是上面在 timeperiods.cfg中定义的. 

host_notification_period        24x7

主机出了状况通知的时间段, 这个时间段就是上面在timeperiods.cfg中定义的 

service_notification_options    w,u,c,r

当服务出现w—报警(warning),u —未知(unkown),c—严重(critical),或者r—从异常情况恢复正常,在这四种情况下通知联系人. 

host_notification_options       d,u,r

当主机出现d----—当机(down),u—返回不可达 (unreachable),r—从异常情况恢复正常,在这3种情况下通知联系人 

service_notification_commands   notify-service-by-email

服务出问题通知采用的命令notify-service-by- email,这个命令是在commands.cfg中定义的,作用是给联系人发邮件. 

host_notification_commands      notify-host-by-email

同上,主机出问题时采用的也是发邮件的方式通知联系人 

------------------------------------------------------------------------------------------------------------------


#定义generic-host主机模板 

define host{

        name                            generic-host    ; The name of this host template

        notifications_enabled           1               ; Host notifications are enabled

        event_handler_enabled           1               ; Host event handler is enabled

        flap_detection_enabled          1               ; Flap detection is enabled

        failure_prediction_enabled      1               ; Failure prediction is enabled

        process_perf_data               1               ; Process performance data

        retain_status_information       1               ; Retain status information across program restarts

        retain_nonstatus_information    1               ; Retain non-status information across program restarts

        notification_period             24x7            ; Send host notifications at any time

        register                        0               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!

        }


#定义Linux主机模板 

define host{

        name                            linux-server    ; The name of this host template

        use                             generic-host    ; This template inherits other values from the generic-host template

        check_period                    24x7            ; By default, Linux hosts are checked round the clock

        check_interval                  5               ; Actively check the host every 5 minutes

        retry_interval                  1               ; Schedule host check retries at 1 minute intervals

        max_check_attempts              10              ; Check each Linux host 10 times (max)

        check_command                   check-host-alive ; Default command to check Linux hosts

        notification_period             workhours       ; Linux admins hate to be woken up, so we only notify during the day

                                                        ; Note that the notification_period variable is being overridden from

                                                        ; the value that is inherited from the generic-host template!

        notification_interval           120             ; Resend notifications every 2 hours

        notification_options            d,u,r           ; Only send notifications for specific host states

        contact_groups                  admins          ; Notifications get sent to the admins by default

        register                        0               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!

        }


#在nagios.cfg配置文件中开启对/usr/local /nagios/etc/servers/中配置文件的引用。 

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


#远程Linux主机监控文件,如果监控多台主机只需简单复制修改即可。 

#我们应该牢记sectop.cfg用到的命令在commands.cfg 中定义,在commands.cfg中定义的命令用到/usr/local/nagios/libexec下的插件(命令)。 

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

#定义主机 

define host{

        use                     linux-server            ; Name of host template to use

                                                        ; This host definition will inherit all variables that are defined

                                                        ; in (or inherited by) the linux-server host template definition.

        host_name               sectop

        alias                   Docs

        address                 192.168.99.200

        }

#定义Ping远程Linux主机 

define service{

        use                             generic-service         ; Name of service template to use

        host_name                       sectop

        service_description             PING

        check_command                   check_ping!100.0,20%!500.0,60%   ;check_ping命令在commands.cfg中定义,后跟两个参数,命令及参数间用!分割。

        }

#检查远程Linux主机根分区使用情况,check_nrpe命令必须在 /usr/local/nagios/etc/objects/commands.cfg中定义(默认未定义) 

define service{

        use                             generic-service         ; Name of service template to use

        host_name                       sectop

        service_description             Root Partition

        check_command                   check_nrpe!check_disk_root

        }

#检查远程Linux主机的登录人数 

define service{

        use                             generic-service         ; Name of service template to use

        host_name                       sectop

        service_description             Current Users

        check_command                   check_nrpe!check_users

        }

#检查远程Linux的主机的负载 

define service{

        use                             generic-service         ; Name of service template to use

        host_name                       sectop

        service_description             Current Load

        check_command                   check_nrpe!check_load

        }

#检查远程Linux主机swap分区使用情况 

define service{

        use                             generic-service         ; Name of service template to use

        host_name                       sectop

        service_description             Swap Usage

        check_command                   check_nrpe!check_swap

        }

#检查远程Linux主机的SSH服务 

define service{

        use                             generic-service         ; Name of service template to use

        host_name                       sectop

        service_description             SSH

        check_command                   check_ssh

        notifications_enabled           0

        }

#检查远程Linux主机的HTTP服务 

define service{

        use                             generic-service         ; Name of service template to use

        host_name                       sectop

        service_description             HTTP

        check_command                   check_http

        notifications_enabled           0

        }


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

#定义主机组(localhost.cfg中有类似的主机组设置,我已将其 注释掉,否则可能会有冲突) 

define hostgroup{

        hostgroup_name  linux-servers ; The name of the hostgroup

        alias           Linux Servers ; Long name of the group

        members         localhost,sectop     ; Comma separated list of hosts that belong to this group

        }


#define hostgroup{

#        hostgroup_name  windows-servers ; The name of the hostgroup

#        alias           Windows Servers ; Long name of the group

#        members         print     ; Comma separated list of hosts that belong to this group

#        }

#完成监控主机配置文件的配置后使用下面命令检查配置文件的正确性: 

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

#确定无误后重启Nagios: 

#service nagios restart


验证:http://ip/nagios


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值