Nagios监控系统配置过程2-阿里云开发者社区

开发者社区> 开发与运维> 正文

Nagios监控系统配置过程2

简介:
接着上面的继续配置:
4. 使用命令和插件监控更多信息

 

我们已经增加了二个监控项目,分别监控nagios,apache这二台主机是否存活.

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

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

 

这些程序都是可以独立执行的,使用方法可以通过”命令名 –h”来查看

 

例如,我们查看check_disk这个插件的用法则可以使用check_disk h

# ./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]

 

输出的资料十分详细给出了这个插件的功能,使用方法,参数意义等,对于每一个插件都是这样.所以当你不懂某个插件怎么使用时就好好读读吧.从上面的输出可以看到check_disk这个插件是用来检查磁盘使用情况的.

我现在来独立执行它,例如查看根分区的使用情况,执行

# ./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就可以看到这个命令的定义,如下:

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 dbpiip地址 -w 3000.0,80% -c 5000.0,100% -p 1

实际上check-host-alive只是这一长串命令的简称而已,而在services.cfg中都是使用简称的.

commands.cfg中定义了很多这样的命令简称.基本上我们常用的监控项目都包含了,例如ftp,http,本地的磁盘,负载等等.

我们再看一个命令,check_local_disk定义如下

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).监控nagiosftp

编辑services.cfg 增加下面的内容,基本上就是copy上节我们定义监控主机存活的代码.

define service{

        host_name               nagios

      //要监控的机器,给出机器名,注意必须是hosts.cfg中定义的

        service_description     check ftp

      //给这个监控项目起个名字吧,任意起,你自己懂就行

        check_command           check_ftp

        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

 

这里只能监控监控服务器的本地信息,需要监控被监控服务器的信息,就需要下面的操作。

 

5.NRPE监控LINUX上的”本地信息”

本节的目的,对系统为linux的主机apcahe进行如下监控:磁盘容量,登陆用户数,http,ftp,mysql的状况,其他功能自己可以自定义配置

 

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

 

所以我们按照图示在监控主机(nagios)和被监控主机上安装相应的软件

 

在被监控主机上

 

1)增加用户

useradd nagios

 

设置密码

# passwd nagios

 

2)安装nagios插件

tar -zxvf nagios-plugins-1.4.9.tar.gz

cd nagios-plugins-1.4.9

编译安装

./configure --enable-redhat-pthread-workaround

make

make install

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

# ls /usr/local/nagios/

libexec  share

 

修改目录权限

# chown nagios.nagios /usr/local/nagios

# chown -R nagios.nagios /usr/local/nagios/libexec

 

3)安装nrpe

解压缩

tar -zxvf nrpe-2.8.1.tar.gz

cd nrpe-2.8.1

编译

./configure

NRPE的端口是5666

make all

接下来安装NPRE插件,daemon和示例配置文件

 

安装check_nrpe这个插件

make install-plugin

之前说过监控机需要安装check_nrpe这个插件,被监控机并不需要,我们在这里安装它是为了测试的目的

 

安装deamon

make install-daemon

 

安装配置文件

make install-daemon-config

 

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

# ls /usr/local/nagios/

bin      etc      libexec  share

NRPE deamon作为xinetd下的一个服务运行的.在这样的情况下xinetd就必须要先安装好,不过一般系统已经默认装了

 

4)安装xinetd脚本

# make install-xinetd

输出如下

/usr/bin/install -c -m 644 sample-config/nrpe.xinetd /etc/xinetd.d/nrpe

 

可以看到创建了这个文件/etc/xinetd.d/nrpe

编辑这个脚本

vi /etc/xinetd.d/nrpe

# default: on

# description: NRPE (Nagios Remote Plugin Executor)

service nrpe

{

        flags           = REUSE

        socket_type     = stream

        port            = 5666

        wait            = no

        user            = nagios

        group           = nagios

        server          = /usr/local/nagios/bin/nrpe

        server_args     = -c /usr/local/nagios/etc/nrpe.cfg --inetd

        log_on_failure  += USERID

        disable         = no

        only_from       = 127.0.0.1在后面增加监控主机的地址192.168.1.240,以空格间隔

}

 

改后

     only_from       = 127.0.0.1 192.168.1.240

 

编辑/etc/services文件,增加NRPE服务

vi /etc/services

 

增加如下

# Local services

nrpe            5666/tcp                        # nrpe

 

重启xinetd服务

# service xinetd restart

 

查看NRPE是否已经启动

# netstat -at|grep nrpe

tcp        0      0 *:nrpe                  *:*                     LISTEN   

# netstat -an|grep 5666

tcp        0      0 0.0.0.0:5666            0.0.0.0:*               LISTEN   

可以看到5666端口已经在监听了

 

5)测试NRPE是否则正常工作

 

之前安装了check_nrpe这个插件用于测试,现在就是用的时候.执行

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

会返回当前NRPE的版本

# /usr/local/nagios/libexec/check_nrpe -H localhost

NRPE v2.8.1

 

也就是在本地用check_nrpe连接nrpe daemon是正常的

 

:为了后面工作的顺利进行,注意本地防火墙要打开5666能让外部的监控机访问

 

/usr/local/nagios/libexec/check_nrpe h查看这个命令的用法

可以看到用法是check_nrpe 被监控的主机 -c要执行的监控命令

注意:-c后面接的监控命令必须是nrpe.cfg文件中定义的.也就是NRPE daemon只运行nrpe.cfg中所定义的命令

 

查看NRPE的监控命令

cd /usr/local/nagios/etc

vi nrpe.cfg

 

# 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)

由于-c后面只能接nrpe.cfg中定义的命令,也就是说现在我们只能用上面定义的这五条命令.我们可以在本机实验一下.执行

/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的监控主机上

 

之前已经将nagios运行起来了,现在要做的事情是:

– 安装check_nrpe插件

– 在commands.cfg中创建check_nrpe的命令定义,因为只有在commands.cfg中定义过的命令才能在services.cfg中使用

 

创建对被监控主机的监控项目

 

安装check_nrpe插件

# tar -zxvf nrpe-2.8.1.tar.gz

# cd nrpe-2.8.1

# ./configure

# make all

# make install-plugin

只运行这一步就行了,因为只需要check_nrpe插件

 

apache刚装好了nrpe,现在我们测试一下监控机使用check_nrpe与被监控机运行的nrpedaemon之间的通信.

 

# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.208

NRPE v2.8.1

 

看到已经正确返回了NRPE的版本信息,说明一切正常.

 

commands.cfg中增加对check_nrpe的定义

vi /usr/local/nagios/etc/commands.cfg

在最后面增加如下内容

########################################################################

#

# 2007.9.5 add by yahoon

# NRPE COMMAND

#

########################################################################

# 'check_nrpe ' command definition

define command{

        command_name check_nrpe

        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$

        }

 

意义如下

command_name check_nrpe

定义命令名称为check_nrpe,services.cfg中要使用这个名称.

 

command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$

这是定义实际运行的插件程序.这个命令行的书写要完全按照check_nrpe这个命令的用法.不知道用法的就用check_nrpeh查看

 

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

 

下面就可以在services.cfg中定义对apache主机磁盘容量的监控

define service{

        host_name              apache

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

        service_description     check-disk

        监控项目的名称

        check_command           check_nrpe!check_disk

        监控命令是check_nrpe,是在commands.cfg中定义的,带的参数是check_disk,是在nrpe.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

        }

像这样将其余几个监控项目加进来.

 

6.Nagios的性能分析图表(此安装在监控机上进行)

Nagios监控的侧重点在此时服务是否正常,是一个瞬时状态。通过对这个状态的监控和告警,管理员可以第一时间对主机或者服务的故障做处理。但是我们往往也非常关心主机的性能以及服务的响应时间等情况,这些情况是一个持续的变化曲线,并非一个实时的值,如果通过查看日志数据来分析的话,既繁琐有抽 象,所以,我们希望Nagios可以帮我们做这份工作,然后将报表提交给我们,这样就非常方便了。这就是今天需要用到的Nagios的相关开源项目—— PNP
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

PNP是一个小巧的开源软件包,它是基于PHPPERL,利用rrdtoolNagios采集的数据绘制成图表。如果你要安装PNP,那么准备工作有如下3项:
1
、整合ApachePHP

2、安装rrdtools 
3
、安装Perl

1)安装php

./configure \

--prefix=/usr/local/php \

--with-mysql=/usr/local/mysql \

--with-apxs2=/usr/local/apache2/bin/apxs \

--with-gd --with-jpeg-dir=/usr/lib --enable-gd-native-ttf \

--with-zlib-dir=/usr/lib --with-png-dir=/usr/lib \

--with-freetype-dir=/usr/include/freetype2 --with-ttf \

--enable-sockets --enable-ftp --enable-mbstring

 

make && make install

 

#httpd配置文件里加入,使apache支持php

AddType application/x-httpd-php .php .phtml

AddType application/x-httpd-php-source .phps

 

#拷贝php配置文件到指定位置

cp php.ini-dist /usr/local/php/lib/php.ini

 

2)安装rrdtools

./configure

make&&make install

 

3) 安装Perl

rm -f config.sh Policy.sh

 sh Configure -de

 make

 make test

 make install

 

要介绍PNP工作原理,首先要说明一下Nagios提供的数据接口,也就是PNP的数据来源。在定义hostservice 中都有一个定义项,名为process_perf_data,其值可以定义为01,其作用是是否启用Nagios的数据输出功能。如果你将此项赋值为 1,那么Nagios就会将收集的数据写入到某个文件中,以备提取。所以,如果你想让Nagios将数据输出的话,首先要将Nagios的主配置文件 nagios.cfg中相关的配置修改:

 

process_performance_data=1
service_perfdata_command=process-service-perfdata  #
默认此句被注释掉了,在这里去掉前面的#

 

如果想要对某个监控对象做数据图表,则需在所对应的host或者service定义中(一般写在hosts.cfg或者services.cfg文件中),包含如下的定义:

 

process_perf_data   1

 

这 样,Nagios就会调用相应的命令来输出数据了。Nagioscommand.cfg定义中默认有一项process-service- perfdata,该命令声明了Nagios输出哪些值到输出的文件中。不过其定义相对简单,PNP提供了一个perl脚本,更详尽的定义了一个输出数 据的方法。如果要使用PNP的话,我们需要在command.cfg的定义中,将“process-service-perfdata”命令对应的执行命令行的内 容替换成该脚本:

 

define command{
command_name process-service-perfdata
command_line /usr/local/nagios/libexec/process_perfdata.pl
}

 

这样设置了之后,Nagios就会利用PNP提供的脚本进行相关的工作了。

刚刚定义命令时用到的脚本“process_perfdata.pl”现在还不存在。我们现在就来安装,也就PNP的软件包安装方法很简单,过程也很顺利

 

./configure --with-rrdtool=/usr/local/rrdtool-1.0.50/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata/
make all
make install

 

安装结束之后,再去检查一下Nagios的插件目录(libexec),就会发现多了一个名为“process_perfdata.pl”的脚本。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

ok,现在执行一下Nagios配置检查命令

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

如果没有什么错误,那么我们重新启动Nagios

/etc/init.d/nagios restart

验收一下成果,在浏览器的地址栏中输入:

http://IP/nagios/pnp/index.php

 

 

基本上nagios的主要功能就有这些,nagios的使用关键在于如何活用那些丰富的插件.nagios可以说是一个对于linux/unix环境支持十分好的程序.

 

之前我说重启nagios的时候都是用的杀进程的方式,其实也可以不这么做.如果在安装nagios的时候安装了启动脚本就可以使用/etc/init.d/nagios restart 还可以带的参数有stop, start,status

如果报错了,有可能是脚本里面的路径设置错误,解决办法

vi /etc/init.d/nagios

prefix=/usr/local/nagiosaa改为安装的目录/etc/init.d/nagios

 

:nagios安装的时候说是将脚本安装到了/etc/rc.d/init.d,其实这和/etc/init.d是一个目录



本文转自wiliiwin 51CTO博客,原文链接:http://blog.51cto.com/wiliiwin/199222

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章