Nagios配置文件很多,有主配置文件,各种对象配置文件

安装nagios默认路径下/usr/local/nagios/etc会有以下文件:

 
  
  1. cgi.cfg:cgi配置文件 
  2. htpasswd.users:存放认证密码的文件 
  3. nagios.cfg:主配置文件 
  4. objects :该目录下有各种对象 
  5. resource.cfg 资源配置文件 

1、认识一下nagios的主配置文件nagios.cfg

 
  
  1. log_file=/usr/local/nagios/var/nagios.log    
  2. ##定义nagios的日志文件路径 
  3.  
  4. cfg_file用来加载对象定义的相关文件的,下面就是objects中的 
  5. 8个对象: 
  6. cfg_file=/usr/local/nagios/etc/objects/commands.cfg 
  7. cfg_file=/usr/local/nagios/etc/objects/contacts.cfg 
  8. cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg 
  9. cfg_file=/usr/local/nagios/etc/objects/templates.cfg 
  10. cfg_file=/usr/local/nagios/etc/objects/localhost.cfg 
  11. #cfg_file=/usr/local/nagios/etc/objects/windows.cfg 
  12. #cfg_file=/usr/local/nagios/etc/objects/switch.cfg 
  13. #cfg_file=/usr/local/nagios/etc/objects/printer.cfg 
  14. 默认windows主机、交换机和打印机是注释的,其实包含哪些对象 
  15. 我们可以手动设置的 
  16.  
  17.  
  18. 使用cfg_dir可以把一个目录下的文件全部包含进来 
  19. #cfg_dir=/usr/local/nagios/etc/routers 
  20.  
  21. resource_file=/usr/local/nagios/etc/resource.cfg   
  22. ##设定Nagios附加的宏定义的相关文件 
  23.  
  24. status_file:  
  25. 设定Nagios存储所有主机和服务当前状态信息的文件; 
  26. status_update_interval:  
  27. 设定status_file指定的文件中状态信息的更新频率,默认10s 
  28. nagiosnagios_user=nagios 用户 
  29. nagiosnagios_froup=nagios 用户组 
  30. command_check_interval=-1   
  31. 命令检查间隔时间,-1尽可能多的检查 
  32. command_file=/usr/local/nagios/var/rw/nagios.cmd   
  33. 定义commands的执行权限和身份的 
  34. lock_file=/usr/local/nagios/var/nagios.lock  定义锁文件 
  35. temp_file=/usr/local/nagios/var/nagios.tmp 临时文件 
  36. service_check_timeout 设定服务检测的超时时间,默认为60秒; 
  37. host_check_timeout 设定主机检测的超时时间,默认为30秒; 
  38. notification_timeout   
  39. 设定通知信息发送尝试的超时时间,默认为30秒; 

2、resource.cfg是定义宏的配置文件: 

 
  
  1. $USER1$=/usr/local/nagios/libexec    
  2. ##定义宏变量的,可以定义32个 
  3.  
  4. /usr/local/nagios/libexec目录下存放的是各种插件, 
  5. nagios对主机或服务等的监控正是通过这些插件来完成的, 
  6.  
  7. 该文件中包含了重要的信息如用户密码等,一般是不允许通过前 
  8. 端的web接口直接访问的 
  9. $USER3$=someuser 
  10. $USER4$=somepassword 
  11.  
  12. cgi要想访问某个用户的个人信息可以调用resource.cfg,但在we 
  13. b接口中是不能访问的 

3、objects目录    ##各种对象的配置文件

 
  
  1. commands.cfg   定义各种命令的配置文件 
  2. localhost.cfg 本地主机的配置文件 
  3. switch.cfg   交换机的配置文件 
  4. timeperiods.cfg  时段的配置文件 
  5. contacts.cfg   联系人的配置文件 
  6. printer.cfg   打印机的配置文件 
  7. templates.cfg  模板的配置文件 
  8. windows.cfg   Windows主机的配置文件 

在实际应用中这些对象的配置文件我们可以自己命名,存放于任何位置,

只要在主配置文件中包含进来就可以了

3.1、定义命令:

“命令”用于描述如何对主机或服务进行状态检测

 
  
  1. define command{ 
  2.         command_name    check-host-alive    
  3.         ##command_name的名字必须全局唯一 
  4.         command_line    $USER1$/check_ping -H  
  5.         $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5 
  6.  
  7.         } 
  8. ##$USER1$/check_ping:引用宏$USER1$路径下的一个叫check_pi 
  9. ng的插件 
  10. ##-H  $HOSTADDRESS$  
  11. :-H后跟主机地址,应用到哪个对象上,就是那个主机的地址 
  12. ##-w 3000.0,80%:如果是80%的丢包率,延迟3s,就为警告状态 
  13.          -w:警告,后跟达到警告的值,单位ms 
  14. ##-c 5000.0,100%  
  15. 如果有100%的丢包率,且延迟5s,就是危机状态 
  16. ##-p:一共检测几个包 

各状态及其表示符如下:    

 
  
  1. w —— WARNING 
  2.           u —— UNKNOWN 
  3.           c —— CRITICAL 
  4.           r —— OK(recovery) 
  5.           f —— flapping 
  6.           s —— 调试宕机时间开始或结束 

3.2、定义联系人:

“联系人”对象用于定义某主机设备的拥有者或某问题出现时接受通知者

 
  
  1. define contact{ 
  2.         contact_name                     
  3.         nagiosadmin          ##这个名字也要全局唯一 
  4.         use                              
  5.             alias                           Nagios  
  6.         Admin           ##定义一个别名 
  7.  
  8.         email                            
  9.         nagios@localhost       ##联系人的email 
  10.         } 
  11.  
  12. timeperiods.cfg用于定义时段的:  
  13. 7x24小时: 
  14. define timeperiod{ 
  15.         timeperiod_name 24x7    ##名字要全局唯一 
  16.         alias           24 Hours A Day, 7 Days A Week   
  17.         ##定义别名 
  18.         sunday          00:00-24:00   ##哪一天的什么时间段 
  19.         monday          00:00-24:00 
  20.         tuesday         00:00-24:00 
  21.         wednesday       00:00-24:00 
  22.         thursday        00:00-24:00 
  23.         friday          00:00-24:00        
  24.         saturday        00:00-24:00 
  25.         } 
  26.  
  27. 正常工作日: 
  28. define timeperiod{ 
  29.         timeperiod_name workhours 
  30.         alias           Normal Work Hours 
  31.         monday          09:00-17:00 
  32.         tuesday         09:00-17:00 
  33.         wednesday       09:00-17:00 
  34.         thursday        09:00-17:00 
  35.         friday          09:00-17:00 
  36.         }   generic-contact        ##从哪个模板继承,引用模板 

3.3、localhost.cfg 定义主机:

“主机”指的是被监控的机器,可是物理主机,也可以是虚拟设备。一个主机对象的定义至少应该包含一个简名(short name)、一个别名、一个IP地址和用到的检测命令

 
  
  1. define host{ 
  2.         use                     linux-server    ##引用模板 
  3.                                                         
  4.         host_name          localhost         
  5.         ##主机名,全局唯一 
  6.         alias                   localhost        ##别名 
  7.         address              127.0.0.1       ##ip地址 
  8.         } 

3.4、定义服务:

“服务”即某“主机”所提供的功能或资源对象,如HTTP服务、存储空间资源或CPU负载等

 
  
  1. define service{ 
  2.         use                                   
  3.         local-service        
  4.         host_name                       localhost     
  5.          ##先说明是在哪个主机上的服务 
  6.         service_description            PING
  7. ##服务名不要求全局唯一的,只要在当前主机上唯一就可以了 
  8.         check_command               
  9.         check_ping!100.0,20%!500.0,60%    
  10.          ##说明使用的是check_ping命令 
  11.         } 

服务不能脱离主机而运行的,所有服务定义时必须要说明是对应于哪一个主机而提供什么服务的。

上面使用的check_ping命令在commands.cfg文件中是有对应的命令的:

 
  
  1. # 'check_ping' command definition 
  2. define command{ 
  3.         command_name    check_ping      
  4.         ##需事先定义好命令,然后再在服务中引用的 
  5.         command_line    $USER1$/check_ping -H  
  6.         $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5 
  7.         } 
  8. ##$HOSTADDRESS$:对应于上面主机中的$HOSTADDRESS$就是127.0 
  9. .0.1 
  10. ##定义service时是有两个参数!100.0,20%和!500.0,60%,就是把 
  11. 对应的参数传递给command中的 $ARG1$和$ARG2$ 

3.5、再来看一下templates.cfg这个文件,定义模板的:

Nagios通过功能强大的继承引擎来实现基于模板的对象继承。这就意味着可以定义

将某类型的对象的通用属性组织起来定义为对象模板,并在定义其类型中的对象时

直接从此模板继承其相关属性的定义。

 
  
  1. define host{ 
  2.         name                            generic-host     
  3.         ##模板的名字 
  4.         notifications_enabled           1                
  5.         ##是否发送通知,为1发送 
  6.         event_handler_enabled           1             
  7.         ##是否启动额外的处理器 
  8.         flap_detection_enabled          1              
  9.         ##是否检查flap状态,flap是四个状态中会有不同状态 
  10.         的随机转换 
  11.         failure_prediction_enabled      1              
  12.         ##是否提前检测prediction失误 
  13.         process_perf_data               1                
  14.         ##进程性能数据是否输出 
  15.         retain_status_information       1              
  16.         ##是否保存状态信息 
  17.         retain_nonstatus_information    1           
  18.         ##是否保存非状态信息的通知 
  19.         notification_period             24x7             
  20.         ##检测的时间段 
  21.         register                         
  22.         0                      
  23.         ##并不是一个真正的主机,定义的是一个模板 
  24.         } 

下面定义Linux主机的模板:

 
  
  1. define host{ 
  2.         name                            linux-server     
  3.         ; The name of this host template 
  4.         use                             generic-host     
  5.         ; This template inherits other values from the  
  6.         generic-host template 
  7.         check_period                    24x7             
  8.         ; By default, Linux hosts are checked round the  
  9.         clock 
  10.         check_interval                  5                
  11.         ; Actively check the host every 5 minutes 
  12.         retry_interval                  1                
  13.         ; Schedule host check retries at 1 minute  
  14.         intervals 
  15.         max_check_attempts              10               
  16.         ; Check each Linux host 10 times (max) 
  17.         check_command                    
  18.         check-host-alive    ##先检测主机是否是alive状态 
  19.         notification_period             workhours        
  20.         ##什么时段发送通知信息,此处为workhours 
  21.                                                          
  22. ; Note that the notification_period variable is being  
  23. overridden from 
  24.                                                          
  25. ; the value that is inherited from the generic-host  
  26. template! 
  27.         notification_interval           120            
  28.         ##发送通知的间隔时间,单位分钟 
  29.         notification_options            d,u,r           
  30.         ##d--宕机,u--UNREACHABLE,r--UP(重新上线) 
  31.         contact_groups                  admins          
  32.         ##在定义好的时段内给这个联系人组发送通知信息 
  33.         register                        0                
  34.         ; DONT REGISTER THIS DEFINITION - ITS NOT A  
  35.         REAL HOST, JUST A TEMPLATE! 
  36.         } 

##service要定义相应的服务模板

3.6、对象间的依赖关系

为了描述Nagios对象间的依赖关系,这里要用到两个术语:master(被依赖的主机或服务)和dependent(依赖关系中的依赖于master的Nagios对象)。

可以定义对象间的依赖关系,为某对象定义其父对象,也可以指定此依赖关系生效的时段。

 
  
  1. 如定义主机间的依赖关系: 
  2.      define hostdependency 
  3.      { 
  4.           dependent_host_name backuphost    
  5.           ##定义dependent主机 
  6.           host_name ***server1    ##定义master主机 
  7.           dependency_period maintenancewindows      
  8.           ##定义依赖时段 
  9.      } 
  10.  
  11. 服务间依赖关系的定义类似于主机间的依赖关系,例如: 
  12.  
  13.      define servicedependency 
  14.      { 
  15.           host_name mysqlserver        ##master主机名 
  16.           service_description mysql      ##master服务名 
  17.           dependent_hostgroup_name apacheservers     
  18.           ##dependent主机组名 
  19.           dependent_service_description webservice       
  20.           ##denpendent服务名 
  21.           execution_failure_criteria c,u          
  22.           ##定义master为何种状态时不再对依赖 
  23.                                                           
  24. ##于此master的主机或服务进行检测, 
  25.           notification_failure_criteria c,u,w    
  26.           ##用于定义master处于何种状态时不会 
  27.            ##发送dependent相关的主机问题通知到联系人 
  28.      }