Nagios学习笔记之(五)后期维护

 
前言:前面都已经把整个Nagios算是搭建起来了,现在就是来想想在以后的工作中都需要注意什么,以及怎么把工作做的简化、快速、安全。
 
后期维护就是后续的琐碎的工作,例如:增加监控主机、调整阀值、检查配置文件等等。
总结如下:
1.如何更快速的增加主机?
2.如何调整合适的阀值?
3.如何保证nagios稳定的运行?
4.定期查看日志、pnp图,了解监控情况。
 
一、首先说下如何更快速的增加主机?
a.我们都知道Nagios的配置文件都在/usr/local/nagios/etc/下,可以在其新建个servers目录来存在后续新增的主机配置文件,而不用放在默认的object里,也不更改其默认的配置文件,这样在以后排错就有针对性。
b.再一个就是如何快速的增加主机,也就是批量增加,利用脚本可以帮你实现。
 
以下内容为朋友(xiaojun.wang)提供:
批量脚本的思路是这样的:
需要东西:一个批量脚本、一个Linux模版、一个Windows模版、一个IP对应主机名的列表文件。
最终实现:每个主机以及对应的服务为单独的配置文件,文件名为主机名-ip.cfg的格式,方便快速的明白此配置文件对应的主机。这样也方便了出了问题然后排错,可以快速定位。
可以这么设计:
servers/Create.sh                        #批量脚本
servers/Linux.template                   #Linux主机模版
servers/Windows.template                 #Windows主机模版
servers/list.txt                         #IP对应主机名的列表文件
 
1.批量脚本:
vim servers/Create.sh
 
  1. #!/bin/bash 
  2.  
  3. #author: xiaojun.wang 
  4.  
  5. usage () { 
  6.         echo -en "USAGE: $0 [host list] or $0 [template] [host list]\nFor example: $0 host.template host.list(Field : [IP] [HOST NAME])\n" 1>&2 
  7.         exit 1 
  8.  
  9. if [ $# -gt 2 ];then 
  10.         usage 
  11.         exit 1 
  12. fi 
  13.  
  14. case "$#" in 
  15.         2) 
  16.                 template=$1 
  17.                 host_list=$2 
  18.         ;; 
  19.         1) 
  20.                 template='host.template' 
  21.                 host_list=$1 
  22.         ;; 
  23.         0) 
  24.         #       template='host.template' 
  25.         #        host_list='host.list' 
  26.                 usage 
  27.         ;; 
  28. esac 
  29.  
  30. if [ ! -f "${template}" ];then 
  31.         echo "template : ${template} not exist!" 1>&2 
  32.         exit 1 
  33. fi 
  34.  
  35. if [ ! -f "${host_list}" ];then 
  36.         echo "host list : ${host_list} not exist!" 1>&2 
  37.         exit 1 
  38. fi 
  39.  
  40. cat ${host_list}|\ 
  41. while read ip hostname 
  42. do 
  43.         echo "${ip}"|grep -oP '^\d{1,3}(\.\d{1,3}){3}$' >/dev/null 2>&1 || Field='not ip' 
  44.         if [ "${Field}" = 'not ip' ];then 
  45.                 echo "${ip} not ip!" 1>&2 
  46.                 exit 1 
  47.         fi 
  48.         host_cfg="${hostname}-${ip}.cfg" 
  49.         cp ${template} ${host_cfg} 
  50.         sed -i "s/HOST_NAME/${hostname}/g;s/ADDRESS/${ip}/g" ${host_cfg} 
  51. done 
 
2.Linux主机模版:(自己任意即可,写好要监控的项目)
 
  1. define host{                                           #主机配置 
  2.         use linux-server,hosts-pnp  
  3.         host_name HOST_NAME                            #这个就是到时脚本写入的主机名 
  4.         alias HOST_NAME; A longer name for the server 
  5.         address ADDRESS ; IP address of the server     #脚本要写入的ip 
  6. define service{ 
  7.         use generic-service,services-pnp 
  8.         host_name HOST_NAME                            #同上 
  9.         service_description CPU Load 
  10.         check_command check_nrpe!check_load 
  11. define service{ 
  12.         use generic-service,services-pnp 
  13.         host_name HOST_NAME 
  14.         service_description Current Users 
  15.         check_command check_nrpe!check_users 
  16. define service{ 
  17.         use generic-service,services-pnp 
  18.         host_name HOST_NAME 
  19.         service_description Disk Free Space / 
  20.         check_command check_nrpe!check_root 
  21. define service{ 
  22.         use generic-service,services-pnp 
  23.         host_name HOST_NAME 
  24.         service_description Total Processes 
  25.         check_command check_nrpe!check_total_procs 
  26. define service{ 
  27.         use generic-service,services-pnp 
  28.         host_name HOST_NAME 
  29.         service_description Zombie Processes 
  30.         check_command check_nrpe!check_zombie_procs 
  31. define service{ 
  32.         use             generic-service,services-pnp 
  33.         host_name HOST_NAME 
  34.         service_description     SSH 
  35.         check_command   check_ssh 
  36.         register                0 
  37.         } 
        
3.Windows主机模块也是一样的,这里就略了。
 
4.列表文件,格式如下:
192.168.1.1         Http
192.168.1.2         Mail
 
使用格式:
./Create.sh linux.template list.txt                   #这样就增加了两个主机以及服务了。
这样以后批量就很方便了。
 
二、如何调整合适的阀值?
我们都知道,报警是根据设定的阀值来的。
例如:进程数,默认警告的阀值为150,严重的阀值为200,假如目标主机为Mail,进程数长时间保持在200以上,这时候就需要调整nrpe的阀值了。
那么我们如何来判定多少的阀值合适呢?
其实可以写个简单的命令来定时收集这些信息,例如:每5分钟收集一次进程数。
crontab -e
*/5 * *** ps -ef |wc -l >> /total_procs.txt
 
这样就可以来分析目标主机的进程数在一个什么范围比较合适了。
 
还有一个方便就是检测失败次数的调整,有的时候可能因为网络短时间的延迟,这样如果失败检测次数过少,就会有大量的报警邮件,这样以后报警邮件多了,人的警惕意识也会有所下降,所以给失败检测次数一个合理的值也是非常有必要的。
这里其实说的非常有限,只是告诉要有这个意识,nagios本身默认的东西很多是合适的,但更多的是需要调整的!
 
三、如何保证nagios稳定的运行?
其实这也是个老生常谈的问题,假如Nagios都宕机了,谁来报警?
所以必要的保证Naigos的安全也是很重要的。无非也就是关闭一些不必要的端口、不必要的服务,只提供Nagios必须的端口,这样很大程度的增强了安全性。还要经常检查其配置文件,以及log日志。
也可以写个简单的脚本来监控本机nagios进程:ps -ef |grep nagios |grep -v grep |wc -l 用个if语句来判断下是否为0,为0就发邮件通知即可。
这个其实也就是提醒要有这个意识!
 
四、定期查看日志、pnp图,了解监控情况
下面呢,就是来说说nagios web页面的事了。
首先就是可以没事看看当天的Event Log
 

Nagios学习笔记之(五)后期维护_iOS

再者呢就是看看Alerts,有的时候可能你没收到报警邮件,也许是没达到失败检测次数,但看看还是很有必要的
 

Nagios学习笔记之(五)后期维护_nagios_02

还有可能就是看看pnp绘图了,可以分析出那个时间段,目标主机存在问题
 

Nagios学习笔记之(五)后期维护_iOS_03

 
行了,先说到这吧,想到什么再加。