如何扩展Nagios,以实现自定义监控?
作者:网络转载 发布时间:[ 2013/1/22 10:42:02 ] 推荐标签:
这应当相当清楚。变量$ARG1$代表传递给Nagios命令的第一个实参;在本例中,这第一个实参应该是文件名称。如果你想传递更多的实参,可以将$ARG2$用作第二个实参,将$ARG3$用作第三个实参,以此类推。
想开始使用你的插件,应在你的nagios配置文件(比如service.cfg)中将其定义成一项服务:
define service{
use local-service
host_name localhost
service_description Check the file /etc/passwd
check_command check_file!/etc/passwd
}
上述服务是为本地主机(host_name localhost)定义的,为本地服务使用模板(使用local-service),详见文明文档的对象继承部分(http://nagios.sourceforge.net/docs/3_0/objectinheritance.html),即可了解模板及模板的工作原理。重要的部分是check_command指令。它指定了命令check_file,然后是作为分隔符的感叹号,后面是作为实参的文件名称。如果你的插件有不止一个实参,可以用另外的感叹号来分隔。
远程运行Nagios插件
示例check_file plugin存在的一个明显缺点是它本地运行,这意味着无法检查远程服务器上的文件。你有许多办法可以解决这个问题。
第一个办法是使用ssh命令,远程执行代码。这需要你把脚本拷贝到远程服务器上,并利用ssh可以运行远程命令的功能。这还需要你为Nagios服务器及其nagios用户配置无密码密钥登录。如果这方面你不太确信如何操作,可以参阅本文http://www.techrepublic.com/blog/opensource/remotely-monitor-servers-with-the-nagios-checkbyssh-plugin/321,了解所有的相关细节。
这第一个办法的优点是,你拥有了针对被监控的服务器,本地运行命令所具有的功能和灵活性。缺点是,Nagios服务器必须能够借助密钥,无密码登录到远程服务器。这是个安全问题,不推荐敏感环境使用。
第二个比较安全的办法是,使用SNMP扩展功能。这要求你已在远程服务器上安装和配置好了net-snmp程序包(面向CentOS)。
想使用SNMP扩展命令,先将check_file.sh脚本拷贝到远程服务器上。比如说,你可以把该脚本放在目录/usr/bin/中。
接下来,将配置指令extend check_passwd_file /usr/bin/check_file.sh /etc/passwd添加到远程服务器上的文件/etc/snmp/snmpd.conf。语法是extend some_alias command argument。下面是这种方法存在的主要不便之处:你得为每一次独立的检查定义一个别名,在本例中这意味着为我们想要测试的每一个独立文件定义一个别名,因为无法通过SNMP来传送实参。
文件/etc/snmp/snmpd.conf只要出现变化,都需要你用service snmpd reload命令(面向CentOS),重新装入snmpd服务。之后,你可以用snmpget命令来测试新的检查,跟在snmpget -v2c -c public -OvQ 10.0.0.2 NET-SNMP-EXTEND-MIB::nsExtendOutputFull."check_passwd_file"中一样。这个示例snmpget命令通过SNMP版本2c,以"public"共用字符串查询服务器10.0.0.2。自定义SNMP扩展命令的对象标识符(OID)是NET-SNMP-EXTEND-MIB::nsExtendOutputFull."some_alias"。
遗憾的是,上面这个命令无法直接用Nagios来实现。如果snmpget正常工作,可以连接至远程主机,它总是会返回状态0,这表明每方面都正常,因为程序snmpget本身退出时没有错误。因而,即使某个文件不存在,检查脚本也会返回状态0,不过它会输出文件不存在的正确消息。
你可以解决这个问题,只要充分利用针对Nagios的名为check_snmp_extend.sh的特殊插件。这个插件取得状态消息的第一个单词后,根据该单词来设定状态。由于预计使用这个插件,我们在示例脚本check_file.sh中设定了消息,以便从OK(正常)、CRITICAL(临界)、WARNING(警告)和UNKNOWN(未知)开始。
想开始使用check_snmp_extend.sh插件,先下载该插件(http://www.logix.cz/michal/devel/nagios/check_snmp_extend.sh),然后把它放到Nagios服务器上的目录/usr/lib/nagios/plugins($USER1宏命令)。在CentOS上,你得编辑脚本check_snmp_extend.sh,并把/usr/local/nagios/libexec/utils.sh换成/usr/lib/nagios/plugins/utils.sh,这是utils.sh脚本的正确路径。
之后,你可以像使用其他任何插件那样使用check_snmp_extend.sh。首先,把它定义为一个命令:
define command{
command_name check_snmp_extend
command_line $USER1$/check_snmp_extend.sh $HOSTADDRESS$ $ARG1$
}
之后,定义一项服务:
define service{
use generic-service
host_name somehost.example.org
service_description Check For /etc/passwd
check_command check_snmp_extend!check_passwd_file
}
使用SNMP的扩展选项跟你的SNMP配置一样安全。这个办法只需要在远程主机上进行极少的改动,又确保了标准的设置环境符合安全方面的佳实践。你可以找到用于类似用途的其他Nagios插件,比如nrpe,但是它们要求远程安装额外服务,从安全和兼容性的角度来看这并非总是一个好主意。
如你所见,很容易用自行编写的插件来扩展Nagios。Nagios允许这种扩展,这一点正是许多管理员青睐它、而不是青睐其他监控解决方案的原因之一。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11