1、设置Apache2服务器,让apache2启动时加载nagios


       Nagios 安装好之后,我们需要从浏览器去察看 nagios 的监控信息,否则如果直接去看 nagios 的 log 文件,人会疯掉的。

       那么,如何才能从浏览器看到 nagios 的信息呢?这时需要用到 apache2 服务器,也就是基于 apache2 的基础上,通过浏览器去访问 nagios 的数据信息。


       我们要做的工作只是配置一下 apache ,即修改配置文件。要修改的内容在 nagios 编译的时候已经生成,为 sample-config 目录下的 httpd.conf 文件。将该文件的全部内容添加到 apache2 的主配置文件中即可!



2、nagios的授权


       用户在从浏览器中查看 nagios 的监控信息时,我们可以对不同用户作一些限制。比如某些用户可以所有信息,某些用户只能查看部分信息。


       首先,使用 htpasswd 添加授权用户 ( 即可以从浏览器登陆 nagios 监控界面的用户 ) 。如:


htpasswd –c /usr/local/nagios/etc/htpasswd.users nagiosadmin


然后输入密码,即可用该用户名密码登陆 nagios 。


       在这里插一句, nagios 启动之后,所有的信息均在 var 目录下的 log 文件中,所有 nagios 的信息之所以能够在浏览器中显示出来,需要一个工具,就是 CGI ,是它把信息显示在网页上。用户权限的限制正是在这里!


       接下来,在 cgi 的主配置文件中,有一个变量 use_authentication ,默认是 1 ,即需要认证。开始的时候我建议大家把这个值改为 0 ,是为了省事,这样配置起来确实方便,只此一步,就可以查看 nagios 的监控信息。但是,这样的话,就是所有 htpasswd 授权的用户均可以查看所有信息,很不安全。我们需要对不同的用户进行限制。所以建议将 use_authentication 改为 1 ,然后再在接下来后面的几个变量中添加各种权限的用户。如


 

authorized_for_system_information
 
       authorized_for_configuration_information
 
       authorized_for_system_commands
 
       authorized_for_all_services
 
       authorized_for_all_hosts
 
       authorized_for_all_service_commands
 
       authorized_for_all_host_commands
 
        
 。。。。。。

当 use_authentication 值为 0 时,这些变量的赋值全部失效,默认为全部用户。



3、nagios配置文件的关系和理解


       Nagios 能实现的具体的功能正是通过配置文件来表现的。而这些配置文件之间有着千丝万缕的关系。比如 services 依赖于 host,timeperiod 和 contactgroup 等。


Nagios.cfg:


这是 nagios 的主配置文件,它主要负责管理其他所有跟 nagios 有关的文件。他定义了 nagios 的日志文件,缓冲文件,状态信息存放文件等。还有其他所有的配置文件等。这些主要的配置文件如下:


1.        hosts.cfg


define host{

# 这一项是用来定义标识主机的名字。我们用这个名字在host group和service里标识这个主机。一个主机能定义多个服务。使用适当时,宏$HOSTNAME$里存放了这一项的值。


# 这一项用来定义主机的一个完整名字或描述。主要是和使你能理容易的标识一个主机。使用适当时,宏 $HOSTALIAS$ 里存放了这一项的值。


# 这一项是用来定义主机的地址。一般而言是主机的 IP 。当然,你也能够使用一个 FQDN 来标识你的主机,在没有可访问 DNS 服务器服务的情况下这种方法会引起问题。使用适当时,宏 $ HOSTADDRESS $ 里存放了这一项的值。


# 这一项用来定义在检测返回结果不是 OK 时, nagios 重试检测命令的次数。设置这个值为 1 会导致 nagios 一次也不重试就报警。


# 这一项用一个 time period 项的名字来定义在哪段时间内激活对这台主机的主动检测。 time period 是定义在别的文件里的配置项 , 我们可以在这里用名字来引用她。


# 这是一个联系组列表。我们用联系组的名字来引用她们。多个联系组间用“,”来分隔。


# 这一项用来定义当一个服务仍然 down 或 unreachable 时,我们间隔多久重发一次通知给联系组。


# 这一项用一个 time period 定义来标识什么时间段内给联系组送通知。这里我们用 time period 定义的名字来引用她。


# 这一项用来决定发送通知的时机。选项有: d = 当有 down 状态时发送通知, u = 当有 unreachable 状态时发送通知 , r = 当有服务 recoveries 时发送通知, f = 当主机启动或停机时发送通知。如果你给一个 n 选项,那么永远不会发送通知。


            }


2.        hostgroups.cfg


define hostgroup{ 

 
# 
 主机组名称,通常定义得较短
 
# 
 主机组别名,通常定义得较长
 
# 
 主机组成员
 
 
               }


3.        services.cfg


define service{ 

 
# 
 主机名称
 
# 
 服务描述
 
# 
 执行命令
 
# 
 最大失败尝试次数 
 , 
 值为 
 1 
 时只报警不重
 
新检测
 
# 
 常规检测间隔时间,默认为 
 60 
 分钟
 
                                                                              
 (常规检测是指无论服务状态是否正常,
 
检测次数达到“最大次数”时)
 
# 
 失败尝试间隔时间,默认为 
 60 
 分钟
 
                                                                              
 (失败尝试是指服务状态不正常,检查
 
次数达到“最大次数”时)
 
# 
 检测时间段
 
# 
 当服务状态不正常时通知联系人的间隔
 
时间,值为 
 0 
 时不通知联系人
 
# 
 通知联系人时间段
 
# 
 通知联系人选项, 
 w 
 警告, 
 u 
 未知, 
 c
 
危急, 
 f 
 启动和停止, 
 n 
 不发送通知
 
# 
 联系人组
 
 
               }

4.        servicegroups.cfg


define servicegroup{ 

 
# 
 服务组名称,通常定义得较短 
  
 
# 
 服务组别名,通常定义得较长
 
# 
 服务组成员
 
 
               }


5.        contacts.cfg


define contact{


# 这个指令用来定义一个联系人的简称。他会在定义 contactgroup 时被引用到。在相应的环境中,宏定义 $CONTACTNAME$ 会包含这个值。


# 这个指令是为了定义一个联系人的具体的描述。在相应的环境中,宏定义 $CONTACTALIAS$ 会包含这个值。


# 这个指令是为了定义,能够通知 Contact 中定义的那个简称联系人,关于主机有问题或者恢复正常状态的时间段。你可以把他想象成能够通知 Contact 关于主机的在线时间。


# 这个指令是为了定义,能够通知 Contact 中定义的那个简称联系人,关于服务的问题或恢复正常的时间段。


# 这个指令为了定义主机在什么状态下会给联系人发通知。各个参数的描述如下: d= 当主机的状态处于 down 时,发送通知; f= 当主机状态处于 stop 时发送通知。 r= 当主机恢复 up 状态时发送通知。 n= 什么状态下都不发送通知。


# 这个指令为了定义服务在什么状态下会给联系人发通知。各个参数的描述如下: w= 当服务处于警告状态时发送通知 u= 当服务的状态处于 unknown 时,发送通知; f= 当服务状态处于启动和停止时发送通知。 c= 当服务处于 Critical 状态时发送通知。 n= 什么状态下都不发送通知。


# 这个指令是为了定义一个通知联系人关于主机问题或恢复正常的联系手段的一个列表。多个手段之间用逗号隔开。


# 这个指令是为了定义一个通知联系人关于服务问题或恢复正常的联系手段的一个列表。多个手段之间用逗号隔开。


# 这个指令是为了定义联系人的 email 地址。这个将取决于你是如何定义你的 notification commands. 它可以用来给联系人发送紧急邮件。在相应的环境中。宏定义 $CONTACTEMAIL$ 将会包含它的值。


}

6.        contactgroups.cfg

define contactgroup{ 

 
# 
 联系组名称,通常定义得较短
 
# 
 联系组别名,通常定义得较长
 
# 
 联系组成员
 
 
               }


 


7.        timeperiods.cfg


define timeperiod{ 

 
# 
 时间段名称,通常定义得较短
 
# 
 时间段别名,通常定义得较长
 
# 
 星期日时间段
 
# 
 星期一时间段
 
# 
 星期二时间段
 
# 
 星期三时间段
 
# 
 星期四时间段
 
# 
 星期五时间段
 
# 
 星期六时间段
 
 
             }

8.        commands.cfg


   define command{
           command_name        #定义命令的简称
           command_line        #定义当服务进行时Nagios要执行的动作。在命令执行以前,所有合法的宏都要被他们的值代替。