有多种方法实现Nagios对Linux主机的监控
法一、通过ssh,执行远程主机上的可执行插件。可用的有check_by_ssh插件。其缺点是可能导致发起监控的设备的高负载压力,因为建立和销毁SSH链接需要成本。
这里介绍方法二,使用NRPE插件,来远程Linux/Unix主机上执行可执行插件。与方法一相比,开销较小。
NRPE插件在需要查看远程Linux本地资源时非常有用,因为远程主机的本地资源通常在外部是看不到的,NRPE这样的代理程序需要安装到远程主机以便收集相关信息。
结构如下图所示:
Image may be NSFW.
Clik here to view.
一、基本原理
NRPE插件包括两部分:
1.check_nrpe,位于监控端
2.NRPE服务,位于被监控端。
所以,监控某项远程主机的服务,需要有如下步骤:
- Nagios运行check_nrpe,告知要检查什么项;
- check_nrpe通过SSL保护的联接与远程的NRPE服务进行交互;
- NRPE服务运行相应的插件来检查指定的项;
- NRPE服务将检查结果返回check_nrpe,最终告知Nagios。
注:NRPE服务正常运行要求Nagios 插件安装在Linux/Unix主机上。
二、操作
下载:
http://nchc.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.14/nrpe-2.14.tar.gz
http://nchc.dl.sourceforge.net/project/nagiosplug/nagiosplug/1.4.16/nagios-plugins-1.4.16.tar.gz
以M(Monitor Host)监控R(Remote)为例。M的ip为192.168.2.26,R的ip为192.168.2.18。
在R上进行如下操作:
1.添加用户
shell>groupadd nagios
shell>useradd -g nagios -d /usr/local/nagios -s /sbin/nologin nagios
2.安装plugin
shell>tar -xzvf nagios-plugins-1.4.16.tar.gz
shell>cd nagios-plugins-1.4.16
shell>./configure
shell>make
shell>make install
shell>chown nagios.nagios /usr/local/nagios
shell>chown -R nagios.nagios /usr/local/nagios/libexec
3.安装NRPE的后台服务
shell>tar -xzvf nrpe-2.14.tar.gz
shell>cd nrpe-2.14
shell>./configure –prefix=/usr/local/nagios –enable-ssl #如果期望接收监控主机传给本地命令的参数,参考本篇文章最后的“其他”
shell>make all
shell>make install-plugin #用于测试
shell>make install-daemon #安装后台程序
shell>make install-daemon-config #后台程序的示例配置文件
shell>make install-xinetd #将此后台程序作为xinetd下的服务
shell>vi /etc/xinetd.d/nrpe
…
only_form = 127.0.0.1 192.168.2.26 ##添加M主机的ip地址
…
shell>vi /etc/services #在最后加上如下内容
…
nrpe 5666/tcp #NRPE
shell>service xinetd restart #重启xinetd服务
4.测试NRPE后台程序
shell>netstat -at | grep nrpe
tcp 0 0 *:nrpe *:* LISTEN #出现这个,说明已经成功配置和启动
shell>/usr/local/nagios/libexec/check_nrpe -H localhost #进行本机的测试
NRPE v2.14 #说明能够正常提供服务
另外,需要确保防火墙上开通端口5666的访问。
5.NRPE命令定义
通过修改/usr/local/nagios/etc/nrpe.cfg,我们可以定义NRPE能够支持的命令。
命令定义如:
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
这样我们可以通过-c check_users来执行对应的程序。测试如下:
shell>/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users
USERS OK – 2 users currently logged in |users=2;5;10;0
ps:
以上步骤可能需要在多台需要监控的Linux上反复操作,为简便起见,鉴于多台Linux版本、架构一致,直接拷贝二进制文件会更加迅速实现批量处理。
shell>cp /etc/xinetd.d/nrpe /usr/local/nagios/etc #这步将后台脚本并入二进制包
shell>cd /usr/local/
shell>tar -zcvf nagios_nrpe.tar.gz nagios #这步就将需要安装的NRPE程序和Plugin程序以及配置文件nrpe.cfg进行了打包,保存在nagios_nrpe.tar.gz
在其他Linux主机部署时,只要将nagios_nrpe.tar.gz拷贝至该主机,执行下面命令即可。
shell>groupadd nagios
shell>useradd -g nagios -d /usr/local/nagios -s /sbin/nologin nagios
shell>cd /usr/local
shell>tar -zxvf nagios_nrpe.tar.gz
shell>cd nagios
shell>mv etc/nrpe /etc/xinetd.d/
shell>vi /etc/services
…
nrpe 5666/tcp #NRPE
shell>service xinetd restart
确保防火墙上开通端口5666的访问
这种直接拷贝的方式,可能出现共享库不一致的问题,例如在较高版本Linux上出现类似问题:
/usr/local/nagios/libexec/check_nrpe: error while loading shared libraries: libssl.so.6: cannot open shared object file: No such file or directory
/usr/local/nagios/libexec/check_nrpe: error while loading shared libraries: libcrypto.so.6: cannot open shared object file: No such file or directory
一种简单的处理方式是创建软连接,映射到相应的当前使用中的共享库。如:
shell> cd /usr/lib64/
shell> ln -s libssl.so.1.0.0 libssl.so.6
shell> ln -s libcrypto.so.1.0.0 libcrypto.so.6
*******************************************************************************************************
在M上进行如下操作:
1.安装NRPE的check_nrpe
shell>tar -xzvf nrpe-2.14.tar.gz
shell>cd nrpe-2.14
shell>./configure –prefix=/usr/local/nagios
shell>make all
shell>make install-plugin
2.测试与R的交互
shell>/usr/local/nagios/libexec/check_nrpe -H 192.168.2.18 -c check_users
USERS OK – 2 users currently logged in |users=2;5;10;0
3.创建nagios命令,来调用check_nrpe
shell>vi /usr/local/nagios/etc/commands.cfg #添加如下命令
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
4.这样,就可以像使用正常命令一样使用check_nrpe命令了。
一个例子如下:
1)定义主机R
define host{
use linux-server
host_name R
alias R
address 192.168.2.18
}
2)定义服务Current Users
define service{
use generic-service
host_name R
service_description Current Users
check_command check_nrpe!check_users
}
Done。
其他
以上方式配置下,如果在nrpe中定义命令如:
command[check_users]=/usr/local/nagios/libexec/check_users -w $ARG1$ -c $ARG2$
即接受监控主机传给来的参数。在监控主机上执行
/usr/local/nagios/libexec/check_nrpe -H 192.168.2.18 -c check_users -a 5 10
时,会报错:
CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.
这个特性是根据编译的参数决定的。
如果要使远程主机的命令可以接收监控主机传给远程主机的命令的参数,则要在R的安装过程中有两处修改:
1)编译参数修改
shell>./configure –prefix=/usr/local/nagios –enable-command-args #enable-command-args是为了使可以接受远程命令参数。
2)配置文件修改
shell>vi /usr/local/nagios/etc/nrpe.cfg
dont_blame_nrpe=1
3)参数传递的时,使用-a指定。
shell>/usr/local/nagios/libexec/check_nrpe -H 192.168.1.2 -c comm_name -a arg1 arg2
带参数形式,便于在监控端做调整。但是有一定的安全风险!但是,没办法,你要启用的,don’t blame nrpe!
一个典型的启用参数传递后安全风险的例子:
远程主机的nrpe上有如下配置:
command[check_disk]=/usr/local/nagios/libexec/chec_disk -p $ARG1$
监控主机上被恶意份子传递了这个参数“/usr && rm -rf /”,传递到远程主机后,执行的命令变成了
/usr/local/nagios/libexec/chec_disk -p /usr && rm -rf / 如果权限允许的话,可能会删除远程主机上所有的文件!
所以小心使用参数传递功能。
如果出现问题如:
NRPE: Unable to read output
则需要检查权限或者配置问题。
问题
1.在某台Linux服务器上如上进行搭建时,总是报错“CHECK_NRPE: Error – Could not complete SSL handshake.”,在日志中找到如下内容:
Aug 10 09:11:40 CH146 xinetd[10479]: START: nrpe pid=19510 from=::ffff:192.168.11.142
Aug 10 09:11:40 CH146 kernel: nrpe[19510]: segfault at 39bfcc16a0 ip 00000039bfca9354 sp 00007fff498645c0 error 7 in libcrypto.so.1.0.0[39bfc00000+173000]
Aug 10 09:11:40 CH146 abrt[19512]: saved core dump of pid 19510 (/usr/local/nagios/bin/nrpe) to /var/spool/abrt/ccpp-2013-08-10-09:11:40-19510.new/coredump (925696 bytes)
Aug 10 09:11:40 CH146 abrtd: Directory 'ccpp-2013-08-10-09:11:40-19510' creation detected
Aug 10 09:11:40 CH146 xinetd[10479]: EXIT: nrpe signal=11 pid=19510 duration=0(sec)
google一番,找到这篇文章,似乎是这个Linux主机端的ssl有一些问题。
shell> rpm -qa | grep openssl
openssl-devel-1.0.0-20.el6.x86_64
openssl-1.0.0-20.el6.x86_64
openssl098e-0.9.8e-17.el6.x86_64
根据文章的介绍,移除openssl098e-0.9.8e-17.el6.x86_64即可,可能是多个ssl相关库错乱导致的问题。
实践之。
shell>rpm -e openssl098e-0.9.8e-17.el6.x86_64
shell>/usr/local/nagios/libexec/check_nrpe -H 192.168.2.146
NRPE v2.14
这样就恢复正常了。
参考:
http://www.thegeekstuff.com/2010/12/enable-nrpe-command-arguments/
The post Nagios监控Linux主机 appeared first on SQLParty.