7. nagios插件开发

7.1 什么是插件?

在前文部署nagios服务是安装了nagios-plugins ,这个软件包就是nagios的插件包

ll /usr/local/nagios/libexec/ | wc -l 大概有六十多个插件

7.2 编写nagios插件规则

7.2.1 编写nagios插件说明

Nagios插件是Nagios提供额一种通过可扩展的方式部署的程序组件,该插件可通过JavaC/C++php等多种语言开发,操作员通过修改配置文件和相应参数,就能很方便地将该插件集成到Nagios中,实现对目标系统的监控。

Nagios插件提供两个返回值:一个是插件的退出状态码,另一个是插件在控制台打印的第一行数据

Nagios相关状态:

cd /usr/local/nagios/libexec

vim utils.sh 查看

7.3 Nagios 插件开发语言

nagios的插件开发不限制任何开发语言,只要该插件能被nagios调用获取到相应服务护具就OK,如能在命令行执行输出结果也可以,常见的插件语言有shellperlpythonphp

7.4 使用shell开发nagios插件

7.4.1 编写检查weburl地址的插件

1)编写nagios插件前的几个变量测试

a. 测试变量的脚本

vim test.sh

echo $0

PROGNAME=`basename $0`

PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`

echo $PROGNAME

echo $PROGPATH

2)开发监控url的插件

vim check_url.sh

#!/bin/bash

PROGNAME=`basename $0`

PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`

. /usr/local/nagios/libexec/utils.sh

 

 

print_usage() {

    echo "Usage:"

    echo "/bin/sh $PROGNAME url"

    echo -n "For example:"

    echo "/bin/sh $PROGNAME http//www.yan.com"

    exit 1

}

 

if [ $# -ne 1 ];then

    print_usage

fi

 

if wget -T 20 --spider $1 >/dev/null 2>&1 ;then

        echo 'HTTP/1.1 OK'

        exit $STATE_OK

 

else

        echo 'HTTP/1.1 NO'

        exit $STATE_CRITICA

fi

chmod 755 check_url.sh

/usr/local/nagios/libexec/check_url.sh www.baidu.com

7.4.2 weburl插件脚本部署过程(主动监控方式)

7.4.2.1 上传监控脚本到指定目录并设置执行授权可执行权限

cd /usr/local/nagios/libexec/     上传到这个位置

chmod 755 check_url.sh

   2)手动测试简本执行结果

/usr/local/nagios/libexec/check_url.sh http://192.168.1.80

HTTP/1.1 OK

7.4.2.2 修改nagios服务端的配置文件

1)编辑commands.cfg

vim commands.cfg

#'check_url' command definition

define command {

        command_name    check_url

        command_line    $USER1$/check_url.sh www.baidu.com

        }

2)编辑service.cfg

vim service.cfg

define service {

        use                     generic-service

        host_name               81-lamp-1

        service_description     blog_url-001

        check_command           check_url

        max_check_attempts      3

        normal_check_interval   2

        retry_check_interval    1

        check_period            24x7

        notification_interval   30

        notification_period     24x7

        notification_options    w,u,c,r

        contact_groups          admins

        process_perf_data       1

        action_url              /nagios/php/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$

}

3)语法检查

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

4)重新加载

/etc/init.d/nagios reload

Nagios监控笔记下_自己 

7.4.3 编写检查mysql服务的插件

7.4.3.1 使用check_mysql插件被动方式监控MySQL服务的过程

一、nagios客户端进行操作(被监控的mysql服务器)  81

 

1. 调试check_mysql插件

1.1 进入被监控的mysql服务器,登陆到mysql中,建立测试账号,供测试使用

mysql -uroot -predhat

grant select on test.* to nagios@'localhost' identified by 'redhat';                      cd /usr/local/nagios/libexec/

./check_mysql -unagios -predhat

./check_mysql: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

解决办法:ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18

/usr/local/nagios/libexec/check_mysql -unagios -predhat

Uptime: 95558  Threads: 1  Questions: 36...........

1.2 修改nrpe.cfg增加一条记录

vim /usr/local/nagios/etc/nrpe.cfg

command[check_mysql]=/usr/local/nagios/libexec/check_mysql -unagios -predhat

1.3 重启nrpe

pkill nrpe

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

ps -ef | grep nrpe

 

二、服务端的配置(nagios-service

2.1 cd /usr/local/nagios/etc/

vim nagios.cfg(里面添加了一条cfg_dir,在service目录下的都能够被加载)

2.2 nagios的配置文件中加入如下配置

cd/usr/local/nagios/etc/objects/services

vim check_mysql.cfg

define service {

        use                     generic-service

        host_name               81-lamp-1

        service_description     check_mysql_beidong

        check_command           check_nrpe!check_mysql

        max_check_attempts      3

        normal_check_interval   2

        retry_check_interval    1

        check_period            24x7

        notification_interval   30

        notification_period     24x7

        notification_options    w,u,c,r

        contact_groups          admins

        process_perf_data       1

}

 

2.3 检查语法,重新加载nagios服务

Nagios监控笔记下_开发_02 

2.4 被动监控方式遇到问题判断及检查办法

1)首先在客户端检查

/usr/local/nagios/libexec/check_mysql -unagios -predhat

如果没有问题,即可以正常获得数据,然后在nagios服务器端通过check_nrpe检查

/usr/local/nagios/libexec/check_nrpe -H 192.168.1.81 -c check_mysql

如果没有结构,那就是服务端的配置文件有问题

 

7.4.3.2 使用check_mysql 插件主动方式监控MySQL服务的配置过程

(提示:因为是主动方式监控,因此以下完全是在nagios服务器端操作)

首先在mysql服务器上授权一个用户:

grant select on test.* to nagios@'192.168.1.%' identified by 'redhat';

1)原理:

/usr/local/nagios/libexec/check_mysql -unagios -predhat -H 192.168.1.81

2)编辑commands.cfg

vim commands.cfg

define command {

        command_name    check_mysql_zhudong

        command_line    $USER1$/check_mysql -unagios -predhat -H 192.168.1.81

        }

3nagios的配置文件中加入如下配置

cd/usr/local/nagios/etc/objects/services

vim check_mysql.cfg  (添加)

define service {

        use                     generic-service

        host_name               81-lamp-1

        service_description     check_mysql_zhudong

        check_command           check_mysql_zhudong

        max_check_attempts      3

        normal_check_interval   2

        retry_check_interval    1

        check_period            24x7

        notification_interval   30

        notification_period     24x7

        notification_options    w,u,c,r

        contact_groups          admins

        process_perf_data       1

}

4)检查语法,重新加载nagios服务

Nagios监控笔记下_自己_03 

7.5 手工开发脚本监控mysql服务的配置方法

7.5.1 手工开发脚本监控mysql服务

vim check_mysql.sh

#!/bin/bash

PROGNAME=`basename $0`

PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`

. /usr/local/nagios/libexec/utils.sh

 

 

print_usage() {

    echo "Usage:"

    echo "/bin/sh $PROGNAME ip"

    echo -n "For example:"

    echo "/bin/sh $PROGNAME 192.168.1.81"

    exit 1

}

 

if [ $# -ne 1 ];then

    print_usage

fi

 

if mysql -unagios -predhat -h $1 -e "select version();" >/dev/null 2>&1 ;then

        echo 'Mysql service is OK'

        exit $STATE_OK

 

else

        echo 'Mysql service is NO'

        exit $STATE_CRITICA

fi

7.5.2被动方式:

1)将脚本上传到客户端(81主机)/usr/local/nagios/libexec

2修改nrpe.cfg增加一条记录

vim /usr/local/nagios/etc/nrpe.cfg

command[check_mysql_shoudong_beidong]=/usr/local/nagios/libexec/check_mysql.sh 192.168.1.81

3重启nrpe

pkill nrpe

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

ps -ef | grep nrpe

4)切到nagios服务端(80主机)

vim services/check_mysql.cfg

define service {

        use                     generic-service

        host_name               81-lamp-1

        service_description     check_mysql_shoudong_beidong

        check_command           check_nrpe!check_mysql_shoudong_beidong

        max_check_attempts      3

        normal_check_interval   2

        retry_check_interval    1

        check_period            24x7

        notification_interval   30

        notification_period     24x7

        notification_options    w,u,c,r

        contact_groups          admins

        process_perf_data       1

}

5检查语法,重新加载nagios服务