强大的Nagios的网络监控平台,可以让你可用的插件主机增压的能力。如果你不能找到一个插件,你需要的东西,你可以很容易地编写自己的 - 这里的如何。
Nagios的插件可以写成支持了正在运行的Nagios平台上的任何编程语言。巴什对于编写Nagios的插件,因为它是既强大又简单的热门选择。
从插件每个有效的Nagios的检查有可能产生一个数字退出状态。可能的状态是:
- 0 - 一切正常,并检查顺利完成。
- 1 - 资源处于警告状态。事情是不完全正确。
- 2 - 资源处于临界状态。主机可能已关闭或不运行的服务。
- 3 - 未知状态,这并不一定表明有问题,而是表明该检查可以没有给出明确的,毫不含糊的状态。
插件还可以打印文本消息。默认情况下,显示在Nagios的网络界面,并在Nagios的电子邮件警报此消息。即使消息是不是一个要求,你通常可以通过插件找到他们,因为他们告诉用户什么是错的,而不强迫他们谘询文件。
一个简单的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插件逻辑很好的例证。始终通过探测可能出现的最坏情况下启动。只有当所有的检查都通过了应该脚本退出,状态确定。请务必在退出之前指定澄清消息。
使用插件
默认情况下,所有的Nagios插件都存储在$ USER1宏定义的目录,文件/etc/nagios/private/resource.cfg定义。在从一个典型的Nagios的安装EPEL的存储库,$ USER1定义为/ usr / lib中/的nagios /插件。你应该用你的插件做的第一件事就是将它复制到$ 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本地主机
),并使用模板(见在继承对象的文档模板和它们如何工作),负责本地服务(使用本地服务
)。最重要的部分是check_command
指示。它指定命令check_file
,接着感叹号作为隔板,接着是文件名作为参数。如果你的插件有一个以上的参数可以用额外的惊叹号它们分开。
运行的Nagios远程插件
例子check_file插件的一个明显缺陷是,它在本地,这意味着你不能检查远程服务器上的文件。您可以通过多种方式解决此问题。
第一种方法是使用ssh命令来远程执行脚本。这需要你的脚本复制到远程服务器,并使用SSH的运行远程命令的能力。它也需要你设置无密码锁登录的Nagios的服务器及其Nagios的用户。如果你不知道如何做到这一点,检查本文对所有细节。
第一种方法的好处是,你把所有的力量和本地运行命令的监视服务器的灵活性。缺点是Nagios的服务器必须能够登录密码的用钥匙到远程服务器。这是推荐给敏感的环境安全问题,而不是。
第二个和更安全的方法是使用SNMP扩展功能。这需要你有NET-SNMP
包(为CentOS)安装并在远程服务器上配置。
要使用SNMP扩展命令,首先check_file.sh脚本复制到远程服务器。/,你可以将它放在目录/ usr / bin中的例子。
接下来,添加配置指令延伸check_passwd_file /usr/bin/check_file.sh / etc / passwd中
到远程服务器上的文件/etc/snmp/snmpd.conf中。语法延伸的 some_alias命令参数 EM>
。这里谈到这种方法的主要不便之处 - 你必须定义每个独立的检查,这在我们的情况下,意味着对我们要测试的每个独立的文件别名别名,因为你无法通过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命令查询服务器在10.0.0.2版本的SNMP与2C“公共”团体字符串。为自定义SNMP对象标识符(OID)扩展命令被NET-SNMP-EXTEND-MIB :: nsExtendOutputFull。\ “ some_alias EM> \”
。
不幸的是,上述命令不能直接在Nagios的实现。如果SNMPGET正常工作,并可以连接到远程主机,它总是会返回状态0,表示一切都OK,因为程序本身的snmpget没有退出的错误。因此,即使文件不存在,检查脚本将返回状态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_extend.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的允许这种扩展的事实的原因,许多管理员喜欢它比其他监控解决方案之一。