开源监控利器nagios实战

开源监控利器nagios实战

作者:田逸(sery@163.com) from:http://blog.formyz.org/?p=148 

俗话说:工欲善其事,必先利其器.要做好系统管理,使自己的工作更轻松更有效的话,一个好的监控工具是必不可少的了.在这里我向大家推荐一款我使用了4年多的、功能强大、可灵活定制的开源监控利器—nagios。 

首先,我们来看实际工作中需要监控的对象有哪些?在这里我总结出2种类型的监控对象:网络服务监控及主机资源监控。网络服务监控可包括主机存活检查、web服务监控、ftp服务监控、数据库服务监控、自定义服务监控等;主机资源监控可包括系统负载、当前ip链接数、磁盘空间使用情况、当前进程数以及自定义的资源监控等。

其次,我们再来看nagios监控的表现形式。监控的主要目的是当监控的对象发生故障或资源紧张时及时通知相关人员,以便问题得到迅速的处理。追求的效果就是“在老板和客户发现问题之前得到及时、有效的通知”,假定故障通知来自老板,我想大家都不会很愉快的。Nagios为了方便我们的管理工作,提供了至少3种表现手段:

1、web方式,即通过浏览器观看被监控的对象;如正常状态下,其状态(status)是以蓝色填充并显示一个OK。

2、邮件通知,发生故障时,到达设定重试次数和探测间隔时间后发送邮件给管理员或相关人员,报告问题的大致情况。

3、手机短信,这是非常有用和及时的功能了;晚上熟睡中,再也没可能看web页面或查阅邮件,可以一旦发生故障,手机短信却能把你随时唤醒。

一般情况下,这3者是同时进行的:上班时间开个浏览器看页面显示、打开邮件程序定时收取邮件、手机24小时在线。

最后,我们以一个实际场景来展示nagios的强大功能,希望对大家的系统管理工作有所帮助。

场景描述 

为了描述问题方便,我们假定有5个服务器要监控(web服务器、数据库服务器、邮件服务器、nfs文件共享服务器),需要对几个服务器的服务进行监控,同时监控每个服务器的资源使用情况,包括负载情况、磁盘分区使用情况、总进程数、当前ip连接数这个4个项目(当然你也可以自己写脚本监控更多的资源对象)。这些服务器除了系统管理员而外,还有其他用户(如程序员)对各自的服务器进行维护;当发生故障的时候,维护网站的程序员能收到报警邮件和报警短信,而管理数据库管理员则无需收到这些报警,同时维护程序的用户可以以自己的帐号登陆监控服务器,通过web方式察看自己所管服务器的状态(只能看自己的而看不到别人管辖服务器的状态)。

通过上面的描述,我们可以整理出下面的表格

机器名称 角色 可查看状态及接受报警信息的用户 所需工具
Nagios服务器 监控端 系统管理员(SA) Apache、nagios、nagios plugin、sendmail、perl等
邮件服务器 被监控端 系统管理员、邮件管理员 Nrpe、nagios plugin、自定义脚本等
数据库服务器 被监控端 系统管理员、dba Nrpe、nagios plugin、自定义脚本等
Web服务器 被监控端 系统管理员、webmaster Nrpe、nagios plugin、自定义脚本等
Nfs共享服务器 被监控端 系统管理员 Nrpe、nagios plugin、自定义脚本等
缓存服务器(squid) 被监控端 系统管理员、webmaster Nrpe、nagios plugin、自定义脚本等

配置好nagios和被监控机器后,其在浏览器里的基本输出与下图类似:32ad0ea4bcd8ddeb9f6cd60a9cd544b3

Nagios服务器的自我监控实现 

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

一、配置邮件发送功能

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

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

  1. mail  -s “This is sery’s nagios test mail” sery@163.com < install.log

二、测试短信发送

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

#!/usr/bin/perl -w  
use strict;  
use LWP::Simple;  
use URI::Escape;  
use Digest::MD5;  
my ($mobile, $content) = @ARGV;  
my $log_control = 1;  
my $key = 'Ysdbyhd6T';  
my $souce_content = substr($mobile, 0, 8) . substr($mobile, -10, 10) . $key;  
my $md5 = Digest::MD5->new;  
$md5->add($souce_content);  
my $result_conent = uc($md5->hexdigest);   
my $url = "http://http.asp.sh.cn/MT.do?Username=sery&Password=([-BVG'0&Mobile=$mobile&Content=$content&Keyword=$result_conent";  
my $result = get $url;  
if($log_control) {  
    my $fh;  
    open($fh, '>> /var/log/sms.log') or die "can't open log: $!";  
    print $fh join(' ', time, $result, "\n");  
    close $fh;  
}  

(以上脚本由宇捷提供)

说明:

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

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

我们把这个文件放在目录 /usr/local/bin/ 下面,把它命名为 sms_send.pl ,用命令 chomod +x /usr/local/bin/sms.pl 给与它执行权限。这个脚本在各种各样的unix、linux下都可以正常工作,nagios报警短信发送就是靠它了。如果读者也打算拿这个脚本发送短信的话,只要改一下key值和url值就可以直接使用。

接下来就是验证是否可以发送短信,执行命令行 /usr/local/bin/sms.pl 13300108888  “It is a test” ,回车后数秒钟,你的手机应该能收到带有内容“It is a test”的短信息。为了保证短信服务的可靠性,我做了一个策略:每天下午6点定时给我发一个通知短信;告诉我短信发送是正常的,也是该下班回家了。做法:执行 crontab –e 然后输入行 00 18 * * * /usr/local/bin/sms.pl 13300108888  “It is Ok” 。

三、部署apache

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

(一)安装apache

tar zxvf httpd-2.2.8.tar.gz  
cd httpd-2.2.8  
./configure  –prefix=/usr/local/apache    #仅仅需要这么一个选项  
make  
make install  

(二)检查apache是否被正确的安装

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

2、执行命令行 /usr/local/apache/bin/apachectl start 启动apache守护进程,在别的机器的浏览器里输入这个服务器的ip地址,看是否可以正常浏览apache的默认页面—通常是一个“IT works!”。为了方便以后维护apache 更方便些,我们可以修改环境变量文件/etc/profile,在文件的末尾追加行 “export  PATH=$PATH:/usr/local/apache/bin “,保存后执行 source /etc/profile 使其修改立即生效,这样我们以后执行apache 启动之类的命令就不必输很长一串路径,直接输入 apachectl start 就可以了。

(三)修改apache配置文件httpd.conf

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

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

ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin  
<Directory "/usr/local/nagios/sbin"> 
       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">     
      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> 

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

四、部署nagios服务

(一)  添加帐户,以用来运行Nagios。当然也可以用root运行,但出于安全考虑而使用普通帐号来运行,并且不给这个账号分配shell登录权限.

1、  linux增加帐号的操作为 useradd nagios –s /sbin/nologin 添加帐号就自动生成同名组 nagios。

2、  freebsd增加帐号的操作为 pw groupadd nagios ; pw useradd nagios –g nagios –s /sbin/nologin.

注意:不要给nagios用户设置密码。

(二)安装nagios软件

tar zxvf nagios-2.9.tar.gz

cd nagios-2.9

./configure –prefix=/usr/local/nagios –with-nagios-user=nagios –with-nagios-group=nagios

make all

make install  执行完这个步骤后,程序会提示依次运行  make install-init , make install-commandmode ,make install-config 这几个命令。我们选取其中的两个来执行:

make install-commandmode

make install-config

跟一般的gnu源码软件安装相比,nagios的安装多了几个步骤(一般的软件运行到make install就算安装完了)。当然也可以连这两步都不执行,用手工赋予目录或文件权限,再手动创建配置文件,其效果完全相同。安装完nagios后,我们可以在安装目录/usr/local/nagios下生成下面的目录:

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

(三)安装nagios插件

没有插件,nagios将什么作用也没有,插件也是nagios扩展功能的强大武器,除了下载常用的插件外,我们还可以根据实际要求编写自己的插件。Nagios的插件nagios-plugins-1.4.9在www.nagios.org上可以找到,接着我们用wget下载它。注意:插件与nagios之间的版本关联不大,不一定非得用nagios-plugins-1.4.9这个版本。下载完成后,安装它是很简单的:先执行配置 ./configure –prefix=/usr/local/nagios ,接着编译安装 make ; make install即可。这里需要说明一下的是在配置过程指定的安装路径是/usr/local/nagios,而不是/usr/local/nagios-plus,安装完成后,将在目录/usr/local/nagios生成目录libexec(里面有很多文件),这正是nagios所需要的。

(四)配置nagios

配置是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.cfg 定义和控制nagios行为 需要修改
Cgi配置文件 cgi.cfg 浏览器执行诸如重启nagios服务等 修要修改
宏定义文件 Resource.cfg 定义插件路径 不需修改
命令定义文件 Commands.cfg 定义怎么发送短信、邮件等 需要修改
其他文件 contactgroups.cfg,contacts.cfg,hostgroups.cfg,hosts.cfg,services.cfg 监控对象配置文件,如主机配置文件、联系人配置文件等 主配置文件包含,手动创建

依照这个表格,我们逐一配置之。

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

#注释或删掉这行

#cfg_file=/usr/local/nagios/etc/localhost.cfg

#主机配置文件路径

cfg_file=/usr/local/nagios/etc/hosts.cfg

#//主机组配置文件路径

cfg_file=/usr/local/nagios/etc/hostgroups.cfg

   #联系人配置文件路径

   cfg_file=/usr/local/nagios/etc/contacts.cfg

 #联系组配置文件路径

   cfg_file=/usr/local/nagios/etc/contactgroups.cfg

   #服务配置文件路径

   cfg_file=/usr/local/nagios/etc/services.cfg

   #监视时段配置文件路径

   cfg_file=/usr/local/nagios/etc/timeperiods.cfg

   #在web界面下重启nagios、停止主机/服务检查等操作,.默认值是0.

   check_external_commands=1

   #根据自己的情况定这个命令检查时间间隔.默认值是1秒.

command_check_interval=10s

2、修改cgi配置文件cgi.cfg.跟修改nagios.cfg一样,只贴出被修改之处:

   #如有多个用户,中间用逗号隔开

   authorized_for_system_information=sery

   authorized_for_configuration_information=sery

   authorized_for_system_commands=sery

   authorized_for_all_services=sery

   authorized_for_all_hosts=nagiosadmin,sery

   authorized_for_all_service_commands=sery

   authorized_for_all_host_commands=sery

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

3、修改commands.cfg配置文件

这个文件已经包含了发送邮件报警的部分,因此只需要再把短信报警的部分加上就可以了

   ###### host-notify-by-sms command definition

   define command{

        command_name    host-notify-by-sms

     command_line /usr/local/bin/sms.pl $CONTACTPAGER$         ”$NOTIFICATIONTYPE$ alert – Host $HOSTNAME$ is $HOSTSTATE$”

        }

   ###### service-notify-by-sms command definition

   define command{

        command_name    service-notify-by-sms

     command_line    /usr/local/bin/sms.pl $CONTACTPAGER$    ”$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$”

        }

第一个块定义主机报警的内容,即主机发生死机、恢复等情况发送手机短信报警,其接受者和发送内容由“$..$”定义的宏来决定。第二个块定义服务报警内容,即监控的服务或监控的主机资源发生故障时发送手机报警短信。Nagios规定,如果探测到被监控的主机停机或不可达,它就不再探测这个停机主机上的服务。通俗地一点理解:主机都停了,当然服务也跟着停了!另外一个需要注意的地方是命令行(command_line)路径一定要用全路径,这里调用的命令就是我们在全面编写的那个脚本sms.pl。

3、  新增其他配置文件

在主配置文件nagios.cfg中,我们注释了行 cfg_file=/usr/local/nagios/etc/localhost.cfg ,而使用若干单独的配置文件来定义各种对象,这样可以获得维护方便、书写规范等诸多方面的好处。这些单独的配置文件不是自然存在的,我们需要手工创建并添加内容。当然,一开始我们并不是很清楚怎么往这些文件里添加内容,只好回过头去看官方文档,天啦,太分散了,尽然不知道怎么着手了!怎么办?打开文件localhost.cfg-sample,心里基本上就有数了:无非是把这个文件拆分开来,形成多个文件嘛!下面我按新添一个主机进入监控的较优方式添加这些配置文件(当然也可以有其它的顺序,这并不影响监控的效果)。好了,我们先把nagios服务器本身给监控上,这些监控包括:主机存活、web服务监控、磁盘空间监控、负载监控、进程数监控、ip连接数监控。

(1)、定义主机配置文件hosts.cfg

       define host {

       host_name                 nagios-server

       alias                      nagios server

       address                    59.26.240.63

       contact_groups              sagroup

       check_command             check-host-alive

       max_check_attempts          5

       notification_interval          10   

       notification_period           24×7

       notification_options          d,u,r

       }

说明:

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

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

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

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

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

(2)、定义主机组配置文件hostgroups.cfg

      define hostgroup {

      hostgroup_name  sa-servers

      alias            sa servers

      members        nagios-server

      }

说明:

●     这个配置文件不是必须的,为了在浏览器里方便归类及察看状态,可以添加这个文件。

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

(3)、定义联系人配置文件contacts.cfg

     define contact {

     contact_name         sery

     alias                system administrator

     service_notification_period    24×7

     host_notification_period       24×7

     service_notification_options   w,u,c,r

     host_notification_options       d,u,r

     service_notification_commands service-notify-by-email,service-notify-by-sms

     host_notification_commands     host-notify-by-email,host-notify-by-sms

     email                          sery@163.com

     pager                          13301000018

     }

说明:

●     服务通知选项 w-warning,u-unknown,c-critical,r-recovery.

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

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

●     收报警信息的邮件和手机,一个人如有2个手机,手机号之间有逗号分隔,邮件也如此。

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

(4)、定义联系组配置文件contactgroups.cfg

      define contactgroup {

      contactgroup_name    sagroup 

      alias                system administrator group

      members             sery 

      }

说明:

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

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

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

(5)、定义服务配置文件 services.cfg

    define service {

        host_name        nagios-server 

        service_description   check-host-alive

        check_period          24×7

        max_check_attempts    4

        normal_check_interval 3

        retry_check_interval  2

        contact_groups        sagroup 

        notification_interval   10

        notification_period     24×7

        notification_options    w,u,c,r

        check_command           check-host-alive 

        }

define service {

        host_name             nagios-server

        service_description   check_tcp 80

        check_period          24×7

        max_check_attempts    4

        normal_check_interval 3

        retry_check_interval  2

        contact_groups        sagroup

        notification_interval   10

        notification_period     24×7

        notification_options    w,u,c,r

        check_command      check_tcp!80

        }

    define service{

        host_name               nagios-server

        service_description     check-disk

        check_command           check_nrpe!check_df

        max_check_attempts      4

        normal_check_interval   3

        retry_check_interval    2

        check_period            24×7

        notification_interval   10

        notification_period     24×7

        notification_options    w,u,c,r

        contact_groups          sagroup

        }

define service{

        host_name               nagios-server

        service_description     check-load

        check_command           check_nrpe!check_load

        max_check_attempts      4

        normal_check_interval   3

        retry_check_interval    2

        check_period            24×7

        notification_interval   10

        notification_period     24×7

        notification_options    w,u,c,r

        contact_groups          sagroup

        }

define service{

        host_name               nagios-server

        service_description     total_procs

        check_command           check_nrpe!check_total_procs

        max_check_attempts      4

        normal_check_interval   3

        retry_check_interval    2

        check_period            24×7

        notification_interval   10

        notification_period     24×7

        notification_options    w,u,c,r

        contact_groups          sagroup

        } 

说明:

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

●     检查用的命令 check_command,在命令配置文件中定义或在nrpe配置文件中有定义。

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

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

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

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

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

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

五、部署nrpe

(一)安装nrpe

  tar zxvf nrpe-2.8.1.tar.gz

  cd nrpe-2.8.1

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

  make

  make install

注:如果在其他被监控机安装nrpe,需要添加系统用户nagios.

(二)复制文件

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

   cp /usr/local/nrpe/libexec/check_nrpe  /usr/local/nagios/libexec

   cp /usr/local/nagios/libexec/check_disk  /usr/local/nrpe/libexec

   cp /usr/local/nagios/libexec/check_load  /usr/local/nrpe/libexec

   cp /usr/local/nagios/libexec/check_ping  /usr/local/nrpe/libexec

   cp /usr/local/nagios/libexec/check_procs  /usr/local/nrpe/libexec

(三)配置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.该过的地方用粗体显示:

   pid_file=/var/run/nrpe.pid

   server_port=5666

    #以单独的守护进程运行

   server_address=59.26.240.63

   nrpe_user=nagios

   nrpe_group=nagios

   allowed_hosts=127.0.0.1,59.26.240.63

   dont_blame_nrpe=0

   debug=0

   command_timeout=60

   connection_timeout=300

   # The following examples use hardcoded command arguments…

   command[check_users]=/usr/local/nrpe/libexec/check_users -w 5 -c 10

   command[check_load]=/usr/local/nrpe/libexec/check_load -w 15,10,5 -c 30,25,20

   #command[check_hda1]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10 -p /dev/hda1

   command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10

   command[check_zombie_procs]=/usr/local/nrpe/libexec/check_procs -w 5 -c 10 -s Z

   command[check_total_procs]=/usr/local/nrpe/libexec/check_procs -w 150 -c 200

   command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000

 

说明:

●     allowed_hosts=127.0.0.1,59.26.240.63 必须允许nagios监控服务器可以访问。

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

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

#!/bin/sh#if [ $# -ne 2 ]

#then

#  echo “Usage:$0 -w num1 -c num2″

#exit 3

#fi

 

ip_conns=`netstat -an | grep tcp | grep EST | wc -l`

 

if [ $ip_conns -lt $1 ]

then

echo “OK -connect counts is $ip_conns”

exit 0

fi

 

if [ $ip_conns -gt $1 -a $ip_conns -lt $2 ]

then

echo “Warning -connect counts is $ip_conns”

exit 1

fi

 

if [ $ip_conns -gt $2 ]

then

echo “Critical  -connect counts is $ip_conns”

exit 2

fi

 

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

(四)、启动nrpe服务并检验其配置

     1、以独立守护进程启动nrpe服务 /usr/local/nrpe/bin/nrpe –c /usr/local/nrpe/etc/nrpe.cfg –d

     2、通过察看系统日志,正常启动可以看到如下输出:

Mar  2 21:07:18 MONITOR nrpe[23823]: Starting up daemonMar  2 21:07:18 MONITOR nrpe[23823]: Listening for connections on port 5666

Mar  2 21:07:18 MONITOR nrpe[23823]: Allowing connections from: 127.0.0.1,59.26.240.63

       察看端口,也能看见5666端口处于监听状态:

[root@MONITOR nrpe]# netstat -anActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address     Foreign Address             State     tcp    0    0 59.26.240.63:5666       0.0.0.0:*                  LISTEN

       察看进程:

[root@MONITOR nrpe]#ps aux | grep nrpe | grep -v grepnagios   23823  0.0  0.0   4864   924 ? Ss   21:07   0:00 bin/nrpe -c etc/nrpe.cfg -d

     3、检查插件功能

     (1)检查nrpe服务

[root@MONITOR nrpe]# libexec/check_nrpe -H 59.26.240.63NRPE v2.8.1

     (2)通过nrpe检查主机资源

[root@MONITOR nrpe]# libexec/check_nrpe -H 59.26.240.63 -c check_dfDISK OK – free space: / 8241 MB (77% inode=98%); /var 5239 MB (95% inode=99%); /usr 11971 MB (86% inode=97%); /dev/shm 1013 MB (100% inode=99%);| /=2417MB;11218;11228;0;11238 /var=273MB;5792;5802;0;5812 /usr=1807MB;14508;14518;0;14528 /dev/shm=0MB;993;1003;0;1013[root@MONITOR nrpe]#libexec/check_nrpe -H 59.26.240.63 -c check_ipsOK -connect counts is 13956

六、启动nagios

1、检查配置: nagios的验证非常准确,凡是不能正确启动nagios,皆可以从错误输出找到答案.

/usr/local/nagios/bin/nagios –v /usr/local/nagios/etc/nagios.cfgReading configuration data… Running pre-flight check on configuration data…

……………

Total Warnings: 0

Total Errors:   0

 

Things look okay – No serious problems were detected during the pre-flight check

2、启动nagios

/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

3、检验监控效果。现在我们监控了本机的web服务,但由于apache服务还没有被启动起来,所以等待片刻后,正常情况下会收到邮件和手机短信报警信息;等后面我们把apache服务起来后,应该能够收到服务已经恢复的报警短信和邮件。

4、创建web验证用户。我们根据前面apache配置文件的验证方法来创建用户:

/usr/local/apache/bin/htpasswd –c /usr/local/nagios/etc/htpasswd sery

5、启动apache服务,然后在别的机器的浏览器地址栏输入 http://59.26.240.63/nagios ,再输入第“4”产生的用户名及设定的密码,即可通过web方式察看监控系统当前的状态(浏览器自动刷新屏幕),如下图所示:

监控mysql服务器 

监控mysql需要在nagios和mysql服务器这两个部分做处理:mysql服务器安装nrpe、创建mysql监控用户;配置nagios及用htpasswd创建浏览器验证帐号。下面分步描述。

一、在mysql服务器安装nrpe.

这个操作与nagios服务器安装nrpe基本相同,唯一不同的是nrpe.cfg文件server_address,把它改成mysql服务器的ip地址即可。检查无误后启动nrpe服务.

二、创建mysql访问用户nagios。这个账号仅仅是nagios监控程序用来访问mysql数据库所用,与其它帐号毫无关系。为了安全起见,nagios这个账号的权限应该特别低,仅仅有数据库的select权限即可。再进一步,我们创建一个空的数据库nagdb,然后让nagios账号访问这个空库,就可以通过check_mysql插件测试和监控mysql数据库。

1、创建空的数据库(需mysql root权限): mysql > create database nagdb;

2、创建mysql账号nagios:  mysql > GRANT select ON nagdb.* TO ‘nagdb@’%’;

3、用插件检查配置:

   [root@mysql /usr/local/nrpe/libexec]# ./check_mysql -H 192.168.0.102 -u nagios -d nagdb

Uptime: 189145  Threads: 2  Questions: 3501834  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 57  Queries per second avg: 18.514

4、从nagios服务器上再检查一次:

[root@nagios /usr/local/nagios/libexec]# ./check_mysql -H 192.168.0.102 -u nagios -d nagdb

Uptime: 189664  Threads: 2  Questions: 3501836  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 57  Queries per second avg: 18.463

一切正常以后,mysql服务器这边的配置和测试就算完成了。

三、nagios服务器上的操作.即在nagios配置文件后面追加内容。

(一)、主机配置文件追加mysql主机定义,联系组contactgroups 的值为sagroup,dbgroup,具体步骤参照前面的操作。

(二)、联系人配置文件(contacts.cfg)追加数据库管理员定义(dba1),具体步骤参照前面的操作。

(三)、联系组配置文件(contactgroups.cfg)追加数据库管理员组定义(dbgroup),其成员为联系人配置文件(contacts.cfg)定义的数据库管理员(dba1)。

(四)、服务配置文件(services.cfg)追加mysql服务监控,除了mysql服务监控而外,其他几个对象都于前面的类似,只不过联系组多了一个dbgroup。这里列出mysql服务这个定义:

    define service {

        host_name             nagios-server

        service_description   check_mysql

        check_period          24×7

        max_check_attempts    4

        normal_check_interval 3

        retry_check_interval  2

        contact_groups        sagroup,dbgroup

        notification_interval   10

        notification_period     24×7

        notification_options    w,u,c,r

        check_command      check_mysql

        }

(五)、命令配置文件(command.cfg)追加检查mysql的定义,其追加内容为:

       define command {

       command_name  check_mysql

       command_line    $USER1$/check_mysql –H $HOSTADDRESS$ -u nagios –d nagdb

       }

(六)、检查并启动nagios

       cd /usr/local/nagios

       bin/nagios –v etc/nagios.cfg

       bin/nagios –d etc/nagios.cfg

(七)增加apache验证帐号

      /usr/local/apache/bin/htpasswd /usr/local/nagios/etc/htpasswd db1

输入两次密码后,从别的计算机的浏览器地址栏输入  http://59.26.240.63/nagios ,再输入用户名db1及刚才设定的密码,进入页面后,点击左上方的链接“Service Detail”,就可以看到mysql服务器当前的运行状态(db1用户只能看到mysql服务器状态,而管理员sery账号则可以看所有被监控对象的状态)。

监控其他服务器 

操作步骤跟监控mysql差不多,不再赘叙。

服务器监控的一些策略 

前段时间有人问我怎么用nagios监控linux内存使用情况,以及怎么设置报警阈值?linux运行时,是最大可能的利用内存,监控这个对象没有现实意义,明显属于无效的监控策略.另有一人说:”晚上没完没了的收到监控系统的发送的报警短信,受不了…”。不言而喻,这也是一个不好的监控策略,实际上监控已经失去了它的意义。所以要让监控平台更有效的发挥作用,好的策略是必须的。那么怎么才能算是好的策略,这里我结合我的实际情况,谈谈我的一些看法,希望对大家有所帮助。

策略一:监控对象选择

在一个规模较大的网络中,监控的对象可能包括服务器、防火墙、交换机、路由器等等设备,以及运行在各对象上的服务。但是,我们没必要把所有的对象都放到这个监控系统中来。比如把某些测试系统放到监控中,就会产生如上那位老兄整个晚上收到报警短信的麻烦。因此,选择正确的监控对象是实施有效监控的前提,个人建议,只有那些重要级别高的,不能随便停止服务的对象――如在线交易系统――才是值得监控的对象。当然,服务器的使用者总希望你把它监控上,哪怕它不是那么重要。

策略二:故障报警方式选择

老板非常希望我们不知疲倦的坐在计算机旁,但是他只是一厢情愿而已。对监控系统而言,一定要有合适的故障告警机制。目前常用的告警机制包括:邮件、短信、msn、web页面显示等几种手段,这几种手段中,短信报警最佳。因为在夜间睡梦中,我们没办法随时收邮件,但是短信去能唤醒我们,通知我们发生故障了,而且在老板和用户发现这个故障以前。对于没有通道的机构来说,租用sp提供的服务是比较稳妥的方式,其他如用移动飞信等方式都不怎么考谱,不适合关键性业务运营。另外我使用了一个小技巧,让监控平台每天下午给我发一条短信,不管有没有故障都发,这样以便让我知道短信接口是否正常。

策略三:故障报警时效和间隔的选择

由于网络通信等不可控因素,因此可能存在故障误报的情况。如果把报警发送设置成一次探测不成功就发送报警信息就不是个好策略。经验表明:探测3-4次都失败再发送信息,并不耽误我们去处理故障。假如探测一次失败就报警,即可以很快把手机短信空间塞满,又会让你睡不好觉。

故障报警开始发送以后,一般会没完没了的发送,直到故障排除恢复正常,才会发一条类似“*** is ok!”的短信。报警发送间隔设置,也是需要费一番心思,设短了,不停的消耗你的短信费用,设长了,恐怕不足以唤醒沉睡的人;如果没有人去处理故障,也没有人去停止这个通知,报警信息就会一直发送下去。

那怎么样是一个合适的范围呢?我的做法是:探测4次失败开始报警,报警间隔10分钟,总共发送8次,然后停止发送,假如第3次没有人去处理,我会电话通知,没回应则取消该对象的监控,并记录该次事件。

 

策略四:监控平台地点的选择

对于一个规模比较大的网络,为了解决南北互联问题而采取多个地点建立数据中心的办法。这时需要对不同地理位置的服务器进行监控,也会遇到访问慢的问题。解决这个问题有几种方式:1、选择一个到各个位置访问都顺畅的数据机房;2、采取分步是监控平台,各处自己收集监控信息,然后到一处汇总;3、各数据中心单独建监控平台。各人可以根据自己的实际情况自行选择。

策略五:流量控制和安全

有不少商业解决方案采取snmp和客户端软件来监控各个对象,这会引起额外的流量和带来安全问题。因此尽量不要使用snmp这样比较占资源的协议(具称snmp v3似乎有所改进)。开源解决方案Nagios在这方面做得比较完美,值得推荐一下。它可以以插件方式先收集到各监控对象的信息,然后再传送到监控服务器上,大大节省网络带宽。

发表评论