Nagios (监控)

来源:互联网 发布:运动内衣知乎 编辑:程序博客网 时间:2024/06/10 21:46
1.安装nagios
             前提:nagios使用web监控界面,所有需要安装web服务器(sudo apt-get install apache2 )
    sudo apt-get  install nagios3 nagios-plugins nagios-images     (如果没有安装邮件服务,则会自动安装Postfix。)
            安装过程会创建一个用户 nagiosadmin ,并要求设置改用户的密码(登录界面:192.168.1.10/nagios3 )

    nagios3的配置文件位于/etc/nagios3/目录下,其插件的配置文件位于/etc/nagios-plugins/目录下

2.配置
   2.1权限设置
         2.1.1将默认的账号nagiosadmin替换成ng3admin:
          sudo sed -i 's/nagiosadmin/ng3admin/g'  /etc/nagios3/cgi.cfg    ;验证失败
         2.1.2密码修改
           sudo htpasswd /etc/nagios3/htpasswd.users  nagiosadmin
         2.1.3添加账号(比如账号xiebo)
            sudo htpasswd /etc/nagios3/htpasswd.users  xiebo

         2.1.4登录监控界面
                http://192.168.1.10/nagios3/

   2.2启用外部命令
         默认情况下,出于安全考虑,nagios在默认配置中禁用了外部命令(指web服务通过CGI来对nagios进行的操作,比如临时禁用对某个服务的监控,立即执行对某个服务的状态检查等。)。
         如需要开启外部命令,则可以按照下列步骤启用它。修改nagios.cfg,将check_external_commands改为1:
         sudo vi /etc/nagios3/nagios.cfg
             [...]
             
check_external_commands=1
             [...]
 
     执行下面的命令修改权限:
         sudo service nagios3 stop

          sudo dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
          sudo dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
          (如果不适用dpkg-statoverride,单单用chown/chmod修改权限的话,在软件包升级apt-get upgrade时,权限会被覆盖掉。)

         sudo service nagios3 start


3.nagios监控设置
    3.1   Nagios3的主配置文件是/etc/nagios3/nagios.cfg,其他的配置文件都会被其调用。(其实都可以放在一个文件中,但为了条理清楚,管理方便而分开的)
     默认情况下,nagios3在安装的时候回创建一个/etc/nagios3/conf.d目录,并在该目录下创建一些配置文件。这些文件的配置内容,大多是nagios在安装的过程中自动检测得结果。他们的作用是:
      contacts_nagios2.cfg ---定义了联系人,用于发送通知;
      extinfo_nagios2.cfg ---要监控的主机和服务的扩展信息(比如为主机定义的图标等)
      generic-host_nagios2.cfg ---主机定义模块
      generic-service_nagios2.cfg ---服务定义模块
      host-gateway_nagios2.cfg --要监控的默认网关的定义
      hostgroup_nagios2.cfg --对监控的主机进行分组(比如servers,wireless,switches等等)
      localhost_nagios2.cfg ---本机监控定义
      services_nagios2.cfg -- 要监控的各个主机上的各种服务
     timeperiods——nagios2.cfg ---对监控,通知的时间段定义

(该目录下的所有.cfg文件都会被nagios读取,所以,完全可以在该目录下创建自己的配置文件)


3.2 联系人设置 (系统发生故障时发送通知给联系人)
      sudo vi /etc/nagios3/conf.d/contacts_nagios2.cfg
define contact{   #
        contact_name                    root            #联系人
        alias                           Root                   #别名
        service_notification_period     24x7      #24*7不间断的时间都愿意接收nagios发出来的通知(服务,主机的通知)
        host_notification_period        24x7
        service_notification_options    w,u,c,r     #服务通知选项;
        host_notification_options       d,r            #主机通知选项;
        service_notification_commands   notify-service-by-email      #邮件方式
        host_notification_commands      notify-host-by-email
        email                           xiebo@mapgoo.net     #通知的接收者
        }

define contactgroup{  #联系人组
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 root      #成员
        }
 
 其中: service_notification_options针对“服务"的通知选项;w=Warning,服务状态为警告时;u=Unknown,未知;c=Critical,危急;r=Recoveries,恢复正常;f=Flapping,服务频繁重启时;n=None,不发送通知;
              host_notification_options  针对“主机”的通知选项;d=Down,主机宕机时;u=Unreachable,主机无法联系时;r=Recoveries,恢复正常;f=Flapping,频繁重启;n=None,不发送通知。


 3.3主机设置 
     可以创建自己的主机配置文件,只需要放在/etc/nagios3/conf.d/目录下,就会被nagios3加载。
    sudo vi /etc/nagios3/conf.d/hosts.cfg
        define host{
        use                     generic-host            #所使用的模块(这里就是generic-host_nagios2.cfg)
        host_name               localhost            #定义一个叫localhost的主机
        alias                   localhost_xiebo        #别名
        address                 127.0.0.1              #地址
        #parents     baidu      ;定义一个父主机(可以没有)
        }

3.4主机组设置
           主机分组后,在nagios监控界面上看起来会比较直观,不容易乱。 
      sudo vi /etc/nagios3/ conf.d/hostgroups_nagios2.cfg
     
# A simple wildcard hostgroup
define hostgroup {
        hostgroup_name  all
                alias           All Servers
                members         *                         # “*”表示所有主机
        }

# A list of your web servers
define hostgroup {
        hostgroup_name  http-servers
                alias           HTTP servers
                members         localhost , Web_server1         #一个组中如果有多个分组用逗号隔开
        }


3.5 服务设置
   使用nagios不单单用来监控主机,更重要的是用它来监控主机上各种服务。
           服务的配置比较复杂,因为不同的服务牵扯到各种不同的监控命令。nagios能否支持相应的服务要看是否安装了相应的插件;在/usr/lib/nagios/plugins/目录下面是已经安装的所有插件;他们的配置文件则位于/etc/nagios-plugins/config/目录下。
           一般来讲,这些插件可以满足日常需求,不过万一没有你需要的可以到下面的网站去找: www.nagiosplugins.org
   
    vi /etc/nagios3/conf.d/services_nagios2.cfg

     define service{
        use                             generic-service         ; 要使用的模板(/etc/nagios3/conf.d/generic-server_nagios2.cfg)
        host_name                       localhost              ;针对的主机
        service_description             Disk Space        ;对监控的服务的描述
        check_command                   check_all_disks!20%!10%     ;检查命令
        }

    
define service {
        
 use                         generic-service 
        hostgroup_name                  ssh-servers    ;针对的“主机组”的名称
        service_description             SSH            
        check_command                   check_ssh    
       notification_interval           0        ; 通知的时间间隔,设置为0,表示只通知一次;如果设置为60,表示每60分钟通知一次。  
} 



远程监控linux
4.用NRPE进行远程监控  (这样就不需要再每台机器上安装nagios,也能获取敏感信息,比如剩余硬盘空间,进程数量,负荷等等)
      NRPE是Nagios Remote Plugin Executor的简称,可以让nagios在远程机器上执行本地检查命令。也就是说,安装NRPE Server的机器,虽然没有安装nagios,也和安装了差不多--远程的nagios可以像检测本机一样,对它进行只有本机上才能进行的各种检测。
     
   4.1安装nagios-nrpe-server:
      sudo apt-get install nagios-nrpe-server
                   修改/etc/nagios/nrpe.cfg 设置nagios服务器的IP地址,并定义检测命令和参数:
       vi /etc/nagios/nrpe.cfg
         [...]
         #把allowed_hosts改为nagios服务器的IP地址
         allowed_hosts=192.168.1.10
         [...]
         command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
         command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
         command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
         command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
         command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200 
         command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -e    #新增此行
         [..]

    4.2 重启nagios-nrpe-server服务
           sudo service nagios-nrpe-server restart

   4.3在安装nagios3的服务器上将安装nrpe服务的主机配置进去
         vi  /etc/nagios3/conf.d/142.cfg
define host{
       use generic-host
      host_name  142_wan
       alias     142_linux
      address    192.168.1.142
       parents                 gateway
           }   
#disk space
define service{
             use generic-service
             host_name 142_wan
             service_description  Disk Space
             check_command check_nrpe_larg!check_all_disks         ;check_all_disks对应被监控文件nrpe.cfg中的命令
              }   
#current users
define service{ 
             use generic-service
             host_name 142_wan
             service_description  Current Users
             check_command check_nrpe_larg!check_users
              }   
#total processes
define service{
             use generic-service
             host_name 142_wan
             service_description  Total Processes
             check_command check_nrpe_larg!check_total_procs
              }   
#currrent load
define service{
             use generic-service
             host_name 142_wan
             service_description  Current Load
             check_command check_nrpe_larg!check_load
              }   

说明:要在被检查的主机上(NRPE服务器上)执行什么样的检测,就在主机的/etc/nagios/nrpe.cfg文件中定义相关的命令,然后在nagios服务上用nrpe调用即可。
           check_nrpe_larg命令是由nagios-nrpe-plugin软件包提供,所以需要安装对应的软件包:
              sudo apt-get install nagios-nrpe-plugin


重启nagios3服务:   sudo service nagios3 restart



远程监控windowsserver
5.通过使用NSClient++,你也可以利用Nagios监控Windows Server
 5.1 windows下下载安装对应的 
NSClient++版本 (http://nsclient.org/nscp/downloads
  5.2 windows下配置NSClient++ (C:\Program Files\NSClient++\nsclient.ini)
    

 [modules]部分的所有模块前面的注释都去掉,除了CheckWMI.dll and RemoteConfiguration.dll这两个

[Settings]部分设置'password'选项来设置密码,作用是在nagios连接过来时要求提供密码.这一步是可选的,我这里方便起见跳过它,不要密码.

[Settings]部分'allowed_hosts'选项的注释去掉,并且加上运行nagios的监控主机的IP.我改为如下这样allowed_hosts=127.0.0.1/32,192.168.0.111 以逗号相隔.这个地方是支持子网的,如果写成192.168.0.0/24则表示该子网内的所有机器都可以访问.如果这个地方是空白则表示所有的主机都可以连接上来.注意是[Settings]部分的,因为[NSClient]部分也有这个选项.

必须保证[NSClient]'port'选项并没有被注释,并且它的值是'12489',这是NSClient的默认监听端口,windows防火墙中要确保开放这个端口



 5.3 nagios服务器上的配置
      5.3.1ubuntu中默认是没有windows.cfg文件,需要手动建立相应的配置文件;在安装nagios时,系统会自动安装相应的模板文件复制一份在相应的位置。
           cp /usr/share/doc/nagios3-common/examples/template-object/windows.cfg  /etc/nagios3/objects/windows.cfg
          (文件夹如果不存在,自己手动创建)
      5.3.2 修改nagios配置文件以启用windows的监控配置(
/etc/nagios3/nagios.cfg)
               cfg_file=/etc/nagios3/objects/windows.cfg
      
      5.3.3 配置/etc/nagios-plugins/config/nt.cfg
                 
# 'check_nt' command definition
              define command {
                           command_name    check_nt
                           command_line    /usr/lib/nagios/plugins/check_nt -H '$HOSTADDRESS$' -p 12489 -v '$ARG1$' -s xiebo
                           }
              # 'check_nscp' command definition
             define command {
                          command_name    check_nscp
                          command_line    /usr/lib/nagios/plugins/check_nt -H '$HOSTADDRESS$' -p 12489 -v '$ARG1$' '$ARG2$' -s xiebo
                         }
 
      5.3.4 配置/etc/nagios3/objects/windows.cfg
              
define host{
                      use             generic-host    ; Inherit default values from a template
                      host_name       winserver37     ; The name we're giving to this host
                      alias           My Windows Server 37    ; A longer name associated with the host
                      address         192.168.1.37    ; IP address of the host
                      parents  gateway
                      }

          
define service{
                     use                     generic-service
                     host_name               winserver37
                     service_description     NSClient++ Version
                     check_command           check_nt!CLIENTVERSION    ;查看windows服务器上NSClient++的版本
                     }
              注释:check_command的命令还有:
                      check_nt!UPTIME                监控windows服务器运行的时间
                      check_nscp!CPULOAD!-l 5,80,90   监控Windows服务器的CPU负载,如果5分钟超过80%则是warning,如果5分钟超过90%则是critical
                      check_nscp!MEMUSE!-w 98 -c 99   监控Windows服务器的内存使用情况,如果超过了98%则是warning,如果超过99%则是critical.
                      check_nscp!USEDDISKSPACE!-l c -w 80 -c 90  监控Windows服务器C:\盘的使用情况,如果超过80%已经使用则是warning,超过90%则是critical (:-l后面接的参数用来指定盘符)
                      check_nscp!SERVICESTATE!-d SHOWALL -l W3SVC   监控Windows服务器的W3SVC服务的状态,如果服务停止了,则是critical
               
          5.3.5 重启nagios服务  service nagios3 restart
 



 6.邮件报警通知
    6.1 sendEmail安装  
         apt-get install sendEmail
   6.2  sendEmail用法
            /usr/bin/sendEmail  -f  发件人邮件  -t  收件人邮件  -s smtp.163.com -u "邮件主题" -xu 用户名 -xp 密码 -m 邮件内容
               eg:   /usr/bin/sendEmail -f 1213@163.net -t 8611@qq.com -s mail.163.net -u "from nagios by xbo" -xu 1213@163.net -xp 1314520china -m justatest
           注释:-f 表示发送者的邮箱
                  -t 表示接收者的邮箱(接收邮件和发送邮件,尽量不要用同一个邮箱帐号,容易出错)
                  -s 表示SMTP服务器的域名或者ip
                  -u 表示邮件的主题
                 -xu 表示SMTP验证的用户名
                  -xp 表示SMTP验证的密码
                  -m 表示邮件的内容
    6.3 修改配置文件  /
etc/nagios3/commands.cfg
            将邮件通知方式改成sendEmail
        
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/sendEmail -f 1213@163.net -t 861859381@qq.com -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -s mail.mapgoo.net -xu 1213@163.net -xp 1314520china -m "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **"
                             }
 
0 0