nagios安装

目录

一.Nagios报警简介... 3

二.nagios-master安装... 3

1.用户,目录权限设置... 3

2.安装 nagios-3.0.5.tar.gz. 3

3.Nagios-plugins-1.4.13.tar.gz. 4

4. 修改apache配置... 4

5.主配置文件nagios.cfg. 6

6.权限控制文件cgi.cfg的配置... 7

7.主机定义文件hosts.cfg. 8

8.主机组定义文件hostgroups.cfg. 9

9.监控时间段定义文件timeperiods.cfg. 9

11.联系人配置文件contacts.cfg. 10

12.联系组配置文件contactgroups.cfg. 10

13.服务定义文件services.cfg. 11

14.检测配置,启动web监控... 11

15.一些Nagios插件介绍... 13

二、 监控远程主机... 15

1.首先需要添加nagios用户... 16

2. xinetd服务安装... 16

3.安装nagios-plugins. 16

4.安装nrpe. 17

5.nrpe被监控端配置... 18

6.nagios-master主监控机nrpe设置... 19

三.nagios插件扩展... 19

1.自定义插件check_log_error(shell). 20

2.自定义插件check_hdfs_folder_age(shell). 22

3.自定义插件check_crawler_spider(shell). 23

4.自定义插件check_server_app(python). 24

四.与ganglia集成... 26

1. check_ganglia.py插件扩展... 26

2.nagios-master的service配置... 27

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一.Nagios报警简介

nagios的功能是监控服务和主机,但是他自身并不包括这部分功能的代码,所有的监控、检测功能都是有插件来完成的。

再说报警功能,如果监控系统发现问题不能报警那就没有意义了,所以报警也是nagios很重要的功能之一。但是,同样的,nagios自身也没有报警部分的代码,甚至没有插件,而是交给用户或者其他相关开源项目组去完成。

nagios安装,是指基本平台,也就是nagios软件包的安装。它是监控体系的框架,也是所有监控的基础。

打开nagios官方的文档,会发现nagios基本上没有什么依赖包,只要求系统是linux或者其他nagios支持的系统。不过如果你没有安装apache(httpd服务),那么你就没有那么直观的界面来查看监控信息了,所以apache姑且算是一个前提条件。关于apache的安装,网上有很多,照着安装就是了。安装之后要检查一下是否可以正常工作。

 

nagios定义了4种监控状态,代表不同的严重级别,除了OK代表正常不用关心外,其余3种都要引起重视.如下表:

状态

代码

颜色

正常

OK

绿色,

警告

WARNING

黄色,

严重

CRITICAL

红色,

未知错误

UNKOWN

深黄色

 

二.nagios-master安装

1.用户,目录权限设置

先增加用户 useradd nagios

mkdir /usr/local/nagios

chown -R nagios /usr/local/nagios

 chgrp -R nagios /usr/local/nagios

2.安装 nagios-3.0.5.tar.gz

cd  /usr/local/src

wget  http://nchc.dl.sourceforge.net/project/nagios/nagios-3.x/nagios-3.0.5/nagios-3.0.5.tar.gz

tar –zxvf  nagios-3.0.5.tar.gz

cd  usr/local/src/nagios-3.0.5

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

make all

make install

make install-init

make install-commandmode

make install-config

make install-webconf

验证程序是否被正确安装。切换目录到安装路径(这里是/usr/local/nagios),看是否存在etc、bin、 sbin、 share、 var这五个目录,如果存在则可以表明程序被正确的安装到系统了。后表是五个目录功能的简要说明:

bin

Nagios执行程序所在目录,nagios文件即为主程序

etc

Nagios配置文件位置,初始安装完后,只有几个*.cfg-sample文件

sbin

Nagios   Cgi文件所在目录,也就是执行外部命令所需文件所在的目录

Share

Nagios网页文件所在的目录

Var

Nagios日志文件、spid 等文件所在的目录

 

3.Nagios-plugins-1.4.13.tar.gz

wget  http://syslab.comsenz.com/downloads/linux/nagios-plugins-1.4.13.tar.gz

tar -zxvf nagios-plugins-1.4.13.tar.gz

cd  /usr/local/src/nagios-plugins-1.4.13

编译,指定路径为之前nagios的安装路径

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

make

安装

make install

ls /usr/local/nagios/libexec/

会显示安装的插件文件,即所有的插件都安装在libexec这个目录下

4. 修改apache配置

修改apache的配置文件,增加nagios的目录,并且访问此目录需要进行身份验证

vi /usr/local/apache2/conf/httpd.conf,在最后增加如下内容

#setting for nagios 20070707

ScriptAlias /nagios/cgi-bin   /usr/local/nagios/sbin

<Directory   "/usr/local/nagios/sbin">

    Options ExecCGI

    AllowOverride None

    Order allow,deny

    Allow from all

    AuthName "Nagios Access"

    AuthType Basic

AuthUserFile /usr/local/nagios/etc/htpasswd

//用于此目录访问身份验证的文件

    Require valid-user

</Directory>

 

Alias /nagios /usr/local/nagios/share

<Directory   "/usr/local/nagios/share">

    Options None

    AllowOverride None

    Order allow,deny

    Allow from all

    AuthName "Nagios Access"

    AuthType Basic

AuthUserFile /usr/local/nagios/etc/htpasswd

//用于此目录访问身份验证的文件

    Require valid-user

</Directory>

增加验证用户

也就是通过web访问nagios的时候,必须要用这个用户登陆.在这里我们增加用户guest:密码为guest

/usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd guest

New password: (输入guest)

Re-type new password: (再输入一次密码)

Adding password for user guest

 到这里nagios的安装也就基本完成了,你可以通过web来访问了.

[url]http://192.169.32.73/nagios[/url] 会弹出对话框要求输入用户名密码

                         

输入guest,密码guest,就可以进入nagios的主页面了

 

查看认证文件的内容

less /usr/local/nagios/etc/htpasswd

guest:yrxWWTzuHrX5A  前半部分是用户名guest,后面是加密后的密码

5.主配置文件nagios.cfg

     Nagios自己定义了一套规则用于配置文件,其中最重要的概念就是”对象”----object.通俗的理解:假定我们首先定义了”性别”这个对象,它的值只可能是男,女,人妖等等,然后定义某人为一个对象,例如张三,定义张三的时候有”性别”这个属性,它的值就必须来源了之前定义的性别这个对象,要么是男,要么是女

在Nagios里面定义了一些基本的对象,一般用到的有:

联系人

contact

出了问题像谁报告?一般当然是系统管理员了

监控时间段

timeperiod

7X24小时不间断还是周一至周五,或是自定义的其他时间段

被监控主机

host

所需要监控的服务器,当然可以是监控机自己

监控命令

command

nagios发出的哪个指令来执行某个监控,这也是自己定义的

被监控的服务

service

例如主机是否存活,80端口是否开,磁盘使用情况或者自定义的服务等

     另外,多个被监控主机可以定义为一个主机组,多个联系人可以被定义为一 个联系人组,多个服务还能定义成一个服务组

回到上面的例子,定义张三需要之前定义的性别,我们定义一个被监控的服务,当然就要指定被监控的主机,需要监控的时间段,要用哪个命令来完成这个监控操作,出了问题向哪个联系人报告

所有这些对象绝对多数都是需要我们手动定义的,这就是nagios的安装显得复杂的地方.下面我们来配置nagios主配置文件。

修改nagios的主配置文件nagios.cfg

vi   /usr/local/nagios/etc/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/servicegroups.cfg       //服务组配置文件路径

cfg_file=/usr/local/nagios/etc/timeperiods.cfg    //监视时段配置文件路径

cfg_file=/usr/local/nagios/etc/commands.cfg    //命令配置

cfg_file=/usr/local/nagios/etc/templates.cfg      //模板定义

6.权限控制文件cgi.cfg的配置

[root@nagios etc]# vim cgi.cfg

   
Cgi.cfg的作用是控制相关cgi脚本,先确保use_authentication=1,

 

   
default_user_name=***这句可以不用定义,默认是注释掉的,看命令解释说地定义有风险。

 

authorized_for_system_information=nagiosadmin,guest

authorized_for_configuration_information=nagiosadmin, guest

authorized_for_system_commands=nagiosadmin, guest //多个用户之间用逗号隔开

authorized_for_all_services=nagiosadmin, guest

authorized_for_all_hosts=nagiosadmin, guest

authorized_for_all_service_commands=nagiosadmin, guest

authorized_for_all_host_commands=nagiosadmin, guest

 

上述的用户名就是之前使用htpasswd -c /usr/local/nagios/etc/htpasswd.users guest生成的guest用户。在此就不做过多说明了。不过这个要注意,请不要随便添加不存在的验证用户,并且为了安全起见,不要添加过多的验证用户。

7.主机定义文件hosts.cfg

cd  /usr/local/nagios/etc/

vim hosts.cfg    此处没有hosts.cfg文件,直接vim编辑创建即可

 

 

define host{

        host_name                       192.169.32.67

//被监控主机的名称,最好别带空格 用tab键来分隔

        alias                           mechine67

        //别名

        address                         192.169.32.67

        //被监控主机的IP地址

        check_command                   check-host-alive

        //监控的命令check-host-alive,这个命令来自commands.cfg,用来监控主机是否存活

        max_check_attempts              5

        //检查失败后重试的次数

        check_period                    24x7

        //检查的时间段24x7,见下面timeperiods.cfg中定义

        contacts                  xubl

        //联系人

notification_interval           1000

        //提醒的间隔,每隔1000秒提醒一次

notification_period             24x7

        //提醒的周期, 24x7,见下面timeperiods.cfg中定义

notification_options            d,u,r

//指定什么情况下提醒,具体含义见下面contacts.cfg部分的介绍

        }

8.主机组定义文件hostgroups.cfg

cat   /usr/local/nagios/etc/hostgroups.cfg

 

此处添加之前已定义好的主机名就行了,不同主机名之间用逗号隔开。

9.监控时间段定义文件timeperiods.cfg

cat  /usr/local/nagios/etc/timeperiods.cfg

 

其他时间段一般不需要。

11.联系人配置文件contacts.cfg

cat   /usr/local/nagios/etc/contacts.cfg

 

此处定义的就是出了问题应该通知谁,通常就是系统管理员,上图定义的就是当监控服务出现w(warn) , u(unknow)、c(critical)、r(从异常状态下恢复)或者主机出现d(down机)、u(unreachable)、r(从异常状态下恢复)的时候就会以notify-service-by-email和notify-host-by-email命令定义的方式(此命令是在commands.cfg中定义的)向系统管理员发送报警通知。注意,contacts.cfg最下面也有关于contactgroup的模版,这里我们另外创建一个contactgroup.cfg联系组的文件,就不在联系人文件中定义联系组了,contacts.cfg中关于contactgroup的配置直接删除即可。

12.联系组配置文件contactgroups.cfg

cat   /usr/local/nagios/etc/contactgroups.cfg

 

定义联系组的组名为datagroup,组的成员来自于上面定义的contacts.cfg,如果有多个联系人则以逗号相隔。下面是最关键的了,用nagios主要是监控一台主机的各种信息,包括本机资源,对外的服务等等.这些在nagios里面都是被称之为service,而实现对一个service的监控,则需要通过commands.cfg文件中定义的命令

例如我们现在有一个需要监控的service,是监控一台机器的web服务是否正常, 我们需要哪些元素呢?最重要的有下面三点:首先是监控哪台机,然后是这个监控要用什么命令实现,最后就是出了问题的时候要通知哪个联系人?接下来,看第13部分。

13.服务定义文件services.cfg

cat /usr/local/nagios/etc/services.cfg

 

以监控http服务为例,监控的主机为67这台主机,监控的时间段为24x7这个时间段名命定的定义

引用的检查服务命令是commands.cfg里定义的check_tcp!80这个命令,就是去ping主机的80端口来检查http是否正常,发现ping不通后最大尝试次数为3次,包括重新检查间隔这些参数都是在timeperiods.cfg里定义的,自己可以修改。

还有就是报警参数的设置也是自己按需求定义(参数在命令后面用!分割)。

报警通知联系人也可以根据需要自定义。

14.检测配置,启动web监控

当所有的文件都配置好以后,可以用命令检查配置得是否正确。

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg  检测配置文件是否正确

 

如果Error是0说明配置没有问题,如果有错误的话会有提示哪里出错,检查出错的配置文件。

/etc/init.d/httpd restart

/etc/init.d/nagios   restart

在浏览器输入主监控机IP地址测试:http://192.169.32.73/nagios/

 

 

要求用户名验证,就是之前httpasswd创建的web验证用户guest,第一部分的功能已经实现了,就是简单的监控主机是否存活当然,对于系统监控来说,这是远远不够的,对于来说,他的真正功能功能还没有发挥出来,在下面部分会详细的叙述。

 

15.一些Nagios插件介绍

nagios本身并没有监控的功能,所有的监控是由插件完成的,插件将监控的结果返回给nagios,nagios分析这些结果,web的方式展现给我们,同时提供相应的报警功能(这个报警的功能也是由插件完成的)

所有的这些插件是一些实现特定功能的可执行程序,默认安装的路径是/usr/local/nagios/libexec

 

 

我们在定义某个监控service时,所用的监控命令都是来自commands.cfg的,commands.cfg中定义的监控命令就是使用的这些插件.举个例子,之前我们已经不止一次用到了check-host-alive这个命令,打开commands.cfg就可以看到这个命令的定义,如下:

command_name    check-host-alive

这句话的意思是定义的命令名是check-host-alive,也就是我们在services.cfg中使用的名称

执行的操作是

$USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5

其中$USER1$是在resource.cfg文件中定义的,代表插件的安装路径.就如我们上面看到的那样$USER1$=/usr/local/nagios/libexec,至于$HOSTADDRESS$,则默认被定义为监控主机的地址.

简单的说,我们在services.cfg中定义了对192.169.32.67执行check-host-alive命令,实际上就是执行了

/usr/local/nagios/libexec/ check_ping -H 192.169.32.67 -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实际上是执行的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中直接使用,如果带了使用时就带上参数,!相隔

继续编辑services.cfg服务配置文件,添加需要监控的服务,基本上就是copy上节我们定义监控主机存活的配置,略作修改就行:

监控192.169.32.67的FTP服务

define service{

        host_name               192.169.32.67

          要监控的机,给出机器名,注意必须是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    u,c,r

        contacts                xubl

        }

 

监控192.169.32.67的根分区使用情况

define service{

        host_name              192.169.32.67

          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

        contacts                     xubl

        }

 

其他的监控服务类似于这样,需要监控的服务在commands.cfg里都可以一一找到模版,需要监控不同主机只要修改hostname这一栏就行了。

二、监控远程主机

         对于像磁盘容量,cpu负载这样的”本地信息”,nagios只能监测自己所在的主机,而对其他的机器则显得有点无能为力.毕竟没得到被控主机的适当权限是不可能得到这些信息的.为了解决这个问题,nagios有这样一个附加组件----NRPE.用它就可以完成对linux类型主机”本地信息”的监控.

NRPE原理图如下:

 

NRPE总共由两部分组成:

– check_nrpe 插件,位于在监控主机(nagios-master)上

– 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.首先需要添加nagios用户

[[email protected]~]#useradd nagios

[[email protected]~]#passwd nagios

 

2. xinetd服务安装

service xinetd 命令先查看有没有xinetd,没有的话,进行安装 yum install xinetd

 

3.安装nagios-plugins

cd  /usr/local/src

wget http://syslab.comsenz.com/downloads/linux/nagios-plugins-1.4.13.tar.gz

tar -zxvf nagios-plugins-1.4.13.tar.gz

  cd  /usr/local/src/nagios-plugins-1.4.13

  ./configure(如果报错:no acceptable C compiler found in $PATH  则先安装  yum install gcc)

  make

  make install

  这一步完成后会在/usr/local/nagios/下生成两个目录libexec和share

 修改目录权限

 chown -R nagios /usr/local/nagios

 chgrp -R nagios /usr/local/nagios

4.安装nrpe

cd  /usr/local/src

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz

  tar -zxvf nrpe-2.12.tar.gz

  cd  /usr/local/src/nrpe-2.12

  ./configure --enable-command-args

  (如果提示ssl 找不到,则先运行 yum install openssl-devel,再运行./configure)

  make all

  make install-plugin

  make install-daemon

  make install-daemon-config

  现在再查看/usr/local/nagios/目录就会发现有4个目录了

  bin      etc      libexec  share

  安装到xinetd下

  make install-xinetd

  vi /etc/xinetd.d/nrpe

  设置only_from=nagios master的ip

  only_from       = 192.167.33.73 192.169.32.73 127.0.0.1

  保存退出

增加nrpe服务

vim /etc/services

 

在最后一行添加上 nrpe         5666/tcp            #nrpe

最后重启xinetd服务 

service xinetd restart

---------------------------------------------------------------------

 

可以查看到5666端口已经在监听了,然后使用check_nrpe这个插件功能测试nrpe时候正常工作

 

可以看到返回当前NRPE的版本,说明本地用check_nrpe连接nrpe daemon是正常的。要注意的是为了让主监控机能监控到被监控机信息,被监控机也要保证防火墙打开5666端口

5.nrpe被监控端配置

进入到/usr/local/nagios/etc目录,可以看到目录下有一个nrpe.cfg文件,这就是nrpe的主配置文件,编辑他,找到下面这段话:

# The following examples use hardcoded command   arguments...

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

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

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

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

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

红色部分是命令名,也就是check_nrpe 的-c参数可以接的内容,等号=后面是实际执行的插件程序(这与commands.cfg中定义命令的形式十分相似,只不过是写在了一行).也就是说check_users就是等号后面/usr/local/nagios/libexec/check_users -w 5 -c 10的简称

我们可以很容易知道上面这5行定义的命令分别是检测登陆用户数,cpu负载,hda1的容量,僵尸进程,总进程数.各条命令具体的含义见插件用法(执行”插件程序名 –h”)

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_load

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_hda1

/usr/local/nagios/libexec/check_nrpe -H   localhost -c check_zombie_procs

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_total_procs

到此被监控机上的配置就完成了,下面是在nagios-master上的nrpe设置:

6.nagios-master主监控机nrpe设置

在主监控机上其实要做的就是安装check_nrpe插件,然后在commands.cfg里创建check_nrpe的命令定义,daemon不需要安装上去,但是为了保险起见还是同客户端上一样都安装上去。

安装过程参照(2. xinetd服务安装,4.安装nrpe)

 

7.commands.cfg增加check_nrpe定义

只需要在最后增加下面内容:

 

-c后面带的$ARG1$参数是传给nrpe daemon执行的检测命令,之前说过了它必须是nrpe.cfg中所定义的那5条命令中的其中一条.在services.cfg中使用check_nrpe的时候要用!带上这个参数

下面就可以在services.cfg中定义对192.169.32.67主机cpu负载等等的监控

define service {

host_name  192.169.32.67

被监控的主机名,这里注意必须是linux且运行着nrpe,而且必须是hosts.cfg中定义的

service_description check-users

监控项目的名称

check_period 24x7

max_check_attempts 4

normal_check_interval 3

retry_check_interval 2

contacts    xubl

notification_interval 10

notification_period 24x7

notification_options w,u,c,r

check_command check_nrpe!check_load

监控命令check_nrpe,是在commands.cfg中定义的,带的参数是check_load,是在nrpe.cfg中定义的

}

接下来重启nagios就行了,到此服务器端和客户端的配置全部完成。

三.nagios插件扩展

前面我们知道,监控的功能完全是否插件来实现的,很多时候我们需要扩展自己的插件来监控特定的service,插件扩展的基本步骤:

1.插件检测的service状态是否正常,在插件的脚本程序退出码来体现。

(如发现service正常,则 exit 0)

2.程序在退出之前,打印一段描述文字,可以显示在nagios界面上

(如echo “service OK!”)

附service状态和脚本程序退出码对应关系:

状态

代码

脚本程序退出码

正常

OK

0

警告

WARNING

1

严重

CRITICAL

2

未知错误

UNKOWN

--一般不用

 

1.自定义插件check_log_error(shell)

>>>1.1主要功能:

(1)     根据关键字查找进程(通常是一个进程的运行入口主类)

监控这个进程是否存在,如果不存在,则报警。

(2)     检测log,看是否有新的error log出现,如果有,则报警。

>>>1.2参数

(1)     要检测的进程关键字(通常是一个进程的运行入口主类)

(2)     log4j打印的日志的文件夹(该文件夹下必须有error.log文件,专门打印error级别的log)

>>>1.3代码(shell)

位于68机器/usr/local/nagios/libexec/

#!/bin/sh

folder=$2

cd    $folder

#====1检测进程存活============================================

process_count=`ps -ef | grep  $1 |cut -c 9-15 |  wc    -l`

let process_count=process_count-3

if [ $process_count -lt  1  ]

 then

 echo   "ERROR process not exist ["$1"]"

 exit   2

fi

 

#=====2.检测error信息============================================

#检查error.log,取得文件的最新更新时间,然后与当前目录下recent_solve_time.txt中的时#间,作对比

#如果error.log修改时间大于recent_solve_time时间,则报警

#如果recent_solve_time.txt文件不存在,则与当前时间作比较

#==============================================================

recent_error_time="1970-01-01   00:00:00"

#如果有error信息,则得到error.log的最后修改时间

if [ -f error.log ]

 then

     error_count=`tail -200 error.log | grep ERROR |wc -l`

   if   [ $error_count -gt 0  ]

      then   

       recent_error_last_modify_timestamp=`stat -c %Y error.log`

       recent_error_time=`date –d @$recent_error_last_modify_timestamp  "+%Y-%m-%d %H:%M:%S"`

    fi

fi

recent_solve_time="1970-01-01 00:00:00"

#查看有没有解决问题记录

if [ -f recent_solve_time.txt ] 

  then

      recent_solve_time=`cat    recent_solve_time.txt`

fi

msg="recent_solve_time="$recent_solve_time";recent_error_time="$recent_error_time

#比较两个时间(先转化为时间戳,然后比较大小)

recent_solve_timestamp=`date -d "$recent_solve_time"   +%s`

recent_error_timestamp=`date -d   "$recent_error_time" +%s`

if [ $recent_error_timestamp -gt   $recent_solve_timestamp ]

 then

     echo  "ERROR "$msg

     exit 2

 else

     echo " OK "$msg

     exit 0

fi

 

>>>1.4被监控端配置

(1).脚本拷贝到/usr/local/nagios/libexec/

(2).编辑 /usr/local/nagios/etc/nrpe.cfg  , 增加以下内容:

 

(3).重启:service xinetd restart

>>>1.5 nagios-master配置

(1).编辑services.cfg ,配置你想要监控的进程,如:

 

(2).重启 service nagios restart

2.自定义插件check_hdfs_folder_age(shell)

>>>2.1主要功能:

check一个hdfs目录的最近更新时间,如果时间过久,则报警

(如监控源码下载包的上传目录,如果很长时间没有源码包,说明下载有问题)

>>>2.2参数

(1)hdfs目录

(2)目录更新时间间隔的报警阀值(如超过两个小时没更新,就报警) 单位为秒

>>>2.3代码(shell)

位于49机器/usr/local/nagios/libexec/

#!/bin/sh

current_year=`date   +%Y`

last_modify_time=${current_year}`/home/parallel/hadoop-1.0.1/bin/hadoop   dfs -ls  $1 |  tail -1 | awk -F $1 ‘{print $1}‘| awk -F   ${current_year}  ‘{print $2}‘`

last_modify_timestamp=`date   -d "${last_modify_time}"    +%s`

current_timestamp=`date  +%s`

#比较源码最修上传时间--与当前时间---相差特定时间以上,则报警

current_timestamp_diff=`expr   $current_timestamp - $2`

if   [ $current_timestamp_diff  -gt  $last_modify_timestamp ]

 then

  echo "ERROR! $1  is too old!"

  exit 2

 else

  echo "OK $1  modified at "${last_modify_time}

  exit 0

fi

 

>>>2.4被监控端配置

(1).脚本拷贝到/usr/local/nagios/libexec/

(2).编辑 /usr/local/nagios/etc/nrpe.cfg  , 增加以下内容:

 

(3).重启:service xinetd restart

>>>2.5 nagios-master配置

(1).编辑services.cfg ,配置你想要监控的进程,如:

 

(2).重启 service nagios restart

 

3.自定义插件check_crawler_spider(shell)

>>>3.1主要功能:

(1)     检查crawler进程是否存在,不存在则报警

(2)     检查cralwer 最近半小时内下载成功的url数量,如果==0,则报警

>>>3.2参数

(1)crawler进程运行入口主类(一般是tsinghua.crawlers.spider.Spider)

(2)log4j打印的日志目录(里面有info.log)

因为nagios需要读取文件,必须保证nagois对这个文件的读权限

(把/home/crawler改为nagios可读 setfacl  -R -m  u:nagios:rx /home/crawler)

>>>3.3代码(shell)

位于68机器/usr/local/nagios/libexec/

#!/bin/sh

#===1.检测进程存活===================================================

process_count=`ps   -ef | grep  $1 |cut -c 9-15 |  wc    -l`

let   process_count=process_count-3

if   [ $process_count -lt  1  ]

 then

 echo "ERROR process not exist   ["$1"]"

 exit 2

fi

 

#=====================2.检测info.log中最近半小时出现finish关键字的次数

total_count="0"

export   total_count

cd   $2

interval=3

current_time=`date   +%s`

last_ten_minute=`expr   $current_time - 600`

last_twenty_minute=`expr   $current_time - 1200`

last_thirty_minute=`expr   $current_time - 1800`

#当前十分钟段

current_time_interval=`date   -d @$current_time  "+%Y-%m-%d   %H:%M:%S" | cut -c 1-15`

#十分钟之前段

last_ten_minute_interval=`date   -d @$last_ten_minute  "+%Y-%m-%d   %H:%M:%S" | cut -c 1-15`

#二十分钟之前段

last_twenty_minute_interval=`date   -d @$last_twenty_minute  "+%Y-%m-%d   %H:%M:%S" | cut -c 1-15`

#三十分钟之前段

last_thirty_minute_interval=`date   -d @$last_thirty_minute    "+%Y-%m-%d %H:%M:%S" | cut -c 1-15`

function   getFinishCount()

{

#第一个参数为文件名字,第二个参数为时间正则,第三个参数为关键字

count=`cat   $1 | grep "$2" | grep "$3" | wc -l`

total_count=`expr   $total_count + $count`

}

getFinishCount   info.log "${current_time_interval}"    "finish"

getFinishCount   info.log "${last_ten_minute_interval}"  "finish"

getFinishCount   info.log "${last_thirty_minute_interval}"  "finish"

getFinishCount   info.log "${last_twenty_minute_interval}"  "finish"

if   [ $total_count -lt 1  ]

 then

 echo "ERROR! the count of urls  in    recent thirty minutes  is   0!!"

 exit 2

else

 echo "OK! the count of urls  in    recent thirty minutes  is   "$total_count

 exit 0

fi

 

>>>3.4被监控端配置

(1).脚本拷贝到/usr/local/nagios/libexec/

(2).编辑 /usr/local/nagios/etc/nrpe.cfg  , 增加以下内容:

 

(3).重启:service xinetd restart

>>>3.5 nagios-master配置

(1).编辑services.cfg ,配置你想要监控的进程,如:

 

(2).重启 service nagios restart

4.自定义插件check_server_app(python)

>>>4.1主要功能:

检查server调度中raw_page_hbase,raw_page_extract,dr_hbase失败或等待的数据包个数,超过阀值则报警。(通过查询mysql统计的任务包个数)

>>>4.2参数

         针对特定程序的脚本,没有参数

>>>4.3代码(python)

位于68机器/usr/local/nagios/libexec/

#!/usr/bin/python

#coding=utf-8

import MySQLdb

import sys

try:

     connection = MySQLdb.connect(user="guest",passwd="guest1234",host="192.167.33.90",db="platform")

except:

     print "Could not connect to MySQL server."

     exit( 0 )

 

msg = "ERROR"

 

try:

     cursor = connection.cursor()

 

   #获取[源码导入hbase]未成功的数量

     cursor.execute( "select count(*) from server_app_raw_page_hbase   where state not like ‘success%‘" )    

     result = cursor.fetchone();  

     raw_page_hbase_unsuccess_count = result[0]   

     #print raw_page_hbase_unsuccess_count

 

   #获取[源码抽取]未成功的数量

     cursor.execute( "select count(*) from server_app_raw_page_extract   where state not like ‘success%‘" )

     result = cursor.fetchone();

     raw_page_extract_unsuccess_count = result[0] 

     #print    raw_page_extract_unsuccess_count

 

   #获取[DR导入hbase]未成功的数量

     cursor.execute( "select count(*) from server_app_dr_hbase where   state not like ‘success%‘" )

     result = cursor.fetchone();

     dr_hbase_unsuccess_count = result[0]

     #print dr_hbase_unsuccess_count

 

     cursor.close()

  

   if(   raw_page_hbase_unsuccess_count<30 and   raw_page_extract_unsuccess_count<30 and   dr_hbase_unsuccess_count<30  ):

       msg = "ok"    

except:

       print "Invoke Exception"

       sys.exit(2)

 

if( msg=="ERROR" ):

       msg = "ERROR! raw_page_hbase:" +   str(raw_page_hbase_unsuccess_count)   +";raw_page_extract:"+str(raw_page_extract_unsuccess_count)+";dr_hbase:"+str(dr_hbase_unsuccess_count)

       print msg

       sys.exit(2)

else:

       msg = "OK! raw_page_hbase:" +   str(raw_page_hbase_unsuccess_count)   +";raw_page_extract:"+str(raw_page_extract_unsuccess_count)+";dr_hbase:"+str(dr_hbase_unsuccess_count)

       print msg

       sys.exit(0)

 

>>>4.4被监控端配置

(1).脚本拷贝到/usr/local/nagios/libexec/

(2).编辑 /usr/local/nagios/etc/nrpe.cfg  , 增加以下内容:

 

(3).重启:service xinetd restart

>>>3.5 nagios-master配置

(1).编辑services.cfg ,配置你想要监控的进程,如:

 

(2).重启 service nagios restart

 

四.与ganglia集成

1. check_ganglia.py插件扩展

nagios可以监控ganglia中定义的metric的数值,当metric的value高于或低于阀值的时候,进行报警。

ganglia本身自带了这样一个nagios插件(ganglia解压目录下的/contrib/check_ganglia.py)

但该插件有个缺点,就是他判断当metric高于阀值时提供报警,这显然不能满足我们的要求,例如磁盘剩余空间,很显然当剩余空间低于阀值时需要报警,所以需要对check_ganglia.py进行改动。

首先,我们约定,metric名称中含有” _free”关键字,我们认为这是剩余量的意思,此类metric低于阀值时需要报警。基于这个约定,我们改写下check_ganglia.py

在check_ganglia.py的最后找到下面这段代码:

 

在这段话之前,加上下面这样一段代码,即判定metric是否包含关键字”_free”,如果是,则在低于阀值时,报警。扩展代码如下图所示:

 

(扩展后的代码位于73机器/usr/local/nagios/libexec/check_ganglia.py)

扩展后的代码,放到nagios-master 的/usr/local/nagios/libexec/目录下

2.nagios-master的service配置

以下所有配置,见73机器

 

2.1定义check_ganglia命令

编辑/usr/local/nagios/etc/commands.cfg,增加配置

 

 

2.2编辑/usr/local/nagios/etc/hostgroups.cfg

定义ganglia-services组,组成员为*,所有机器

 

2.3编辑/usr/local/nagios/etc/servicegroups.cfg

定义ganglia-metrics服务组

 

 

2.4编辑/usr/local/nagios/etc/templates.cfg

定义ganglia-service模板

 

 

2.5定义硬盘和内存service

编辑/usr/local/nagios/etc/services.cfg

检测各个机器的硬盘,当小于30G的时候,报警

 

检测各个机器的内存,当小于30000K时,报警

 

至此,各个机器的内存和硬盘已经监控起来,数据的来源当然是ganglia采集的

 

2.6 load的监控

load的监控有个问题,16核的机器和4核的机器报警阀值不一样。

这样的话,得在/usr/local/nagios/etc/templates.cfg中定义load16,load8,load4这样的service模板,各个机器根据自己的cpu配置,决定引用哪个模板

下面是在/usr/local/nagios/etc/templates.cfg中增加的内容:

 

下面是/usr/local/nagios/etc/services.cfg中配置load的实例(每台机器都需要配置):

 

配置成功后,重启nagios,每台机器的内存,硬盘,load全部监控了起来(如下图所示)

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。