看我出招之:我用Nagios(技术细节)

看我出招之:我用Nagios(技术细节)
 
做为系统管理员,我最担忧那些重要的在线系统在我不知情的状况下停机或者中止网络服务,并且那些发生故障的服务或主机有时候可能要好长一段时间才知道(这种状况多发生在节假日),只要一到节假日,不少系统管理员就紧张不已。要改变这种被动局面,我在这里推荐网络监控软件Nagios,我的认为它最大的好处是能够发故障报警短信—只要Nagios监控的对象发生故障,系统就会自动发送短信到手机上。下面摘录Nagios官方网站的描述:
Nagios is an open source host, service and network monitoring program. Who uses it? Lots of people, including many big companies and organizations:Nagios是一个用来监控主机、服务和网络的开放源码软件,不少大的公司或组织都在使用它。在我来到如今这个机构以前,已经有一个Netsaint(nagios的老版本)在监控那些在线服务器,可是不完善,后来我立了一个项,部署了新的监控平台nagios把全部的在线服务器都监控起来了;到目前为止,监控了413个主机和754个服务。
 
虽然Nagios十分受用,但配置起来确是麻烦,根据其读音我给它取可一个中文名-难够死。基于这样的缘由,我将尽量详细地向你们讲述我用Nagios的过程以及心得,但愿对初学者有所帮助。
 
(一)  安装所需软件
 
1、安装Nagios
Nagios能够运行在各类版本的linux及主流的unix环境,我试过的环境有Redhat linux,Centos,Debian等。在实际的运维中,我是以centos 4来部署nagios的。安装完操做系统以后,须要把多余的服务都关掉,只留sshd这个服务。而后用wget下载源码包nagios-2.6.tar.gz和httpd-2.2.0.tar.gz。接下来先分别安装软件,过程以下:
一、  解压nagios. tar zxvf nagios-2.6.tar.gz
二、  配置nagios. cd nagios ; ./configure –prefix=/usr/local/nagios
三、  编译nagios. make all
四、 安装nagios。与别的软件安装稍有不一样,nagios的安装要好几步才能完成。第一步执行make install安装主要的程序、CGI及HTML文件,第二步执行 make install-commandmode 给外部命令访问nagios配置文件的权限,第三步执行 make install-config 把配置文件的例子复制到nagios的安装目录。按照安装向导的提示,其实这里还有一个 make install-init的步骤,它的做用是把nagios作成一个运行脚本,使nagios随系统开机启动,这是一个很方便的措施。但本人是一个喜欢把问题简化的人,没有执行这样的操做。
五、 验证程序是否被正确安装。切换目录到安装路径(这里是/usr/local/nagios),看是否存在 etc、bin、 sbin、 share、 var这五个目录,若是存在则能够代表程序被正确的安装到系统了。后表是五个目录功能的简要说明:
 
 
bin
Nagios 执行程序所在目录,这个目录只有一个文件 nagios
etc
Nagios 配置文件位置,初始安装完后,只有几个 *.cfg-sample 文件
sbin
Nagios Cgi 文件所在目录,也就是执行外部命令所需文件所在的目录
Share
Nagios 网页文件所在的目录
Var
Nagios 日志文件、 spid 等文件所在的目录
      
2、安装nagios的插件
         没有插件,nagios将什么做用也没有,插件也是nagios扩展功能的强大武器,除了下载经常使用的插件外,咱们还能够根据实际要求编写本身的插件。Nagios的插件nagios-plugins-1.4.5在[url]www.nagios.org[/url]上能够找到,接着咱们用wget下载它。注意:插件与nagios之间的版本关联不大,不必定非得用nagios-plugins-1.4.5这个版本。下载完成后,安装它是很简单的:先执行配置 ./configure –prefix=/usr/local/nagios ,接着编译安装 make ; make install便可。这里须要说明一下的是在配置过程指定的安装路径是/usr/local/nagios,而不是/usr/local/nagios-plus,安装完成后,将在目录/usr/local/nagios生成目录libexec(里面有不少文件),这正是nagios所须要的。
       
 
3、安装web服务器apache
Web服务不是nagios所必须的,可是若是nagios没有web,查看监控对象的状态将是很是费事和没有趣味的事情(只有经过查看nagios的日志来判断状态)。我不肯干特无聊的事,因此就花少量时间把web安装一下。
在unix/linux世界,apache是web服务器的首选对象,其下载网站为[url]www.apache.org[/url]  。建议下载源码。由于咱们不须要很复杂的web功能,所以简单的执行一下几个步骤就能够正确的把apache安装到系统:
一、   解包、配置:tar zxvf httpd-2.2.0.tar.gz ; cd httpd-2.2.0 ; ./configure   –prefix=/usr/local/apache 。
二、   编译安装: make ; make install 。
安装完成后,执行命令 ./usr/local/apache/bin/apachectl –t 检查一下apache是否正确安装。
 
(二)、配置前的处理
最主要的工做是建立nagios用户及其组,让nagios的运行用户为nagios而不是root。再把目录/usr/local/nagios的属主设置为nagios,以保证系统的安全。Nagios能够以root用户运行,但并不推荐这样作。用下面的步骤来完成上述过程:
一、添加系统账户nagios: useradd nagios 就很容易的把用户和组nagios添加到系统。有的类型的linux发行版添加用户和组要麻烦一些-须要手动添加组,而后再执行 useradd –g nagios nagios这样的操做。在实际的运用场景,nagios用户并无必要做为系统用户来登陆linux系统,所以能够没必要设置nagios的用户密码,甚至能够把nagios用户的登陆shell设置成/bin/false。
二、更改目录属组:chown –R nagios.nagios /usr/local/nagios 。请注意,有的unix/linux的版本用户和属组分隔符号不是“.”,可能会是这样的形式 chown –R nagios:nagios /usr/local/nagios 。
三、sendmail。看看sendmail是否正常运行?咱们须要使用sendmail来发送故障报警信息,因此这个包必须可以正常工做。Sendmail分为服务器和客户端两部分,有2种发送报警邮件的方式:(1)nagios所在的机器经过sendmail客户端程序把邮件发送到专门的邮件服务器,再由邮件服务器把消息发送到用户邮箱。(2)邮件客户端和服务器端就用nagios所在系统sendmail。第一种方式用起来很是规范,但更麻烦,例如须要作地址解析、修改邮件服务器的配置;另外还有一个问题-它还依赖别的系统,增长了故障点和复杂度。第二种方法十分简单,只需启动sendmail服务便可,并且它再也不依赖于别的系统和服务。在我工做的实际场景,这两种方法都使用,用专门的邮件服务器会有发送延迟的状况(由于邮件服务器要处理不少其余用户邮件的收发);而直接用sendmail作服务器和客户端就异常简单和方便了。很是幸运的是,几乎全部的linux/unix发行版都默认安装sendmail,费了这么多笔墨,其实就作一个动做-把sendmail服务运行起来。
四、手机短信发送工具。我如今的公司是sp,有本身的短信通道,直接把发送短信的客户端程序sms_send拷贝到目录/usr/local/bin/下。若是没有短信下发的网关通道,那怎么办呢?网络上有不少短信发送的客户端程序,颇有名的就是smsclient,把它下载下来,解包后安装。不要忘记购买手机modem和手机卡,modem只支持SIM卡而不支持cdma。安装完smsclient软件和硬件modem后,测试一下是否正常。若是没有modem又怎么办?办法仍是有的:让你的手机号能够接受邮件,这须要你去营业厅开通这项功能。短信报警功能是最有用的功能,咱们不可能整天盯着监视屏幕,也不可能整天接受电子邮件,但咱们的手机却能够24小时在线,只要被监控对象发生故障,立刻就能够收到故障报警短信。之前,我很怕放长假,由于最担忧关键的设备或服务在假期出故障而本身不知道,因此放假就变成了值班;想必不少网络管理员都有相似的经历。在我动手部署nagios之前,曾经在网上搜索关于nagios配置的文章,发现绝大部分都没有介绍使用手机短信这个方便的功能,真是遗憾呀!在此,强烈建议启用nagios的短信故障报警功能。
 
(二)、配置
配置是nagios最复杂的部分,它涉及到多个文件的配置,为了方便描述,这里逐个的进行配置。
 
1、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
</Directory>
上述文本块的做用是对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 的访问地址(如:[url]http://ip/nagios[/url]),若是正常,将出现下图的登陆验证窗口等待用户输入:
 
输入用 htpasswd 建立的用户名和密码测试一下,没有问题的话,进行下一步配置操做。
 
2、 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                          [email]sery@163.com[/email]
        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                         [email]sery@sohu.com[/email]
        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 ([url]http://www.nagios.org[/url])
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等配置时,能够运用一些小技巧来减小出错的几率:如先定义少量的主机、服务,待校验无误后再追加。
 
    3、验收  
用浏览器输入nagios所在服务器的ip及目录,如[url]http://61.135.X..X/nagios[/url],再输验证所需的用户名和密码,就可点击页面右边的相关链接来查看各类状态。关掉某个被nagios监控主机的服务或者拔掉某个服务器的网线,等几分钟,点击超链接“Service Detail”观察页面状态看是否有红色的醒目的报警出现。
 
一下子,就会收到报警短信和报警邮件,而后在把测试全部的服务开启或把拔下来的网线查上去,片刻后,网页里的红色报警表格消失,手机短信或邮件通知故障恢复。若是你的状况也这样,那么真正大功告成。
 
   Nagios的功能十分强大,在个人项目里,由于个人需求不一样而尽量的简化了nagios而没有使用代理、更多插件等功能,在一个不超过1000个服务器的网络规模里,它工做得很好。若是有更多的服务器,建议使用mysql数据来管理监控对象。在部署nagios的过程当中,我啊、作不少选项做了取舍,更详细的状况请参照官方的文档。
 
 
[1]安全问题
[2]nagios2.5是minimal.cfg.
 
                                               2007-3-15
                                              于福源门悟真阁
相关文章
相关标签/搜索