注:


本部分参考了官方文档和田逸的文章<<看我出招之:我用Nagios(技术细节)>>来修改完成.




4.典型配置


之前已经说过nagios要用起来,就必须修改配置文件,增加要监控的主机和服务才行.在具体做这个动作之前,下面的概念必须要了解.


 


1)预备知识


Nagios自己定义了一套规则用于配置文件,其中最重要的概念就是”对象”----object.通俗的理解:假定我们首先定义了”性别”这个对象,它的值只可能是男,女,人妖等等,然后定义某人为一个对象,例如张三,定义张三的时候有”性别”这个属性,它的值就必须来源了之前定义的性别这个对象,要么是男是女,或者是人妖.


在Nagios里面定义了一些基本的对象,一般用到的有:


联系人

contact

?

监控时间段

timeperiod

7X24 小时不间断还是周一至周五 ,

被监控主机

host

,

监控命令

command

nagios 发出的哪个指令来执行某个监控 ,

被监控的服务

service

,80 端口是否开 ,

另外,多个被监控主机可以定义为一个主机组,多个联系人可以被定义为一个联系人组,多个服务还能定义成一个服务组呢.


回到上面的例子,定义张三需要之前定义的性别,我们定义一个被监控的服务,当然就要指定被监控的主机,需要监控的时间段,要用哪个命令来完成这个监控操作,出了问题向哪个联系人报告.


所有这些对象绝对多数都是需要我们手动定义的,这就是nagios的安装显得复杂的地方.其实了解了原理,做一遍之后余下的工作就是复制粘贴了.下面就开始动手.


 


2)将示例配置文件复制为真实配置文件名


cd /usr/local/nagios/etc


cp cgi.cfg-sample cgi.cfg


cp commands.cfg-sample commands.cfg


cp localhost.cfg-sample localhost.cfg


cp nagios.cfg-sample nagios.cfg


cp resource.cfg-sample resource.cfg


 


3)修改配置文件


修改nagios的主配置文件nagios.cfg


vi nagios.cfg


注释行 #cfg_file=/usr/local/nagios/etc/localhost.cfg[2],然后把下面几行的注释去掉: 


cfg_file=/usr/local/nagios/etc/contactgroups.cfg  //



cfg_file=/usr/local/nagios/etc/contacts.cfg       //



cfg_file=/usr/local/nagios/etc/hostgroups.cfg     //



cfg_file=/usr/local/nagios/etc/hosts.cfg          //



cfg_file=/usr/local/nagios/etc/services.cfg       //



cfg_file=/usr/local/nagios/etc/timeperiods.cfg    //

注释掉就说明不使用这个文件,去掉了注释就是需要使用这个文件.


改check_external_commands=0为check_external_commands=1 .这行的作用是允许在web界面下执行重启nagios、停止主机/服务检查等操作。


把command_check_interval的值从默认的1改成command_check_interval=10s(根据自己的情况定这个命令检查时间间隔,不要太长也不要太短)。


主配置文件要改的基本上就是这些,通过上面的修改,发现/usr/local/nagios/etc并没有文件hosts.cfg等一干文件,怎么办?稍后手动创建它们。


 


修改CGI脚本控制文件cgi.cfg


vi cgi.cfg


第二个要修改的配置文件是cgi.cfg,它的作用是控制相关cgi脚本。先确保use_authentication=1。曾看过不少的文章,都是建议把use_authentication的值设置成”0”来取消验证,这是一个十分糟糕的想法。接下来修改default_user_name=test ,再后面的修改在下表列出:


 authorized_for_system_information=nagiosadmin,test



authorized_for_configuration_information=nagiosadmin,test



authorized_for_system_commands=test  //



authorized_for_all_services=nagiosadmin,test



authorized_for_all_hosts=nagiosadmin,test



authorized_for_all_service_commands=nagiosadmin,test



authorized_for_all_host_commands=nagiosadmin,test

那么上述用户名打那里来的呢?是执行命令 /usr/local/apache/bin/htpasswd –c /usr/local/nagios/etc/htpasswd test 所生成的,这个要注意,不能随便加没有存在的验证用户,为了安全起见,不要添加过多的验证用户。


 


定义监控时间段,创建配置文件timeperiods.cfg


[root@localhost etc]# vi timeperiods.cfg


define timeperiod{



        timeperiod_name         24x7   // 时间段的名称 ,



        alias                   24 Hours A Day,7Days A Week



        sunday                  00:00-24:00



        monday                  00:00-24:00



        tuesday                 00:00-24:00



        wednesday               00:00-24:00



        thursday                00:00-24:00



        friday                  00:00-24:00



        saturday                00:00-24:00



        }

定义了一个监控时间段,它的名称是24x7,监控的时间是每天全天24小时


 


定义联系人,创建配置文件contacts.cfg


[root@localhost etc]# vi contacts.cfg


define contact{



        contact_name                    test   // 联系人的名称 ,



        alias                           sys admin



        service_notification_period     24x7



        host_notification_period        24x7



        service_notification_options    w,u,c,r



        host_notification_options       d,u,r



        service_notification_commands   notify-by-email



        host_notification_commands      host-notify-by-email



        email                           yahoon@test.com



        pager                           1338757xxxx



        address1                        xxxxx.xyyy@icq.com



        address2                        555-555-5555



        }

创建了一个名为test的联系人,下面列出其中重要的几个选项做说明


service_notification_period     24x7



, 这个时间段就是上面在 timeperiods.cfg 中定义的 .

host_notification_period        24x7



, 这个时间段就是上面在 timeperiods.cfg

service_notification_options    w,u,c,r



w— 报警 (warning),u— 未知 (unkown),c— 严重 (critical), 或者 r— 从异常情况恢复正常 , 在这四种情况下通知联系人 .

host_notification_options       d,u,r



d­­­­— 当机 (down),u— 返回不可达 (unreachable),r— 从异常情况恢复正常 , 在这 3

service_notification_commands   notify-by-email



notify-by-email, 这个命令是在 commands.cfg 中定义的 , 作用是给联系人发邮件 . 至于 commands.cfg

host_notification_commands      host-notify-by-email



,

email                           yahoon@test.com



, 联系的人 email

pager                           1338757xxxx



, 如果支持短信的通知的话 , 这个就很有用了 .

alias 是联系人别名 ,address 是地址 意义不大 .

按照上面的方式简单的复制修改就可以创建多个联系人了.


 


下面就可以将多个联系人组成一个联系人组,创建文件contactgroups.cfg


[root@localhost etc]# vi contactgroups.cfg


define contactgroup{



        contactgroup_name               sagroup   



// 联系人组的名称 ,



        alias                   System Administrators        //



        members                 test 



// 组的成员 , 来自于上面定义的 contacts.cfg,



        }

 


定义被监控主机,创建文件hosts.cfg


[root@localhost etc]# vi hosts.cfg


define host{



        host_name                       nagios-server



// 被监控主机的名称 ,



        alias                           nagios server



        //



        address                         192.168.0.111



        // 被监控主机的 IP 地址 , 我现在暂时先填本机的 IP



        check_command                   check-host-alive



        // 监控的命令 check-host-alive, 这个命令来自 commands.cfg,



        max_check_attempts              5



        //



        check_period                    24x7



        // 检查的时间段 24x7, 同样来自于我们之前在 timeperiods.cfg



contact_groups                  sagroup



        // 联系人组 , 上面在 contactgroups.cfg 中定义的 sagroup



notification_interval           10



        // 提醒的间隔 , 每隔 10



notification_period             24x7



        // 提醒的周期 , 24x7, 同样来自于我们之前在 timeperiods.cfg



notification_options            d,u,r



// 指定什么情况下提醒 , 具体含义见之前 contacts.cfg



        }

通过简单的复制修改就可以定义多个主机了.我们在这加上另外两台机器:


名为dbpi的linux主机,ip为192.168.0.111


名为yahoon的xp主机,ip为192.168.0.28


 


与联系人可以组成联系人组一样,多个主机也可以组成主机组.创建文件hostgrops.cfg


[root@localhost etc]# vi hostgroups.cfg


define hostgroup{



        hostgroup_name          sa-servers  //



        alias                   sa Servers  //



        members                 nagios-server



// 组的成员主机 , 多个主机以逗号相隔 , 必须是上面 hosts.cfg



        }

 


下面是最关键的了,用nagios主要是监控一台主机的各种信息,包括本机资源,对外的服务等等.这些在nagios里面都是被定义为一个个的项目(nagios称之为服务,为了与主机提供的服务相区别,我这里用项目这个词),而实现每个监控项目,则需要通过commands.cfg文件中定义的命令.


例如我们现在有一个监控项目是监控一台机器的web服务是否正常, 我们需要哪些元素呢?最重要的有下面三点:首先是监控哪台机,然后是这个监控要用什么命令实现,最后就是出了问题的时候要通知哪个联系人?


 


定义监控的项目,也叫服务,创建services.cfg


[root@localhost etc]# vi services.cfg


#service definition



define service{



        host_name               nagios-server



        // 被监控的主机 ,hosts.cfg



        service_description     check-host-alive



        // 这个监控项目的描述 ( 也可以说是这个项目的名称 ), 可以空格 ,



        check_command           check-host-alive



        // 所用的命令 , 是 commands.cfg



        max_check_attempts      5



        normal_check_interval   3



        retry_check_interval    2



        check_period            24x7



        // 监控的时间段 , 是 timeperiods.cfg



        notification_interval   10



        notification_period     24x7



        // 通知的时间段 , , 是 timeperiods.cfg



        notification_options    w,u,c,r



        // 在监控的结果是 wucr 时通知联系人 , 具体含义看前文 .



        contact_groups          sagroup



        // 联系人组 , 是 contactgroups.cfg



        }

可以看到基本上所有的成员都是已经定义的.同样的将上面的内容复制修改,就可以加上另外两个监控项目:分别监控yahoon和dbpi是否存活


这样整个的配置过程就结束了.虽然功能很简单,但是已经为以后扩展打下了良好的基础.可以放心的告诉大家,以后的工作基本都是复制粘贴啦!!!


 


在运行nagios之前首先做测试


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


看到下面这些信息就说明没问题了


Total Warnings: 0



Total Errors:   0



Things look okay - No serious problems were detected during the pre-flight check

如果有问题的话就可以按照输出信息来排查


 


作为守护进程后台启动nagios


/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg


 


还等什么,登陆[url]http://192.168.0.111/nagios/[/url]来查看吧.点左边的 Host Detail