如何扩展Nagios以进行自定义监视

强大的Nagios的网络监控平台,可以让你可用的插件主机增压它的能力。如果你不能找到一个插件,你需要的东西,你可以很容易地编写自己的 - 这里的如何。

Nagios的插件可以写成支持了正在运行的Nagios平台上的任何编程语言。巴什是编写Nagios插件的流行选择,因为它既强大又简单。

从插件每个有效的Nagios的检查有可能产生一个数字退出状态。可能的状态是:

  • 0 - 一切正常,并检查顺利完成。
  • 1 - 资源处于警告状态。事情是不完全正确。
  • 2 -资源处于临界状态。主机可能已停机或服务未运行。
  • 3 -未知状态,这并不一定表明存在问题,而是表明支票不能给出明确、明确的状态。

插件还可以打印文本消息。默认情况下,显示在Nagios的网络界面,并在Nagios的电子邮件警报此消息。即使消息是不是一个要求,你通常可以通过插件找到他们,因为他们告诉用户什么是错的,而不强迫他们谘询文件。

用Bash编写的一个简单的Nagios插件如下所示。这个例子插件检查指定的文件:

#!/斌/庆典#assign的第一个参数($ 1)作为文件名的文件名=文件是否存在$ 1个#first检查。这是你应该开始,如果[第一,最基本的检查!-e $文件名]。然后回声 - 因为你的最糟糕的情况是,该文件根本不存在#如果前面的条件通行证(文件存在),那么下一次的检验“CRITICAL状态文件$ filename不存在”退出2个#returns临界状态,如果它是可读ELIF [!-r $文件名]。然后回声“警告状态 - 文件$ filename是无法读取。”1个出口#returns警告状态,因为这种状态是不是具有所有#如果前面的条件传球没有文件好,检查它是否是一个普通的文件,而不是一个目录或设备文件的elif [!-f $文件名]。然后回声“UNKNOWN状态 - 文件$ filename是不是文件。” exit 3 #returns unknown status #if all of the above checks pass then it's ok else echo "OK status - file is OK" exit 0 #Return OK status fi

评论(其与在#击启动)解释代码;如果你需要更多的澄清或想了解更多关于bash的文件测试操作符,检查的文档

尽管这个示例很简单,但它很好地说明了如何实现Nagios插件逻辑。总是从最坏的可能情况开始。只有当所有检查都通过时,脚本才会以OK状态退出。确保在退出之前指定澄清消息。

使用插件

默认情况下,所有Nagios插件都存储在$USER1宏中定义的目录中,该宏在/etc/nagios/private/resource.cfg文件中定义。在一个典型的Nagios安装中EPEL存储库的, $USER1被定义为/usr/lib/nagios/plugin .你应该做的第一件事就是将你的插件复制到$USER1宏中定义的目录中。通常插件属于root用户,权限为755;Nagios在用户Nagios下工作,该用户属于Nagios组,因此脚本需要其他组的读取和执行权限。

一旦你将脚本可在/ usr / lib中/的nagios / plugins目录,你必须把它定义为文件/etc/nagios/objects/commands.cfg内的Nagios的命令。比方说,你命名你的脚本check_file.sh;添加下面的命令定义:

#我们的自定义文件检查命令定义命令{COMMAND_NAME check_file COMMAND_LINE $ USER1 $ / check_file.sh $ ARG1 $}

这应该是很清楚。变量$ ARG1 $代表传递给Nagios的命令,这在我们的情况下,应该是文件名的第一个参数。如果你想通过更多的参数,使用$ ARG2 $的第二个参数,$ ARG3 $第三,依此类推。

要开始使用你的插件,将其定义为在Nagios配置(services.cfg例如)服务:

定义服务{使用本地服务HOST_NAME本地主机SERVICE_DESCRIPTION检查文件/ etc / passwd文件check_command check_file!/ etc / passwd文件}

上述服务是为本地主机定义(host_name localhost),并使用模板(见在继承对象的文档用于模板及其工作方式)和本地服务(使用本地服务)。最重要的部分是check_command指示。它指定命令check_file,接着感叹号作为隔板,接着是文件名作为参数。如果你的插件有一个以上的参数可以用额外的惊叹号它们分开。

运行的Nagios远程插件

示例check_file插件的一个明显缺陷是它在本地工作,这意味着您不能检查远程服务器上的文件。您可以通过多种方式来解决这个问题。

第一种方法是使用ssh命令远程执行脚本。这需要您将脚本复制到远程服务器,并使用ssh运行远程命令的能力。它还要求您为Nagios服务器及其Nagios用户设置无密码密钥登录。如果你不知道怎么做,检查一下这篇文章对所有细节。

第一种方法的好处是,您可以在本地为受监视的服务器运行命令。缺点是Nagios服务器必须能够使用远程服务器的密钥进行无密码登录。这是一个安全问题,不建议在敏感环境中使用。

第二个和更安全的方法是使用SNMP扩展功能。这需要你有- snmp软件包(用于CentOS)安装并配置在远程服务器上。

要使用SNMP扩展命令,首先check_file.sh脚本复制到远程服务器。/,你可以将它放在目录/ usr / bin中的例子。

接下来,添加配置指令扩展check_passwd_file /usr/bin/check_file.sh /etc/passwd到远程服务器上的/etc/snmp/snmp .conf文件。语法扩展some_alias命令参数。这个方法的主要不便之处在于——您必须为每个单独的检查定义一个别名,在我们的例子中,这意味着我们要测试的每个单独文件的别名,因为您不能通过SNMP发送参数。

在文件中要求/etc/snmp/snmpd.conf中你所做的任何更改重新加载与命令snmpd服务服务snmpd重载(为CentOS)。在此之后,你可以测试与新的检查SNMPGET命令,如SNMPGET -v2c -c公共-OvQ 10.0.0.2 NET-SNMP-EXTEND-MIB :: nsExtendOutputFull。\ “check_passwd_file \”。这个示例snmpget命令使用“public”社区字符串在SNMP版本2c上查询服务器10.0.0.2。自定义SNMP扩展命令的对象标识符(OID)是NET-SNMP-EXTEND-MIB :: nsExtendOutputFull。\ “ some_alias \”

不幸的是,上面的命令不能在Nagios中直接实现。如果snmpget工作正常,可以连接到远程主机,它将总是返回状态0,表明一切正常,因为程序snmpget本身退出没有错误。因此,即使文件不存在,check脚本也会返回状态0,尽管它会打印文件不存在的正确消息。

您可以通过采取Nagios的一个特殊的插件叫做优势解决这个问题check_snmp_extend.sh。这个插件从一个状态消息采用的第一个字并且根据它的状态。这是在使用这个插件,我们建立在我们的示例脚本check_file.sh消息下手OK,严重,警告和未知的期待。

要开始使用check_snmp_extend.sh插件,第一下载它,然后将其放置在目录/ usr / lib中/的nagios /插件($ USER1宏)Nagios监控服务器上。在CentOS你必须编辑脚本check_snmp_extend.sh和替换/usr/local/nagios/libexec/utils.sh/usr/lib/nagios/plugins/utils.sh,这对于utils.sh脚本的正确路径。

在此之后,你可以使用check_snmp_extend.sh就像任何其他插件。首先,将其定义为一个命令:

定义命令{command_name check_snmp_extend command_line $USER1$/ check_snmp_extension .sh $HOSTADDRESS$ $ARG1$}

此后定义一个服务:

定义服务{使用通用服务HOST_NAME somehost.example.org SERVICE_DESCRIPTION检查/ etc / passwd文件check_command check_snmp_extend!check_passwd_file}

使用SNMP的扩展选项是安全的,因为你的SNMP配置。这种方法需要在远程主机上稍加修改,并确保标准的设置符合最佳安全实践。你可以找到其他的Nagios插件类似用途,如nrpe,但是它们需要远程安装附加服务,从安全性和兼容性的角度来看,这并不总是一个好主意。

正如你所看到的,它很容易与Nagios的定制编写的插件扩展。这Nagios的允许这种扩展的事实的原因,许多管理员喜欢它比其他监控解决方案之一。

加入网络世界社区有个足球雷竞技app脸谱网LinkedIn对最重要的话题发表评论。

版权所有©2013Raybet2

工资调查:结果是