运维监控系统 - nagios远程执行脚本,快速实现二次开发
简介
在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 使用参数作为命令存在的一定的风险,但是处理好权限问题,就可以保证安全。
可以直接参数可以给二次开发提供了很大的便利。
- 原文作者:Linux运维菜
- 原文链接:https://www.opcai.top/post/2020/2020-05/nagios_nrpe/
- 版权声明:本作品采用进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。