技术指导老师:marion
参考博客:marion.cublog.cn 

      作为系统运维工程师,最担心的不是系统出现什么故障,而是不能在第一时间获知系统出现故障或宕机了,尤其是遇到节假日,系统管理员就很紧张。要改变这种被动的局面,这里我以网络监控软件Nagios为例来介绍一下软件的的配置及使用,并将飞信融合进来以实现服务器故障时即时通知管理员。

 虽然Nagios十分受用,但配置起来确是麻烦,基于这样的原因,我将尽可能详细地向大家讲述我用Nagios的过程以及心得,希望对初学者有所帮助。
 下面以Redhat为例来部署
安装所需软件
一、             解决安装Nagios的依赖关系:
 Nagios基本组件的运行依赖于httpd、gcc和gd。可以通过以下命令来检查nagios所依赖的rpm包是否已经完全安装:
# yum -y install httpd gcc glibc glibc-common gd gd-devel php php-mysql mysql mysql-server
 
此外,要想完整的安装关运行本文中所描述的环境,您得准备一个功能完备的LAMP运行环境。
说明:以上软件包您也可以通过编译源代码的方式安装,只是后面许多要用到的相关文件的路径等需要按照您的源代码安装时的配置逐一修改。此外,您还得按需启动必要的服务,如httpd,mysqld等。
二、             添加nagios运行所需要的用户和组:
# groupadd nagcmd
# useradd -m nagios
# usermod -a -G nagcmd nagios
 
把apache加入到nagcmd组,以便于在通过web Interface操作nagios时能够具有足够的权限:
# usermod -a -G nagcmd apache
 
三、编译安装nagios:
 
# tar zxf nagios-3.1.2.tar.gz –C /usr/local
# cd nagios-3.1.2
# ./configure --with-command-group=nagcmd --enable-event-broker
# make all
# make install
# make install-init
# make install-config
# make install-commandmode
说明:第一步执行make install安装主要的程序、CGI及HTML文件,第二步执行make install-init的步骤,它的作用是把nagios做成一个运行脚本,使nagios随系统开机启动,这是一个很方便的措施。第三步执行 make install-config 把配置文件的例子复制到nagios的安装目录。第四步执行 make install-commandmode 给外部命令访问nagios配置文件的权限。
安装完后 查看一下在/usr/local/nagios下是否存在etc、bin、 sbin、 share、 var这五个目录,如果存在则可以表明程序被正确的安装到系统了。这5个目录的作用是:

bin
Nagios执行程序所在目录,这个目录只有一个文件nagios
etc
Nagios配置文件位置,初始安装完后,只有几个*.cfg-sample文件
sbin
Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录
Share
Nagios网页文件所在的目录
Var
Nagios日志文件、spid 等文件所在的目录

 
为email指定您想用来接收nagios警告信息的邮件地址,默认是本机的nagios用户:
# vi /usr/local/nagios/etc/objects/contacts.cfg 
email        nagios@localhost       #这个是默认设置
 
在httpd的配置文件目录(conf.d)中创建Nagios的Web程序配置文件:
# make install-webconf
 
创建一个登录nagios web程序的用户,这个用户帐号在以后通过web登录nagios认证时所用:
# htpasswd -c /usr/local/nagios/etc/htpasswd.users admin
以上过程配置结束以后需要重新启动httpd:
# service httpd restart
 
四、编译、安装nagios-plugins
 
nagios的所有监控工作都是通过插件完成的,因此,在启动nagios之前还需要为其安装官方提供的插件。
 
# tar zxf nagios-plugins-1.4.13.tar.gz 
# cd nagios-plugins-1.4.13
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make
# make install
 
五、配置并启动Nagios
 
(1)把nagios添加为系统服务并将之加入到自动启动服务队列:
# chkconfig --add nagios
# chkconfig nagios on
 
(2)检查其主配置文件的语法是否正确:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
 
(3)如果上面的语法检查没有问题,接下来就可以正式启动nagios服务了:
# service nagios start
(4)配置selinux
如果您的系统开启了selinux服务,则默认为拒绝nagios web cgi程序的运行。您可以通过下面的命令来检查您的系统是否开启了selinux:
#getenforce
 
如果上面命令的结果显示开启了selinux服务,您可以通过下面的命令暂时性的将其关闭:
#setenforce 0
 
如果您想在以后完全关闭selinux,可以通过编辑/etc/sysconfig/selinux文件,将其中的selinux后面的值“force”修改为“disable”即可。
(5)通过web界面查看nagios:
http://your_nagios_IP/nagios
六、             安装飞信软件
下载软件
主软件:wget http://www.it-adv.net/fetion/downng/fetion20091117-linux.tar.gz
主程序:wget http://bbs.it-adv.net/p_w_upload.php?aid=9&k=e4e78c14835c2f47f2dc7e3650814a35&t=1283524879
库文件: 在附件中
安装飞信:
tar zxvf fetion20091117-linux.tar.gz -C /usr/local
将下载的主程序fetion覆盖掉/usr/local/fx/下的fetion
在windows中解压library32.rar并将里面的库文件上传至 /usr/local/fx/
cd /usr/local/fx
cp lib* /usr/lib
vim /etc/ld.so.conf
增加以下内容
/usr/local/fx/fetion
然后执行命令  ldconfig
cp fetion /usr/bin
至此,所有软件已安装完毕
下面来详细介绍一下nagios的配置:
 
第一修改配置文件
Nagios的主配置文件是nagios.cfg
# vim /usr/local/nagios/etc/nagios.cfg
注释掉#cfg_file=/usr/local/nagios/etc/localhost.cfg
然后把下面几行的注释去掉:
cfg_file=/usr/local/nagios/etc/contactgroups.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/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg    //联系人配置文件路径
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg   //监视时段配置文件路径
cfg_file=/usr/local/nagios/etc/objects/templates.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。接下来修改default_user_name=sery ,再后面的修改在下表列出:
authorized_for_system_information=admin
authorized_for_configuration_information=admin
authorized_for_system_commands=admin //多个用户之间用逗号隔开
authorized_for_all_services=admin
authorized_for_all_hosts=admin
authorized_for_all_service_commands=admin
authorized_for_all_host_commands=admin
上述用户名是从那里来的呢?是执行命令# htpasswd -c /usr/local/nagios/etc/htpasswd.users admin
所生成的
 
第三个是修改配置文件 commands.cfg  这个文件是用来发送报警飞信的
# vim/usr/local/nagios/etc/objects/commands.cfg
增加以下内容:
define command {
         command_name    notify-service-by-fetion
         command_line    /usr/local/fx/fetion --mobile=1589******* --pwd=********** --to=1589******** --msg-utf8="$HOSTADDRESS$ $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ on $LONGDATETIME$" --hide
        }
  这里说明一下fetion的格式:
--mobile=飞信机器人号码
 --pwd=密码
--to=目标手机号码      //该号码必须是飞信机器人的飞信好友
--msg-utf8="信息内容"
--[hide|debug]隐藏/显示发送信息的过程
 
然后定义监控时间:配置文件是timeperiods.cfg
vim/usr/local/nagios/etc/objects/ 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
        }
 
第四个是手动创建的配置文件contacts.cfg,其格式如下:
#vim /usr/local/nagios/etc/objects/contacts.cfg
define contact {
        contact_name                    webserver               ; Short name of user
        alias                           admin           ; Full name of user
        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-service-by-fetion
        host_notification_commands     notify-service-by-fetion
 }
第五个是手动创建的配置文件contactgroups.cfg,其格式如下:
#vim /usr/local/nagios/etc/contactgroups.cfg
define contactgroup {
        contactgroup_name       group
        alias   system administrator group
        members webserver
}
  
关键的角色终于登场,这就是配置文件hosts.cfg。下面是本人定义的基本样式
# vim /usr/local/nagios/etc/hosts.cfg
define host {
       host_name                  webserver        // 所监控的主机的主机名
       alias                      nagios server
       address                    192.168.175.129   // 所监控的主机的 ip 地址
       contact_groups             group
       check_command              check-host-alive //宕机就发报警通知
       max_check_attempts         5
       notification_interval      10
       notification_period        24x7
       notification_options        d,u,r
       }
再一个重量级的配置文件是services.cfg,没有这个文件,什么监控也没用。下面给出一个样式文件:
# vim /usr/local/nagios/etc/services.cfg
 
define service {
        host_name      webserver
        service_description   check_tcp 80
        check_period          24x7
        max_check_attempts    4
        normal_check_interval 3
        retry_check_interval 2
        contact_groups        group
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        check_command           check_tcp!80
        }
define service {
        host_name        webserver
        service_description   check_tcp 21
        check_period          24x7
        max_check_attempts    4
        normal_check_interval 3
        retry_check_interval 2
        contact_groups        group
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        check_command           check_tcp!21
        }
define service {
        host_name        webserver
        service_description   check_tcp 3306
        check_period          24x7
        max_check_attempts    4
        normal_check_interval 3
        retry_check_interval 2
        contact_groups        group
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        check_command           check_tcp!3306
        }
 
 
define service {
        host_name        webserver
        service_description   check-host-alive
        check_period          24x7
        max_check_attempts    4
        normal_check_interval 3
        retry_check_interval 2
        contact_groups        group
        notification_interval   10
        notification_period     24x7
        notification_options    w,u,c,r
        check_command           check-host-alive
        }
这里我监控了 192.168.175.129 主机的 80 21 3306 端口以及主机状态,读者可以根据自己的需要增加监控对象
 
书写时要注意的是,check_tcp与要监控的服务端口之间要用”!”做分隔符。如果服务太多,以应该考虑用脚本来生成。
 
主机组配置文件hostgroups.cfg,这是一个可选的项目,它建立在文件hosts之上,其格式如下:
# vim /usr/local/nagios/etc/hostgroups.cfg
define hostgroup {
         hostgroup_name group
         alias           group
         members         webserver
}
 
千辛万苦,终于把这些配置给做好保存,现在几乎有点迫不及待了,运行程序/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg来检查所有配置文件的正确性。

如果没有错误,那么恭喜您,您可以试着让服务器出些“故障”,来检测一下能否收到报警短信。