nagios原理(二)
下面是最关键的了,用nagios主要是监控一台主机的各种信息,包括本机资 源,对外的服务等等.这些在nagios里面都是被定义为一个个的项目(nagios称之为服务,为了与主机提供的服务相区别,我这里用项目这个词),而 实现每个监控项目,则需要通过commands.cfg文件中定义的命令. 例如我们现在有一个监控项目是监控一台机器的web服务是否正常, 我们需要哪些元素呢?最重要的有下面三点:首先是监控哪台机,然后是这个监控要用什么命令实现,最后就是出了问题的时候要通知哪个联系人? 定义监控的项目,也叫服务,创建services.cfg [root@localhostetc]# 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.99.99/nagios/[/url]来查看吧.点左边的Host Detail 再点Service Detail 三. 使用命令和插件监控更多信息 个人觉得这里是全篇文章里面最难理解的部分,我也将尽力解释清楚.还是那句话,原理了解了什么就都简单了. 在上篇文章里面,我们已经增加了三个监控项目,分别监控nagios-server,dbpi,yahoon这三台主机是否存活.现在我对这三台机器分别 做了如下设置 开放nagios-server的ftp 开放dbpi的ssh 开放yahoon的IIS 这篇文章里面所做的就是对这些服务进行监控,另外我们还要监控nagios-sever的根分区的使用情况. 在这个系列的开篇<nagios全攻略(一)----准备阶段>里面谈到nagios的原理时,特别指出了nagios本身并没有监控的功 能,所有的监控是由插件完成的,插件将监控的结果返回给nagios,nagios分析这些结果,以web的方式展现给我们,同时提供相应的报警功能(这 个报警的功能也是由插件完成的) 所有的这些插件是一些实现特定功能的可执行程序,默认安装的路径是/usr/local/nagios/libexec,可以查看 这些程序都是可以独立执行的,使用方法可以通过”命令名 –h”来查看 例如,我们查看check_disk这个插件的用法则可以使用check_disk –h,如下图 [root@server1 libexec]# ./check_disk -h check_disk (nagios-plugins 1.4.9) 1.91 Copyright (c) 1999 Ethan Galstad<nagios@nagios.org> Copyright (c) 1999-2006 Nagios Plugin Development Team <nagiosplug-devel@lists.sourceforge.net> This plugin checks the amount of used disk space on a mounted file system and generates an alert if free space is less than one of the threshold values Usage: check_disk -w limit -c limit [-p path | -x device] [-t timeout][-m] [-e] [-W limit] [-K limit] [-v] [-q] [-E] Options: ……以下略 输出的资料十分详细给出了这个插件的功能,使用方法,参数意义等,对于每一个插件都是这样.所以当你不懂某个插件怎么使用时就好好读读吧.从上面的 输出可以看到check_disk这个插件是用来检查磁盘使用情况的. 我现在来独立执行它,例如查看根分区的使用情况,执行 [root@server1 libexec]# ./check_disk -w 10% -c 5% / 命令的含义是检查分区/的使用情况,若剩余10%以下,为警告状态(warning),5%以下为严重状态(critical), 执行后我们会看到下面这条信息 DISK WARNING - free space: / 487 MB (6% inode=78%);| /=7449MB;7524;7942;0;8361 说明当前是warning的状态,空闲空间只有6%了.如果nagios收到这些状态结果就会采取报警等措施了 或许在这里大家又迷糊了,我们在定义某个监控项目时,所用的监控命令都是来自commands.cfg的,这和这些插件有什么关系???想到了 吧,commands.cfg中定义的监控命令就是使用的这些插件.举个例子,之前我们已经不止一次用到了check-host-alive这个命令,打 开commands.cfg就可以看到这个命令的定义,如下: ################################################################################ # # SAMPLE HOST CHECK COMMANDS # ################################################################################ # This command checks to see if a host is "alive" by pinging it # The check must result in a 100% packet loss or 5 second (5000ms) round trip # average time to produce a critical error. # Note: Only one ICMP echo packet is sent (determined by the '-p 1' argument) # 'check-host-alive' command definition define command{ command_name check-host-alive command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1 } command_name check-host-alive 这句话的意思是定义的命令名是check-host-alive,也就是我们在services.cfg中使用的名称 执行的操作是 $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1 其中$USER1$是在resource.cfg文件中定义的,代表插件的安装路径.就如我们上面看到的那样$USER1$=/usr/local /nagios/libexec,至于$HOSTADDRESS$,则默认被定义为监控主机的地址. 简单的说,我们在services.cfg中定义了对dbpi执行check-host-alive命令,实际上就是执行了 /usr/local/nagios/libexec/ check_ping -H dbpi的ip地址 -w 3000.0,80% -c 5000.0,100% -p 1 实际上check-host-alive只是这一长串命令的简称而已,而在services.cfg中都是使用简称的. 在commands.cfg中定义了很多这样的命令简称.基本上我们常用的监控项目都包含了,例如ftp,http,本地的磁盘,负载等等. 我们再看一个命令,check_local_disk定义如下 # 'check_local_disk' command definition define command{ command_name check_local_disk command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$ } check_local_disk实际上是执行的check_disk插件.这里的$ARG1$, $ARG2$, $ARG3$是什么意思呢?在之前我们已经提到了这个check_disk这个插件的用法,-w的参数指定磁盘剩了多少是警告状态,-c的参数指定剩多少 是严重状态,-p用来指定路径. 在使用check-host-alive的时候,只需要在services.cfg中直接写上这个命令名check-host-alive.后面没任何的 参数.而使用check_local_disk则不同,在services.cfg中这要这么写 check_local_disk!10%!5%!/ 在命令名后面用!分隔出了3个参数,10%是$ARG1$的值,5%是$ARG2$的值,/ 是$ARG3$的值, 我不知道讲的是否清楚,头晕的就在后面提问哈.简单的一句话就是 services.cfg定义监控项目用某个命令 ↓ 这个命令必须在commands.cfg中定义 ↓ 定义这个命令时使用了libexec下的插件 如果命令不带$ARG1$就可以在services.cfg中直接使用,如果带了使用时就带上参数,以!相隔 如果你理解了上面我说的”昏话”,下面的事情就简单的多了.我们要监控什么就修改相应的 命令就行了. 1).监控nagios-server的ftp 编辑services.cfg 增加下面的内容,基本上就是copy上节我们定义监控主机存活的代码.略做修改. define service{ host_name nagios-server 要监控的机器,给出机器名,注意必须是hosts.cfg中定义的 service_description check ftp 给这个监控项目起个名字吧,任意起,你自己懂就行 check_command check_ftp 所用的命令,当然必须是commands.cfg中定义了的 max_check_attempts 5 normal_check_interval 3 retry_check_interval 2 check_period 24x7 notification_interval 10 notification_period 24x7 notification_options w,u,c,r contact_groups sagroup } 2).监控dbpi的ssh define service{ host_name dbpi 意义同上 service_description check-ssh 意义同上 check_command check_tcp!22 ssh所用的tcp的22号端口,我就用commands中定义的check_tcp命令.至于!22的意思不用我说了吧. max_check_attempts 5 normal_check_interval 3 retry_check_interval 2 check_period 24x7 notification_interval 10 notification_period 24x7 notification_options w,u,c,r contact_groups sagroup } 3).监控yahoon的IIS define service{ host_name yahoon service_description check-http check_command check_http max_check_attempts 5 normal_check_interval 3 retry_check_interval 2 check_period 24x7 notification_interval 10 notification_period 24x7 notification_options w,u,c,r contact_groups sagroup } 4).监控nagios-sever的根分区的使用情况. define service{ host_name nagios-server service_description check disk check_command check_local_disk!10%!5%!/ max_check_attempts 5 normal_check_interval 3 retry_check_interval 2 check_period 24x7 notification_interval 10 notification_period 24x7 notification_options w,u,c,r contact_groups sagroup } 修改了配置文件,当然就要重新启动了,简单的方法杀掉nagios进程,然后重新启动 /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg 等几分钟,你会看到下面这张图 可以看到我的nagios-seerver上磁盘空间已经不足了,是warning. 哈哈,本章到此结束!!! 但是,但是但是…事情远远没完.我提几个问题:你知道了nagios-server这台机器的磁盘使用情况,可是dbpi这台机器的使用情况呢?dbpi 当前登陆多少用户?多少进程?cpu负载如何? ftp,ssh,http这些都是向外开放的服务,即使不用nagios我自己也可以试的出来,随便找一台机器看能不能访问这些服务就行了.可是磁盘容 量,cpu负载,当前登陆用户数量你不登录这台机器原则上是不可能知道的,因为他们是”本地信息”.当然,木马可以做到…下节我们就让nagios做”木 马”.. 注:我们通过nagios查看到了nagios-server这台机的磁盘信息,这应该属于”本地信息”,本地信息不是得不到的吗??这是因为我们 nagios运行在这台机器上啊.它当然可以检测自己所在的机器,对dbpi和yahoon…暂时看来是无能为力了. 四. 使用NRPE监控LINUX上的”本地信息” 本部分主要参考了NRPE的官方手册 本节的目的,对系统为linux的主机dbpi进行如下监控:CPU负载,磁盘容量,登陆用户数,总进程数,僵尸进程数,swap分区使用情况 书接前文,对于像磁盘容量,cpu负载这样的”本地信息”,nagios只能监测自己所在的主机,而对其他的机器则显得有点无能为力.毕竟没得到被控主机 的适当权限是不可能得到这些信息的.为了解决这个问题,nagios有这样一个附加组件----NRPE.用它就可以完成对linux类型主机”本地信 息”的监控. NRPE的原理如下图 NRPE总共由两部分组成: – check_nrpe 插件,位于在监控主机上 – NRPE daemon,运行在远程的linux主机上(通常就是被监控机) 按照上图,整个的监控过程如下: 当nagios需要监控某个远程linux主机的服务或者资源情况时 1.nagios会运行check_nrpe这个插件,告诉它要检查什么. 2.check_nrpe插件会连接到远程的NRPE daemon,所用的方式是SSL 3.NRPE daemon会运行相应的nagios插件来执行检查 4.NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理. 注意:NRPE daemon需要nagios插件安装在远程的linux主机上,否则,daemon不能做任何的监控. 通过NRPE的检测分为两种: 1).直接检测:检测的对象是运行NRPE的那台linux主机的本地资源,原理如下图 2).间接检测:当运行nagios的监控主机无法访问到某台被监控机,但是运行NRPE的机器可以访问到时,NRPE就可以充当一个代理,将监控 请求发送到被监控机 必须要说明的是,通常被监控机与监控机在同一网络内,所以这样的情况很少.下面我讲的都是直接检测.所以我们按照图示在监控主机(nagios- server)和被监控主机(dbpi,也就是图中运行NRPE的remote linux host)上安装相应的软件 在被监控主机上 1增加用户 [root@dbpi root]# useraddnagios 设置密码 [root@dbpi root]# passwdnagios 2安装nagios插件 解压缩 tar -zxvf nagios-plugins-1.4.9.tar.gz cd nagios-plugins-1.4.9 编译安装 ./configure make make install 这一步完成后会在/usr/local/nagios/下生成两个目录libexec和share [root@dbpi local]# ls /usr/local/nagios/ libexec share 修改目录权限 [root@dbpi local]# chownnagios.nagios /usr/local/nagios [root@dbpi local]# chown -R nagios.nagios /usr/local/nagios/libexec 3安装nrpe 解压缩 tar -zxvf nrpe-2.8.1.tar.gz cd nrpe-2.8.1 编译 ./configure 输出如下 *** Configuration summary for nrpe 2.8.1 05-10-2007 ***: General Options: ------------------------- NRPE port: 5666 NRPE user: nagios NRPE group: nagios Nagios user: nagios Nagios group: nagios Review the options above for accuracy. If they look okay, type 'make all' to compile the NRPE daemon and client. 可以看到NRPE的端口是5666,下一步是make all make all 输出如下 *** Compile finished *** If the NRPE daemon and client compiled without any errors, you can continue with the installation or upgrade process. Read the PDF documentation (NRPE.pdf) for information on the next steps you should take to complete the installation or upgrade. 接下来安装NPRE插件,daemon和示例配置文件 安装check_nrpe这个插件 make install-plugin 之前说过监控机需要安装check_nrpe这个插件,被监控机并不需要,我们在这里安装它是为了测试的目的 安装deamon make install-daemon 安装配置文件 make install-daemon-config 现在再查看nagios目录就会发现有4个目录了 [root@dbpi nrpe-2.8.1]# ls /usr/local/nagios/ bin etc libexec share 按照安装文档的说明,是将NRPE deamon作为xinetd下的一个服务运行的.在这样的情况下xinetd就必须要先安装好,不过一般系统已经默认装了