Nagios+NRPE安装备忘录(二)

来源:互联网 发布:iphone6s虚拟定位软件 编辑:程序博客网 时间:2024/04/30 12:24

  在“Nagios+NRPE安装备忘录(一)”中完成了前期Nagios和NRPE的安装。但对于使用Nagios来说,这只是长征的第一步。我个人理解,最难的部分其实是关于Nagios的配置。Nagios的官网上有很详细的配置文档,但是我在阅读的过程中感觉这部分文档对于我具体理解配置文档相互之间的关系却帮助不大。也许是我当时的理解有问题。

  现在根据我的实战经验,把我对Nagios的配置文档的理解总结如下。

 一、被监控端(后文简称client)的配置

  其实client服务器上只是安装了NRPE和nagios-plugin。所以这部分的配置是相对比较简单的。

  除去在安装时需要修改的文档,在client需要修改的文档只有一个/usr/local/nagios/etc/nrpe.cfg。而这个文档在没有太多复杂监控要求的情况下,可以只根据具体情况修改文档末尾的COMMAND DEFINITIONS的部分。


# The following examples use hardcoded command arguments...


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


  以上是原始的配置。根据每台client具体的使用和硬件情况不同,可以进行相应的修改。方括号里的部分将是在Monitor配置相应service时调用的command name。

   -w 表示warning,-c表示critical。代表不同的预警等级。

  比如我并不关心每台client有多少用户登录。那么可以把check_users注释掉。又或者client的load的告警阈值也可以修改。还有特别需要注意的是可能每一台client的硬盘分区情况不同,所以需要相应修改check_hda1这一行。修改后的范例如下:

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_load]=/usr/local/nagios/libexec/check_load -w 55,50,45 -c 70,65,60
#command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_disk1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
command[check_disk2]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda3
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_total_procs]=/usr/local/nagios/libexec/check_procs -w 450 -c 600

  注意上面黑色粗体的check_disk1和2这部分。这里的修改要和Monitor的配置文档里定义的service的名字对应上。

  修改完毕后,对于通过xinetd运行nrpe的,需要运行service xinetd restart;对于直接nrpe命令运行的,需要kill掉当前的nrpe进程并重新启动;以使上面的改动生效。


二、Monitor端的配置

  1. Nagios的初始配置文档

  Nagios的初始配置文档结构如下:

  /usr/local/nagios/etc
  - cgi.cfg #
web界面的配置文档
  - htpasswd.users   #决定web界面访问权限的用户、密码文档
  - nagios.cfg# Nagios的主要配置文档,里面定义了特别是object配置文档的相关信息
  - objects
  - 
commands.cfg     #Nagios提供了一个对命令配置的范例,在我实战过程中没有对这个文档进行改动。

  contacts.cfg#也是Nagios提供的联系人和组的一个范例,可根据情况修改

  - localhost.cfg        #对Monitor监控的配置文档
  - printer.cfg            #对打印机监控的配置文档
  - switch.cfg
  - 
templates.cfg      #Nagios预先定义的object的模板文档,定义了contact/host/service等模板,可以在自定义的services.cfg/hosts.cfg等中调用
  - timeperiods.cfg  #Nagios中对时间的定义,如何为24x7/workhours,甚至还有holidays等。可以在services.cfg中的check_period中被调用
  - windows.cfg
  -
resource.cfg        #对Nagios中一些宏的定义


  2. 开始配置前的思考

  Nagios的配置比较灵活。如果需要监控的client数量比较少,可以直接修改现有的配置文档。但是考虑到将来的拓展性,可以采用特别配置services.cfg/hosts.cfg/hostgroup.cfg等用户自己创建的文件的方式。

  再列一下本次实战的环境:

client1 ~ 3 (下文c1/c2/c3)属于开发组A,client4 ~ 5 (c4/c5)属于开发组B。

  2.1. hostgroup:以上机器全部用作编译服务器,只是隶属不同的开发组。所以考虑直接按照开发组分类。

# cat /usr/local/nagios/etc/objects/hostgroup.cfg 
define hostgroup{
        hostgroup_name
GroupA-server
        members
c1,c2,c3#c1 ~ c5的详细信息定义在hosts.cfg文件中
}


define hostgroup{
        hostgroup_name
GroupB-server
        members
c4,c5
}

  2.2 hosts.cfg:定义每一台client的详细信息

define host{
        host_name
c1 ; Name of this template
        alias  
c1
        address
xxx.xxx.xxx.xxx

        use linux-server
                #这里可以理解为调用了templates.cfg中的名字为linux-server的host中相关定义,如check_perios/check_command等。所以也可以根据需要在templates.cfg中定义其他的host。如果这里直接调用templates.cfg中的generic-host的host定义,那么在web界面的hosts和host groups页面针对每一个host的status将会显示为Pending。所以我们需要在这里调用linux-server或者在generic-host的定义里加上check_command check-host-alive

        max_check_attempts              10              
}

  2.3  contacts.cfg:为不同的hostgroup或者service定义不同的收件人。比如上面我们监控的服务器有两组。那么就可以在contacts.cfg中定义各自的admin。

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                          
san.zhang@xxxx.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
        }

define contact{
        contact_name          
sili           ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias                          
Li Si              ; Full name of user
        email                          
si.li@xxx.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
        }

define contact{
        contact_name          
maziw         ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias                          
Wang Mazi            ; Full name of user
        email                          
mazi.wang@xxx.com
       ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
        }

然后再定义contactgroup

define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 nagiosadmin
        }

define contactgroup{
        contactgroup_name      
GroupA_admins
        alias                  
GroupA Server Administrators
        members                 nagiosadmin,
sili#这里sili即上面单独定义的contact_name为sili的联系人
        }

define contactgroup{
        contactgroup_name      
GroupB_admins
        alias                  
GroupB Server Administrators
        members                 nagiosadmin,
maziw#这里的maziw即上面单独定义的contact_name为maziw的联系人
}

  2.4 services.cfg:可以为一组或者一台host定义服务。如

define service{
        hostgroup_name
GroupA-server #这里直接调用了hostgroup.cfg中定义的hostgroup,不用单独把client一个个加进来
        use generic-service
        service_description Host Alive
#services页面将下面的检查项显示为“Host Alive”
        check_command check-host-aliv
e  #这里的check_host_alive的结果只能在web的services页面看到每台client的status。我在这里走了很多弯路。以为这里定义了检查状态就可以在所有页面(比如hosts/host groups)看到client的status。但其实不是。要想在hosts页面看到client status,就必须在上面提到的hosts.cfg中单独定义check-host-alive命令或者调用templates.cfg中已经定义好命令的linux-server 这个host模板

        check_period 24x7
        check_interval 5
        retry_interval 1
        max_check_attempts 10
        notification_period 24x7
        notification_interval 30
        notification_options w,c,r,f,u
        contact_groups
GroupA_admin#这里调用了contacts.cfg中的contact_group
     
 #register 0 ; DONT REGISTER THIS - ITS A TEMPLATE
  #这一行一定要注释掉,否则上面的定义全部不能生效
}
  

对于每台client都一样的service,可以直接把host_name或者hostgroup_name一起放到service中,如

define service{
       
 hostgroup_name GroupA-server,GroupB-server#这里把两个group放到一起,即这一项service对两个group都生效
        use generic-service
service_description  CPU Load
        check_command check_nrpe!check_load
        check_period workhour
s#这里把默认的24x7修改为timeperiods.cfg中定义的workhours
        check_interval  5
        retry_interval  1
        max_check_attempts      10
        notification_period     24x7
        notification_interval   30
        notification_options    w,c,r
        contact_groups
GroupA_admins,GroupB_admins
}

上文我们提到每台client的硬盘分区不同。

GroupA:

c1的硬盘:/dev/sda1和/dev/sda3

c2的硬盘:/dev/hda1和/dev/hda3

c3的硬盘:/dev/xvda1和/dev/xvda2

GroupB:

c4的硬盘:/dev/sda1

c5的硬盘:/dev/sda1和/dev/sda3

那么对于检查硬盘空间的service就不能统一放到一起。但是所有的client都有至少一块硬盘。因此我们把检查硬盘空间的service定义如下:

define service{
       hostgroup_name
GroupA-server,GroupB
-server
        use generic-service
        service_description Local Disk1 Free Space
#这里把此项service定义为“Local Disk1 Free Space”,具备了通用性和便于理解     
   
   # check_command check_nrpe!check_hda1
        check_command check_nrpe!check_disk
1
#这里对应的是client的nrpe.cfg文件中command部分定义的命令,每台client的第一块硬盘命名不同都体现在nrpe.cfg中
        check_period 24x7
        check_interval  5
        retry_interval  1
        max_check_attempts      10
        notification_period     24x7
        notification_interval   30
        notification_options    c,r
        contact_groups
GroupA_admins,GroupB_admins
}


define service{
       
 host_name c1,c2,c3,c5#这里把具备第二块硬盘的client一个个列举
        use generic-service
        service_description Local Disk2 Free Space
        check_command check_nrpe!check_disk
2  #同样,这个命令也是在每台client的nrpe.cfg中定义的
        check_period 24x7
        check_interval  5
        retry_interval  1
        max_check_attempts      10
        notification_period     24x7
        notification_interval   30
        notification_options    c,r
        contact_groups
GroupA_admins,GroupB_admins
}
  

  2.5 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
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/hostgroup.cfg
cfg_file=/usr/local/nagios/etc/objects/services.cfg

上面最后3个文件就是我们上面自己创建的。同样,如果你还有其他自定义的文件,也不要忘记添加到/usr/local/nagios/etc/nagios.cfg文件中。

  2.6 localhost.cfg:如果不想在web页面把Monitor的hostname显示为localhost,可以修改这个文件

  2.7 重启nagios以使上面的改动生效

service nagios restart


  以上只是对nagios最基本的应用,也是我第一次安装配置nagios。现在总结起来,好像当初一帆风顺,但其实走了不少的弯路。单是理解hosts.cfg/hostgroup.cfg/services.cfg/templates.cfg文件之间的关系就花费了不少的时间。比如我前面提到的在web页面,host status一直显示为pending。我查了很多文档,最后在 https://forums.meulie.net/t/some-hosts-have-status-pending/759/3 中找到了答案。感觉nagios的配置太灵活,但是文档没有从足够多的角度来解释工具的运行机制(或者说至少我没有从官方找到相关的文档)。

  后续还可以再尝试让nagios对自定义脚本结果的显示、增加更多不同权限的可以访问web页面的用户等方向。

0 0
原创粉丝点击