简介

在nagios监控中,需要执行远程脚本来获取对应的监控信息。

什么是NRPE

NRPE是Nagios Remote Plugin Executor的简称,它是nagios的一个扩展工具,用在被监控主机上。

通过它可以向nagios监控服务器提供该主机的一些本地信息。例如:cpu负载、内存使用情况、磁盘容量、登陆用户数、总进程数、僵尸进程数、swap分区使用情况等等。

C/S模式

NRPE采用c/s模式,被监控的机子上需要安装并启动NRPE服务。

服务端通过调用 check_nrpe 命令,请求NRPE监听端口,然后nrpe再调用对应的命令或者脚本,返回结构给服务端。

NRPE安装

在epel-release包里面,就有提供完整的nagios安装,可以使用yum直接安装,也可以根据官方文档进行一步步编译安装。

编译安装

yum -y install gcc make openssl-devel
tar zxvf nrpe-4.0.2.tar.gz
cd nrpe-4.0.2
./configure  --enable-command-args  && make all && make install-plugin && make install-daemon && make install-daemon-config
\cp init-script   /etc/init.d/nrpe
chown root.root /etc/init.d/nrpe
chmod u+x   /etc/init.d/nrpe

服务端如果不用作为监控客户端,就不用启用nrpe服务,只要可以调用check_nrpe命令即可。

配置NRPE

如果是自己编译的,默认安装路径是在/usr/local/nagios/etc/nrpe.conf 这里。

yum安装的,在/etc/nagios/nrpe.conf

log_facility=daemon
pid_file=/var/run/nrpe.pid
server_port=5666
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=127.0.0.1,192.168.100.100
allow_bash_command_substitution=0
debug=0
command_timeout=60
connection_timeout=300
command[check_cpu_load]=/usr/local/nagios/libexec/check_cpu_load -w 10;10;10  -c 20;20;29
command[check_cpu_usage]=/usr/local/nagios/libexec/check_cpu_usage -w 80%  -c 90%
command[check_cpu_mem]=/usr/local/nagios/libexec/check_mem -w 80%  -c 90%
command[check_disk_root]=/usr/local/nagios/libexec/check_disk -w 80%  -c 90% /

allowed_hosts 是配置信任主机,注意这个的设置,提升安全性。

nrpe_user、nrpe_group 执行用户也要进行限制,使用普通不能登录的用户进行执行即可;注意调用命令的权限,这个用户需要有权限执行,才能正常监控。

nagios配置nrpe命令

etc/object/command.conf里面定义一下调用命令

define	command{
	command_name	check_cpu_load
	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -c "check_cpu_load"
}

后面一个check_cpu_load就是对应的远程NRPE监听的配置里面的check_cpu_load的命令

缺点

修改监控阀值或者命令等配置的时候,需要连接到客户端进行修改,然后再重启服务。比较繁琐。

万能命令

这个脚本,需要NRPE编译的时候,添加–enable-command-args 这个编译选项来支持参数的传入,nrpe配置的时候需要添加 dont_blame_nrpe=1 的参数。

#!/bin/bash

eval $*

result=$?

exit $result 

这个脚本会根据传入的参数进行执行,比如要执行:/usr/local/nagios/libexec/check_cpu.py

客户端配置:

command[check_server]=/usr/local/nagios/libexec/check_server.sh $ARG1$

服务端定义命令:

define	command{
	command_name	check_server
	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -c "check_server!$ARG1$"
}

配置例子:配置一个CPU Load监控的例子

define service{
        use        linnux-service
        host_name        192.168.100.45
        service_description        CPU_Load
        check_command        check_server!/usr/local/nagios/libexec/check_load -w 2,2,2 -c 10,8,8
        contact_groups        system
}

这样子所有的参数阀值都是通过服务端配置,客户端就不需要修改什么了,可以实现快速修改配置。

脚本下发

有了万能命令,我们就可以根据这个脚本直接下载web服务下的脚本,下面是一个下发脚本

#!/bin/bash
/usr/local/nagios/libexec/check_nrpe  -H $1 -c "check_server! rm -fv /usr/local/nagios/libexec/$2"
/usr/local/nagios/libexec/check_nrpe  -H $1 -c "check_server! wget -c -P  /usr/local/nagios/libexec/ http://192.168.100.100/nagios_online/sh/$2"
/usr/local/nagios/libexec/check_nrpe  -H $1 -c "check_server! chmod +x /usr/local/nagios/libexec/$2"

第一个参数是主机地址,第二个地址是脚本名称,http地址就是你脚本所在的web地址

注意:安全一点可以增加https和base auth进行验证。

注意:以上的/usr/local/nagios 路径是我这边编译安装的路径,可以根据你的实际路径进行修改。

总结

nagios 使用参数作为命令存在的一定的风险,但是处理好权限问题,就可以保证安全。

可以直接参数可以给二次开发提供了很大的便利。