Nagios 配置和使用 (三)


转载时请务必以超链接形式标明文章 原始出处和作者信息及本版权声明
链接:http://www.dbasky.net/archives/2009/01/nagios-1.html
接上一篇文章,谈谈nagios的配置和使用
   配置前的处理

最主要的工作是创建nagios用户及其属组,让nagios的运行用户为nagios而不是root。再把目录/usr/local/nagios的属主设置为nagios,以保证系统的安全。Nagios可以以root用户运行,但并不推荐这样做。用下面的步骤来完成上述过程:

1、添加系统帐户nagios: useradd nagios 就很容易的把用户和组nagios添加到系统。有的类型的linux发行版添加用户和组要麻烦一些-需要手动添 加组,然后再执行 useradd -g nagios nagios这样的操作。在实际的运用场景,nagios用户并没有必要作为系统用户来登录linux系统,因此可以不必设置nagios的用户密码,甚 至可以把nagios用户的登录shell设置成/bin/false。

2、 更改目录属组:chown -R nagios.nagios /usr/local/nagios 。请注意,有的unix/linux的版本用户和属组分隔符号不是".",可能会是这样的形式 chown -R nagios:nagios /usr/local/nagios 。

3、 sendmail。看看sendmail是否正常运行?我们需要使用sendmail来发送故障报警信息,所以这个包必须能够正常工作。Sendmail 分为服务器和客户端两部分,有2种发送报警邮件的方式:(1)nagios所在的机器通过sendmail客户端程序把邮件发送到专门的邮件服务器,再由 邮件服务器把消息发送到用户邮箱。(2)邮件客户端和服务器端就用nagios所在系统sendmail。第一种方式用起来非常规范,但更麻烦,例如需要 做地址解析、修改邮件服务器的配置;另外还有一个问题-它还依赖别的系统,增加了故障点和复杂度。第二种方法十分简单,只需启动sendmail服务即 可,而且它不再依赖于别的系统和服务。在我工作的实际场景,这两种方法都使用,用专门的邮件服务器会有发送延迟的情况(因为邮件服务器要处理很多其他用户 邮件的收发);而直接用sendmail做服务器和客户端就异常简单和方便了。非常幸运的是,几乎所有的linux/unix发行版都默认安装 sendmail,费了这么多笔墨,其实就做一个动作-把sendmail服务运行起来。

4、 手机短信发送工具。我现在的公司是sp,有自己的短信通道,直接把发送短信的客户端程序sms_send拷贝到目录/usr/local/bin/下。如 果没有短信下发的网关通道,那怎么办呢?网络上有很多短信发送的客户端程序,很有名的就是smsclient,把它下载下来,解包后安装。不要忘记购买手 机modem和手机卡,modem只支持SIM卡而不支持cdma。安装完smsclient软件和硬件modem后,测试一下是否正常。如果没有 modem又怎么办?办法还是有的:让你的手机号可以接受邮件,这需要你去营业厅开通这项功能。短信报警功能是最有用的功能,我们不可能成天盯着监视屏 幕,也不可能成天接受电子邮件,但我们的手机却可以24小时在线,只要被监控对象发生故障,马上就可以收到故障报警短信。以前,我很怕放长假,因为最担心 关键的设备或服务在假期出故障而自己不知道,所以放假就变成了值班;想必很多网络管理员都有类似的经历。在我动手部署nagios以前,曾经在网上搜索关 于nagios配置的文章,发现绝大部分都没有介绍使用手机短信这个方便的功能,真是遗憾呀!在此,强烈建议启用nagios的短信故障报警功。


一、apache 配置。

我 们分两个步骤来完成这个配置。第一步是修改apache的配置文件httpd.conf,这里的文件路径是 /usr/local/apache/conf/httpd.conf 。把apache的运行用户[1]和运行组改成nagios,往下把下面的行追加到文件httpd.conf的末尾:

   

#setting for nagios

ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin

<Directory "/usr/local/nagios/sbin">     //Cgi文件所在目录

    AuthType Basic

    Options ExecCGI

    AllowOverride None

    Order allow,deny

    Allow from all

    AuthName "Nagios Access"

    AuthUserFile /usr/local/nagios/etc/htpasswd  //验证文件路径

    Require valid-user

</Directory>

  

Alias /nagios /usr/local/nagios/share

<Directory "/usr/local/nagios/share">   //nagios页面文件目录

    AuthType Basic

    Options None

    AllowOverride None

    Order allow,deny

    Allow from all

    AuthName "nagios Access"

    AuthUserFile /usr/local/nagios/etc/htpasswd  //验证文件路径

    Require valid-user
 

上 述文本块的作用是对nagios的目录进行用户验证,只有合法的授权用户才可以访问nagios的页面文件。第二步是生成用户验证文件:只要执行命令 /usr/local/apache/bin/htpasswd -c /usr/local/nagios/etc/htpasswd sery ,就会生成web的合法访问用户sery;命令交互执行,需要输入2次密码,然后就在文件/usr/local/nagios/etc/htpasswd 写入一行-第一个字段是刚生成的用户名,第二个是加密后的密码,如果还要添加更多的用户,执行命令 htpasswd 就不需要选项 "-c",否则就会覆盖所有已经生成的行。

配 置完成后,执行/usr/local/apache/bin/apachctl -t  检查apache配置文件是否有语法错误,无误后用/usr/local/apache/bin/apachctl start & 把apache启动,然后从另外的机器的浏览器输入nagios 的访问地址(如:http://ip/nagios),如果正常,将出现下图的登录验证窗口等待用户输入

 

输入用htpasswd创建的用户名和密码测试一下,没有问题的话,进行下一步配置操作
二、nagios配置

 

刚安装完成的nagios,其配置文件的目录是/usr/local/nagios/etc,下图是其etc目录的文件:

 

先 把这些文件改名,如 cgi.cfg-sample改成cgi.cfg ,用命令cp cgi.cfg-sample cgi.cfg ...依样把余下的几个*.cfg-sample都复制成*.cfg文件。从nagios2.6版开始,不用修改配置文件localhost.cfg就可以直 接运行../bin/nagios -v nagios.cfg验证程序是否能正常运行(nagios2.5及以前版本的最小运行的配置文件是minimal.cfg,但需要修改这个文件多处才能 验证成功)。当然,我们不能指望这个最小的配置文件能够满足实际的需求,因此,需要对现有的配置文件进行修改,其次增加自定义的一些配置文件。这里,我们 分两步进行:先修改配置文件再增添自定义文件。

  

(一)   修改配置文件

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.cfg,它的作用是控制相关cgi脚本。先确保use_authentication=1。曾看过不少的文章,都是建议把 use_authentication的值设置成"0"来取消验证,这是一个十分糟糕的想法。接下来修改default_user_name=sery ,再后面的修改在下表列出:

  

authorized_for_system_information=nagiosadmin,sery

authorized_for_configuration_information=nagiosadmin,sery

authorized_for_system_commands=sery  //多个用户之间用逗号隔开

authorized_for_all_services=nagiosadmin,sery

authorized_for_all_hosts=nagiosadmin,sery

authorized_for_all_service_commands=nagiosadmin,sery

authorized_for_all_host_commands=nagiosadmin,sery
 

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

     第3个修改的配置文件是misccommands.cfg,这个文件的主要功能是用来发送报警短信和报警邮件,对其的修改如下所示:


#host-notify-by-sms   //发送短信报警

define command {

       command_name      host-notify-by-sms

       command_line      /usr/local/bin/sms_send "Host $HOSTSTATE$ alert for $HOSTNAME$! on '$DATETIME$' " $CONTACTPAGER$

       }

  

#service notify by sms  //发送短信报警

define command {

       command_name     service-notify-by-sms

       command_line     /usr/local/bin/sms_send "'$HOSTADDRESS$' $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$

       }
 

主机和服务的邮件报警通知已经在文件中,不须更改。也可以把短信和邮件报警通知这些配置块写到文件commands.cfg中,效果是一样的。

  

(二)增加新的配置文件

先创建简单的配置文件timeperiods.cfg,其内容如下:

define timeperiod{

        timeperiod_name 24x7

        alias           24 Hours A Day, 7 Days 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

        }
 

这个文件的定义明晰易懂,不多做说明。另建议7X24小时监控。

   第二个手动创建的配置文件是 contacts.cfg,其格式如下:

define contact {

        contact_name         sa    //不要有空格

        alias                system administrator

        service_notification_period    24x7

        host_notification_period       24x7

        service_notification_options   w,u,c,r

        host_notification_options       d,u,r

        service_notification_commands  service-notify-by-sms,service-

notify-by-email  //这个命令读配置文件miscommands.cfg

        host_notification_commands     host-notify-by-email,host-noti

fy-by-sms      //这个命令读配置文件miscommands.cfg

        email                          sery@163.com

        pager                          13333333333 //手机号,收报警短信

        }     //不要把这个符号写掉了

  

define contact {

        contact_name         sery

        alias                system administrator

        service_notification_period    24x7

        host_notification_period       24x7

        service_notification_options   w,u,c,r

        host_notification_options       d,u,r

        service_notification_commands  service-notify-by-sms,service-

notify-by-email

        host_notification_commands     host-notify-by-email,host-noti

fy-by-sms

        email                         sery@sohu.com

        pager                          13312345678

        }
 

上 面的文件定义了2个联系人,如果有更多联系人的话,照这个格式在后面追加即可。服务通知选项 (service_notification_options)与主机通知选项(host_notification_options)的几个选项在这里 说明一下:w-warning , u-unknown,c-critical,r-recovery;d-down,u-unreachable,注意一下,主机报警和服务报警有些差异。

紧接着的第三个手动创建的配置文件是contactgroups.cfg文件,这个文件是依照上一个文件contacts.cfg来的,contactgroups文件相对简单一些,其格式如下:

  

define contactgroup {

        contactgroup_name    sagroup  //不要用空格

        alias                system administrator group

        members              sa,sery  //本例有2个成员

}
 

多个成员之间用逗号做分界符,如果有更多的联系组,就依相同的格式在文件中追加余下的组。

关键的角色终于登场,这就是配置文件hosts.cfg。下面是我定义的两个主机的基本样式:

#define monitor  host

  

############################################

# Wangjing IDC servers                                          #

############################################

define host {

       host_name                  nagios-server

       alias                      nagios server

       address                    61.x..x.49

       contact_groups             sagroup //多个联系组用逗号分隔,数据来源于contactgroups.cfg

       check_command              check-host-alive

       max_check_attempts         5

       notification_interval      10    //值可调,大小什么值合适需自己测定

       notification_period        24x7

       notification_options        d,u,r

       }

  

define host {

       host_name                  24-25

       alias                      server 24-25

       address                    202.X.24.25

       contact_groups             sagroup

       check_command             check-host-alive //down机就发报警通知

       max_check_attempts         5

       notification_interval      10

       notification_period        24x7

       notification_options        d,u,r

       }
 

更多的主机依此格式逐个追加进来。小技巧,如果是连续的ip段,最好自己写个脚本生成hosts.cfg文件,为了以后维护方便,尽可能在文件中使用易读的注释(如本例# Wangjing IDC servers            #)。

再一个重量级的配置文件是services.cfg,没有这个文件,什么监控也没用。下面给出一个样式文件:

#service definition

  

###########################################

#  Wangjing IDC servers service for host-live            #

###########################################

define service {

        host_name        nagios-server  //来源:hosts.cfg

        service_description   check-host-alive

        check_period          24x7

        max_check_attempts    4

        normal_check_interval 3

        retry_check_interval  2

        contact_groups        sagroup  //来源:contactgroups.cfg

        notification_interval   10

        notification_period     24x7

        notification_options    w,u,c,r

        check_command           check-host-alive  //检查主机是否存活

        }

define service {

        host_name        74-210

        service_description   check_tcp 80

        check_period          24x7

        max_check_attempts    4

        normal_check_interval 3

        retry_check_interval  2

        contact_groups        sagroup

        notification_interval   10

        notification_period     24x7

        notification_options    w,u,c,r

        check_command      check_tcp!80 //检查tcp 80端口服务是否正常

        }
 

书写时要注意的是,check_tcp与要监控的服务端口之间要用"!"做分隔符。如果服务太多,以应该考虑用脚本来生成。

主机组配置文件hostgroups.cfg,这是一个可选的项目,它建立在文件hosts之上,其格式如下:

define hostgroup {

         hostgroup_name  sa-servers

         alias           sa servers

         members         nagios-server,24-25,24-26  //用逗号间隔多个主机

         }
 

多个主机组依上面的格式逐个追加上去。后面给一个主机组的截图。

 

  

千辛万苦,终于把这些配置给做好保存,现在几乎有点迫不及待了,运行程序/usr/local/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
 

这样的情况,大功告成;但我却没有这么幸运,修改了好多个地方才成功。不过值得庆幸的是,这个校验的错误报告时非常有用的(不象有的系统的帮助文档中看不中用)。看我故意设置的一个错误产生的输出:

[root@netmonitor nagios]# bin/nagios -v etc/nagios.cfg

  

Nagios 2.5

Copyright (c) 1999-2006 Ethan Galstad (http://www.nagios.org)

Last Modified: 07-13-2006

License: GPL

  

Reading configuration data...

  

Error: Could not find any host matching 'nagios-server'

Error: Could not expand member hosts specified in hostgroup (config file '/usr/local/nagios/etc/hostgroups.cfg', starting on line 2)

...........................
 

它 告诉我配置文件在什么位置产生错误(实际上我故意在配置文件里加了一个注释符号来测试)。验证通过以后,就可以执行命令 /usr/local/nagios -d  /usr/local/nagios/etc/nagios.cfg 把nagios作为守护进程。然后用ps -aux | grep nagios 看进程是否处于运行状态。到这一步,nagios服务基本上算是配置完毕。做hosts.cfg、services.cfg等配置时,可以运用一些小技巧 来减少出错的概率:如先定义少许的主机、服务,待校验无误后再追加。

     三、验收 

用浏览器输入nagios所在服务器的ip及目录,如http://x.x.x.x/nagios,再输验证所需的用户名和密码,就可点击页面右边的相关连接来查看各种状态。关掉某个被nagios监控主机的服务或者拔掉某个服务器的网线,等几分钟,点击超连接"Service Detail"观察页面状态看是否有红色的醒目的报警出现。(完)!!

发表评论

Close