1 Nagios分布式架构图


2 Nagios分布式架构图原理

中心服务器与分布服务器的对比

中心服务器: 目标是从一个或多个分布式服务器收集服务检测结果。虽然中心服务器偶尔也会做些自主检测,但自主检测更多只是在极端情况下才做的,因而可以说中心服务器当前只做强制检测。既然中心服务器从一台或多台分布服务器收集强制服务检测结果,那它就承担全部监控逻辑的整体输出工作(如送出通知、运行事件处理脚本、判定主机状态、安装并提供Web接口等)

 

分布服务器: 功能是真正地完成你所划分出一主机的检测工作。这里的定义是松散的-完成基于你的网络情况而自然形成的。在一个物理位置里可能会有若干个” ,这取决于你的网络层次划分,要么因为WAN而划分开,要么因个自独立的防火墙而划分开。很重要的一点是,在每个里都只有一个运行Nagios 的服务器并完成对该的监控检测工作。分布服务器通常上面只安装有Nagios,它不需要安装Web接口,如果不想让它来做也可以不送出通知、运行事件处理脚本或是执行任何其他服务检测。

分布服务器如何收集服务检测信息

利用nsca外部构建完成从远程主机提交强制检测结果。该外部构件包括两部分,第一部分是客户端程序(send_nsca),运行于远程主机上并负责将强制检测结果送到指定的服务器上去,另一部分是NSCA守护进程(nsca),它既可以独立地运行于守护服务也可以注册到inetd里作为一个inetd客户程序来提供监听联接。从客户端收到服务检测结果信息之后,守护进程将结果提交给在中心服务器的Nagios,方式是通过在外部命令文件里插入一条PROCESS_SVC_CHECK_RESULT命令,之后跟上检测结果。在Nagios下一次处理外部命令时将会找到这条由分布式服务器送来的强制检测信息并处理它

3. Nagios分布式搭建步骤

1)中心服务器设置

1、安装配置好nagios服务器 ,这里不再复述。

2、下载并安装nsca:

 

 
   
  1. #wget http://nchc.dl.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz 
  2. #tar zxf nsca-2.9.1.tar.gz 
  3. #cd nsca-2.9.1 
  4. #./configure 
  5. #make all 

以上步骤检查正确执行以后:
1)、会在src目录下生成两个程序 nsca send_nsca(主程序)
2)sample-config中会有nsca.cfgsend_nsca.cfg(配置文件)
3)、当前目录下会有一个init-script(启动脚本)

 

 


 
   
  1. #cp src/nsca /usr/local/nagios/bin/ 复制主程序 
  2. #cp sample-config/nsca.cfg /usr/local/nagios/etc 复制主配置文件  
  3. #chown nagios.nagios /usr/local/nagios/bin/nsca 修改属组属主  
  4. #chown nagios.nagios /usr/local/nagios/etc/nsca.cfg 
  5. #cp init-script /etc/init.d/nsca  
  6. #chmod a+x /etc/init.d/nsca 
  7. #chkconfig --add nsca 

修改nsca的配置文件 

 
   
  1. #vim /usr/local/nagios/etc/nsca.cfg 
  2. password=123456 #此处和分布式监控服务器密码一致 

修改nagios的配置文件

 
   
  1. #vim /usr/local/nagios/etc/nagios.cfg 
  2. check_external_commands=1 # 配置nagios检查扩展命令 
  3. accept_passive_service_checks=1 # 配置接受被动服务检测的结果 
  4. accept_passive_host_checks=1 #配置接受被动主机检测的结果 

3、检查配置文件是否正确:


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

 

 

4、启动nagiosnsca服务

 
   
  1. service nagios start 
  2. service nsca start 

5、配置

定义主机和服务 定义主机的host_name 服务的service_description 一定要和 分布服务器的设置一样

 
   
  1. define host { 
  2.  
  3. use  linux-server 
  4.  
  5. host_name  10.15.62.199 
  6.  
  7. address 10.15.62.199 
  8.  
  9. check_freshness 1 # 定义强制刷新检测  
  10.  
  11. freshness_threshold 100 #指定了服务检测结果应该在何时间内刷新 单位是s  
  12.  
  13. passive_checks_enabled 1 #打开被动检测 
  14.  
  15. active_checks_enabled 0 #关闭主动监测  
  16.  
  17.  
  18. define service{ 
  19.  
  20. use generic-service 
  21.  
  22. host_name 10.15.62.199 
  23.  
  24. service_description check_s8_speed 
  25.  
  26. check_command service-is-stale 
  27.  
  28. check_freshness 1 
  29.  
  30. freshness_threshold 100 
  31.  
  32. active_checks_enabled 0 
  33.  

6、定义命令 定义服务主动检测的命令

 
  1. define command{ 
  2.              command_name  service-is-stale 
  3. command_line  $USER1$/staleservice.sh 
  4.  } 

定义命令的脚本

 
   
  1. # vim ../nagios/libexec/staleservice.sh 
  2. #!/bin/sh 
  3. /bin/echo "CRITICAL: Service results are stale!" 
  4. exit 2 

二)分布服务器设置

1、安装Nagios,不需要安装Web接口;---安装过程略;

2Nsca安装

下载nsca-2.7.2.tar.gz至本地后:

 
   
  1. #tar zxf nsca-2.7.2.tar.gz 
  2. #cd nsca-2.7.2 
  3. #./configure && make all 

以上步骤检查正确执行以后:

1)会在src目录下生成两个程序 nsca send_nsca(主程序)

2sample-config中会有nsca.cfgsend_nsca.cfg(配置文件)

 
   
  1. # cp src/send_nsca /usr/local/nagios/bin/ 复制命令 
  2.  
  3. # cp sample-config/send_nsca.cfg /usr/local/nagios/etc/ 复制配置文件 
  4.  
  5. # chown nagios.nagios /usr/local/nagios/bin/send_nsca 修改属组属主 
  6.  
  7. # chown nagios.nagios /usr/local/nagios/etc/send_nsca.cfg 
  8.  
  9. # vim /usr/local/nagios/etc/send_nsca.cfg 

修改send_nsca.cfg配置文件

 
   
  1. #vim send_nsca.cfg 
  2. password=123456 //#此处和中心服务器密码一致 

3、在分布式服务器的对象配置文件里只定义那些由它直接监控的主机与服务的对象(与中心服务器定义监控主机和服务对象一致)

定义监控主机及服务对象示例:

 
   
  1. define host { 
  2.           use linux-server 
  3.           host_name 10.15.62.199 //和中心服务器上定义的主机名一致  
  4.           address 10.15.62.199 
  5. define service{ 
  6.           use generic-service 
  7.           host_name 10.15.62.199 
  8.           service_description check_s8_speed //与中心服务器上定义的服务描述一致 
  9.           check_command check-host-alive 
  10.           check_period 24x7 //定义检测周期 
  11.           max_check_attempts 3 //最大检测次数3次 
  12.           normal_check_interval 1 //每隔1分钟检测一次 
  13.           retry_check_interval 1 //软状态重试时间1分钟 

4、修改nagios的配置文件

 
   
  1. #vim nagios.cfg 
  2. enable_notifications=0 //阻止它直接送出任何通知信息 
  3. obsess_over_services=1 // 配置为强迫型服务(obsess over services)类型 
  4. ocsp_command=submit_check_result //定义一个强迫型服务处理(ocsp)命令 

5、定义submit_check_result命令

 
   
  1. #vim command.cfg 
  2. define command{ 
  3.  
  4.        command_name submit_check_result //添加这条命令
  5. command_line /usr/local/nagios/libexec/eventhandlers/
  6. submit_check_result $HOSTNAME$ '$SERVICEDESC$'$SERVICESTATE$ '$SERVICEOUTPUT$' 

6、创建submit_check_result脚本文件

 
   
  1. #mkdir /usr/local/nagios/libexec/eventhandlers //创建目录 
  2. #chown -R nagios.nagios /usr/local/nagios/libexec/eventhandlers //修改/eventhandlers目录属组和属主 
  3. #vim submit_check_result //脚本的内容如下(用中心服务器IP地址替换里面的central_server): 
  4. #!/bin/sh 
  5. # Arguments: 
  6. # $1 = host_name (Short name of host that the service is 
  7. # associated with) 
  8. # $2 = svc_description (Description of the service) 
  9. # $3 = state_string (A string representing the status of 
  10. # the given service - "OK", "WARNING", "CRITICAL" 
  11. # or "UNKNOWN") 
  12. # $4 = plugin_output (A text string that should be used 
  13. # as the plugin output for the service checks) 
  14. # Convert the state string to the corresponding return code 
  15. return_code=-1 
  16. case "$3" in 
  17. OK) 
  18. return_code=0 
  19. ;; 
  20. WARNING) 
  21. return_code=1 
  22. ;; 
  23. CRITICAL) 
  24. return_code=2 
  25. ;; 
  26. UNKNOWN) 
  27. return_code=-1 
  28. ;; 
  29. esac 
  30. # pipe the service check info into the send_nsca program, which 
  31. # in turn transmits the data to the nsca daemon on the central 
  32. # monitoring server 
  33. /usr/bin/printf "%s\t%s\t%s\t%s\n" "$1" "$2" "$return_code" "$4" | /usr/local/nagios/bin/send_nsca 
  34. central_server-c /usr/local/nagios/etc/send_nsca.cfg 
  35.  
  36. #chmod +x /usr/local/nagios/libexec/eventhandlers/submit_check_result //添加脚本执行权限 

7、检查nagios配置文件并重启nagios服务

 
   
  1. # /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 
  2. #service nagios restart 

四、强制刷新的理解

 

check_command service-is-stale 在中心服务器上配置的服务检测命令 

 

check_freshness 1 打开强制刷新 

 

freshness_threshold 100 刷新频率是100s

 

active_checks_enabled 0 关闭主动检测 

Nagios定期地对那些打开了刷新检测服务的检测结果进行刷新情况检查。服务对象定义里的freshness_threshold选项指定了服务检测结果应该在何时间内刷新。例如,,Nagios将会对当前时间100秒之前的检测结果判定为陈旧。如果没有指定服务对象里的freshness_threshold值,Nagios将自动地计算出一个刷新间隔门限,要么按照normal_check_interval要么按retry_check_interval来计算,这取决于服务当时所在什么样的状态类型。一旦服务检测结果被判定为是陈旧Nagios将使用服务定义里check_command指定的命令来执行一次服务检测,这当然是自主服务检测。

也就是说当分布服务器过了100s还没有发送过来数据,中心服务器就会变被动检测为主动检测,用check_command定义的命令执行服务检测。这样可以防止当分布服务器宕机或不发送通知时,中心服务器可以及时报警。

 

注意点:

1、中心服务器和分布式服务器的时间一定要调整一致

2、分布式服务器监控客户端主机可以用任何方式,主动被动都可以

3、分布式上定义的监控主机与服务,在中心服务器上也要定义,保证主机名(host_name)和服务描述(service_description)一致。

4、分布式服务器上定义的服务检测命令(check_command)是真正的检测服务的命令 ,中心服务器上定义的服务检测命令(check_command)是当中心服务器由被动检测变为主动检测时执行的命令(也就是当分布式主机不发送检测命令时中心服务器执行的命令),正常情况下不执行这个命令。