7. nagios插件开发
7.1 什么是插件?
在前文部署nagios服务是安装了nagios-plugins ,这个软件包就是nagios的插件包
ll /usr/local/nagios/libexec/ | wc -l 大概有六十多个插件
7.2 编写nagios插件规则
7.2.1 编写nagios插件说明
Nagios插件是Nagios提供额一种通过可扩展的方式部署的程序组件,该插件可通过Java,C/C++,php等多种语言开发,操作员通过修改配置文件和相应参数,就能很方便地将该插件集成到Nagios中,实现对目标系统的监控。
Nagios插件提供两个返回值:一个是插件的退出状态码,另一个是插件在控制台打印的第一行数据
Nagios相关状态:
cd /usr/local/nagios/libexec
vim utils.sh 查看
7.3 Nagios 插件开发语言
nagios的插件开发不限制任何开发语言,只要该插件能被nagios调用获取到相应服务护具就OK,如能在命令行执行输出结果也可以,常见的插件语言有shell,perl,python,php
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
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服务
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
}
3)在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_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服务
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服务
|