您现在的位置:e-works > 智造书屋 > 书籍列表 > 互联网运营智慧——高可用可扩展网站技术实战 > Nagios服务器的自我监控实现

第一十二章 监控系统Nagios

第三节 Nagios服务器的自我监控实现

    要实现资源和服务两个方面的监控,需要配置服务器端(Nagios Server)及被监控端(NRPE-nagios remote plugin executor)。

    为了能顺利、有条理地部署Nagios监控平台,一个好的工作习惯是在Nagios Server自身实现服务和资源的监控,然后再在其他监控端部署NRPE,从Nagios Server端用check_nrpe测试通过后,再在Nagios Server配置文件中逐一增加监控项目。当然如果只是监控服务而不监控主机资源,则被监控端不做任何NRPE的安装。为了方便初学者更容易上手和成功,我们从简单的步骤开始。

12.3.1 配置邮件发送功能

    因为报警邮件发送给用户邮箱后,监控系统本身没有必要接受别的邮件服务器发送的邮件,因此只需要使用服务器本身自带的Sendmail来发送报警信息即可。用Sendmail的另外一个目的就是简便。

    如果系统是Redhat 或CentOS,只需执行service sendmail start启动守护进程,然后再用DNS服务器给它一个合法的域名(即A记录),马上就可以用mail命令来发送测试邮件到你的某个电子邮箱里了。收到测试邮件,就说明邮件系统配置结束,是不是很容易呢?这里给一个发送邮件的例子:

   发送邮件的例子

12.3.2 测试短信发送

    正常情况下,没有任何服务器能向手机发送短消息的。要达到这个目的,需要花钱购买短信服务同其他也有些人运用飞信一类的方式来达到这个目的,个人觉得对于运营网站不是太靠谱。要是在几年前,自己申请短信通道还是有可能的,2005年以后似乎门槛提高了很多。当你付费成功后,短信服务商会给你提供入口及加密关键字;然后自己写个脚本就可以发送短信了。以下是我的服务器用Perl写的脚本:

   服务器用Perl写的脚本

    对以上脚本稍做说明:

    (1)my $key =‘Ysdbyhd6T’:短信服务商给的验证关键字。

    (2)my $url=“…..”:短信服务商给的用户名、密码以及短信服务商的访问接口(URL)全包括在这里了。

    我们把这个文件放在目录/usr/local/bin/下面,把它命名为 sms_send.pl,用命令 chomod +x /usr/local/bin/sms.pl给予它执行权限。这个脚本在各种各样的UNIX、Linux下都可以正常工作,Nagios报警短信发送就是靠它。

   对以上脚本稍做说明

12.3.3 安装Apache

    Apache应该是我们最常用的部署了,它可以被弄得很复杂,但在Nagios 这个平台上,我们只需要简单的功能即可。为了验证用户,我们稍微修改就一下行了。这样做也是为了体现“越简单越容易的思想”。做得简单,以后重新部署或恢复就越迅速、越没压力。

    1.安装Apache

   安装Apache

    检查Apache的配置文件语法是否正确。未经更改的Apache配置文件语法显然是正确无误的,当我们对配置文件httpd.conf 或其包含的文件做了更改的时候,最好先运行一下这个命令,它的错误输出能迅速定位配置文件哪里出现了错误。

    (2)执行命令行:

    /usr/local/apache/bin/apachectl start

    启动Apache守护进程,在别的机器的浏览器里输入这个服务器的IP地址,看是否可以正常浏览Apache的默认页面(通常是一个“IT works!”)。

    3.修改Apache配置文件httpd.conf

    (1) 修改Apache运行用户和组。默认是daemon,需要把它改成Nagios。这样它才能有权限访问我们安装的Nagios目录,执行相关的cgi命令,如通过浏览器界面关闭Nagios、停止某个故障对象发送报警信息等。

    (2) 添加Nagios访问目录(Nagios 的安装路径/usr/local/nagios),同时使用http用户验证。把下面的内容追加到httpd.conf文件的末尾:

    修改Apache配置文件httpd.conf

    按照这样一种方式修改配置文件,保证不会把配置文件改得一塌糊涂,我相信大部分初学者把文件修改后而不知道文件本身的原貌。到这步,配置文件虽然修改好了,但还不能通过语法检查,因为有两个与之相关联的东西还不存在,它们是用户和组Nagios及Apache的验证用户文件/usr/local/nagios/etc/htpasswd。在后续操作中完成该任务后,再验证不迟。

12.3.4 部署Nagios服务

    1.添加帐户以运行Nagios

    当然也可以用root运行,但出于安全考虑而使用普通帐号来运行,并且不为该帐号分配shell登录权限。

    (1)Linux增加帐号的操作:

    useradd nagios –s /sbin/nologin

    添加帐号就自动生成同名组Nagios。

    (2)FreeBSD增加帐号的操作:

    pw groupadd nagios ; pw useradd nagios –g nagios –s /sbin/nologin.

    2.安装Nagios软件

   安装Nagios软件

    和一般的GUN源码软件安装相比,Nagios的安装多了几个步骤(一般的软件运行到make install就算安装完了)。当然也可以不执行这两步,用手工赋予目录或文件权限,再手动创建配置文件,其效果完全相同。安装完Nagios后,我们可以在安装目录/usr/local/nagios下找到自动生成的各个子目录,如表12-2所示。

表12-2 Nagios目录结构

 表12-2 Nagios目录结构

    3.安装Nagios插件

    没有插件,Nagios将什么作用也没有,插件也是Nagios扩展功能的强大武器,除了下载常用的插件外,我们还可以根据实际要求编写自己的插件。Nagios的插件nagios-plugins-1.4.9在www.nagios.org上可以找到,接着我们用wget下载它。

    下载完成后,安装是很简单的。先执行配置:

    ./configure ––prefix=/usr/local/nagios

    接着编译安装 make ; make install即可。

    安装完成后,将在目录/usr/local/nagios生成子目录libexec(里面有很多文件),这正是Nagios所需要的,如图12-2所示。

 图12-2 Nagios插件文件列表

图12-2 Nagios插件文件列表

    4.配置Nagios

    配置是Nagios最复杂的部分,耐心的一些,逐个处理,配置成功也不是什么难事。刚安装完成的Nagios,其配置文件的目录是/usr/local/nagios/etc,图12-3所示是其etc目录的文件。

 图12-3 etc目录文件列表

图12-3 etc目录文件列表

    先把这些文件改名,如cgi.cfg-sample改成cgi.cfg,用命令cp cgi.cfg-sample cgi.cfg …依样把其余的几个*.cfg-sample都复制成*.cfg文件。

    当然,我们不能指望这个最小的配置文件即可满足实际的需求,因此,需要对现有的配置文件进行修改,其次增加自定义的一些配置文件。通过复制这些自带的模板文件,可以得出几个主要的配置文件,把它归类为表12-3所尸的形式。

表12-3 配置文件归类

 表12-3 配置文件归类

    按照这个表格,我们逐一来配置。

    (1)修改主配置文件nagios.cfg。基于方便维护的原则,将各个配置目标单独放在文件中,如联系人信息在contacts.cfg中定义。nagios.cfg文件比较长,我只把修改过的内容截取出来:

       nagios.cfg文件

    (2)修改cgi配置文件cgi.cfg。同修改nagios.cfg一样,这里只截取贴出被修改过的地方:

   修改cgi配置文件cgi.cfg

    在这里指定的用户“sery”可以通过浏览器操纵Nagios服务的关闭、重启等各种操作。

    (3)修改commands.cfg配置文件。

    ① 修改notify-host-by-email ? host-notify-by-email。

    ② 修改notify-service-by-email ? service-notify-by-email。

    ③ 新增以下内容:

   新增以下内容

    第二个块定义主机报警的内容,即主机发生死机、恢复等情况时发送手机短信报警,其接受者和发送内容由“$..$”定义的宏来决定。

    第三个块定义服务报警内容,即监控的服务或监控的主机资源发生故障时发送手机短信报警。Nagios规定,如果探测到被监控的主机停机或不可达,它就不再探测这个停机主机上的服务。通俗点理解就是:主机都停了,当然服务也跟着停了!

    (4)新增其他配置文件。

    在主配置文件nagios.cfg中,我们注释了行cfg_file=/usr/local/nagios/ etc/localhost.
cfg,而使用若干单独的配置文件来定义各种对象,这样可以获得维护方便、书写规范等诸多方面的好处。这些单独的配置文件不是自然存在的,需要我们手工创建并添加内容。

    下面我按新添一个主机进入监控的较优方式添加这些配置文件(当然也可以有其他的顺序,这并不影响监控的效果)。好了,我们先把Nagios服务器本身给监控上,这些监控包括:

    *主机存活

    *Web服务监控

    *磁盘空间监控

    *负载监控

    *进程数监控

    *IP连接数监控

    ① 定义主机配置文件hosts.cfg

    ②

   新增其他配置文件

    说明:

    *联系组contact_group 5没有建立,需在后面的步骤完成。

    *主机检查命令行check_command一般选择检查主机存活check-host-alive。

    *最大尝试次数max_check_attempts最好不要设置为“1”,一般3~4次比较合理。

    *通知时间间隔notification_interval 根据自己的实际情况设定,它的单位是分钟。

    *通知选项notification_options几个值的意思是d-down,u-unreacheable,r-recovery。

    ② 定义主机组配置文件hostgroups.cfg

   定义主机组配置文件hostgroups.cfg

    说明:

    *这个配置文件不是必须的。如果想在浏览器里方便归类及查看状态,可以添加这个文件。

    *主机组的成员必须是在hosts.cfg中已经定义了的,多个主机成员间用逗号分隔。

    ③ 定义联系人配置文件contacts.cfg

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

    说明:

    *服务通知选项:w-warning,u-unknown,c-critical,r-recovery。

    *主机通知选项:d-down,u-unreacheable,r-recovery。

    *服务通知命令行在配置文件commands.cfg中得到定义,如果有报警发生,则邮件和手机短信一起发送给相关人,即下面两行定义的email和pager。

    *收报警信息的邮件和手机:一个人若有两个手机,手机号之间用逗号分隔,邮件也如此。

    *如果这里定义的用户需要通过浏览器查看他所负责的服务器监控状态的话,还需要用Apache的工具htpasswd增加同名帐号。

    ④ 定义联系组配置文件contactgroups.cfg

   定义联系组配置文件contactgroups.cfg

    说明:

    *当有多个人行使同样的职责时,定义成组是非常有用的。

    *多个成员之间用逗号分隔。

    *成员必须在联系人配置文件(contacts.cfg)中已经定义。

    ⑤ 定义服务配置文件 services.cfg

    define service {

   定义服务配置文件 services.cfg

   定义服务配置文件 services.cfg

   定义服务配置文件 services.cfg

   定义服务配置文件 services.cfg

    说明:

    *主机名host_name,必须是主机配置文件hosts.cfg中定义的主机。

    *检查用的命令check_command要在命令配置文件中定义或在NRPE配置文件中有定义。

    *最大重试次数max_check_attempts 一般设置为3~4次比较好,这样不会因为网络闪断片刻而发生误报。

    *检查间隔和重试检查间隔的单位是分钟。

    *通知间隔指探测到故障以后,每隔多少时间发送一次报警信息。它的单位是分钟。

    *通知选项跟服务定义配置文件相同。

    *联系组contact_groups由配置文件contactgroup.cfg定义。

    *检查主机资源需要安装和配置NRPE,这个过程在后面完成。

12.3.5 部署NRPE

    1.安装MPE

    2.复制文件

    安装完NRPE后,在安装目录/usr/local/nrpe/libexec中只有一个文件check_nrpe,而在Nagios插件目录中,却缺少这个文件,因此需要把这个文件复制到Nagios插件目录;同样,因为nrpe需要调用的诸如check_disk等插件在自己的目录中的没有,可是这些文件却是Nagios插件所存在的,所以也需要从Nagios目录复制一份过来。下面把复制过程列举出来:

   复制文件

    3.配置nrpe

    安装完NRPE以后,在安装目录中并没有可用的配置文件,我们只需把解压目录的样例文件复制到安装目录,然后修改这个文件即可。

    (1)mkdir /usr/local/nrpe/etc

    (2)cp sample-config/nrpe.cfg  /usr/local/nrpe/etc

    (3)修改配置文件/usr/local/nrpe/etc/nrpe.cfg。改过的地方用粗体显示:

   配置nrpe

    说明:

    *allowed_hosts=127.0.0.1,59.26.240.63:必须允许Nagios监控服务器可以访问。

    *command[check_df]=/usr/local/nrpe/libexec/check_disk-w 20-c10:检查整个服务器的磁盘利用率。如果是FreeBSD系统,因为其/dev分区为100%,需要排除这个分区,因此其命令行应该为 “command[check_df]=/usr/local/nrpe/libexec/
check_disk-x/dev-w20-c10”。

    *command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000:IP连接数,ip_conn.sh脚本需要自己写,下面给出脚本的内容:

   脚本的内容

    我在NRPE配置文件nrpe.cfg中把脚本所需的两个参数写上了,因此这个脚本就不需判断两个参数输入值的情况。只要当前IP连接数大于8000,系统就发送warning报警,超过10000,则发送“critical”报警信息。把这个脚本放在目录/usr/local/nrpe/libexec下,并赋予执行权限。

    4.启动NRPE服务并检验其配置

    (1)以独立守护进程启动NRPE服务:

   启动NRPE服务并检验其配置

    (3)检查插件功能

    ① 检查NRPE服务

   检查插件功能

12.3.6 启动Nagios服务

    (1)检查配置 Nagios的验证非常准确,凡是不能正确启动Nagios的问题,皆可以从错误输出找到答案。

   启动Nagios服务

    (5)启动Apache服务,然后在别的机器的浏览器地址栏中输入http:// 59.26.240.63/ nagios,再输入步骤(4)产生的用户名及设定的密码,即可通过Web方式查看监控系统当前的状态(浏览器自动刷新屏幕),如图12-4所示。

   图12-4 Nagios自身状态监控

图12-4 Nagios自身状态监控