添加一个新的主机和服务,由Icinga监测2
在本教程中,我将介绍如何添加Icinga 2要监视的新主机,以及Icinga如何监视主机的服务(如Web HTTP服务器)。 我还将向您展示如何创建自己的定制Icinga插件命令,以便监视网络基础结构中的UDP服务。
如果您还没有安装Icinga 2,请查看本教程 。
Icinga 2提供了一个插件基础架构,使其能够轻松实现服务器和服务检查以及通知。 这个事实允许系统管理员和程序员为Icinga 2创建新的功能,并创建专门的验证主机,网络服务或网络功能的不同方面的特殊命令。
Icinga 2在位于/etc/icinga2/conf.d/目录下的hosts.conf文件中存储了用于服务规则,通知,依赖项和计划停机时间对象的对象属性的主机定义。 在这个文件中,您可以添加一个新的主机定义,以便通过Icinga2监控进程进行检查。 在下面的例子中,我们将添加一个新的定义,以便Icinga2可以定期检查我们的默认网关路由器,以查看它是否通过ICMP检查联机。
nano /etc/icinga2/conf.d/hosts.conf
转到文件末尾并添加以下行以添加新的主机定义。
object Host "Router" {
address = "192.168.1.1"
check_command = "hostalive"
}
例如,在主路由器上,我们还要检查用于认证和设置的HTTP Web服务器的状态。 下面几行将检查路由器上的Web服务器,看看HTTP服务器是否处于活动状态,并用适当的HTTP代码进行响应。
object Service "http" {
host_name = "Router"
check_command = "http"
}
为了使Icinga 2获取新的主机定义并开始定期监视新资源,需要通过发出以下命令来重新启动进程。
systemctl restart icinga2.service
要验证新添加的主机(在本例中为路由器)的状态,请登录到Icinga 2 Web面板并导航到Overview(概览) - > Hosts(主机)。 在正确的平面上,您应该看到新添加的主机的状态,如下图所示,描述了我们的路由器状态。 主机检查基本上通过ICMP协议进行,Icinga2将在Web面板中显示主机的平均往返时间。
如果要显示主机HTTP服务检查的状态,请导航到“概览” - >“服务组”,然后点击“HTTP检查”。 在正确的平面上,您应该看到路由器HTTP服务的状态,如以下屏幕截图所示。
Icinga 2带有一系列预定义的命令,可用于监视各种服务。 但是这些默认命令有时不足以检查自定义服务。 在这种情况下,一种方法是创建自己的自定义命令脚本,Icinga 2可以调用它来监视服务。 在下面的例子中,我们将向您展示如何添加一个新的自定义命令脚本,以验证网络上不同UDP服务的状态。 自定义命令必须参数化,并且必须至少包含两个参数,形式为-H主机名 或IP和-p端口号 。 用于验证UDP服务端口的自定义命令脚本应放置在/ usr / lib / nagios / plugins /目录中,并应具有在下面的示例中声明的内容。
nano /usr/lib/nagios/plugins/check_udpport
check_udpport文件摘录。
#!/bin/bash
while getopts H:p: option
do
case "${option}"
in
H) addr=${OPTARG};;
p) port=${OPTARG};;
esac
done
/bin/nc -vz -u "$addr" "$port" > /dev/null 2>&1
stat=`echo $?`
if test $stat -eq 0; then
echo "Port $port is opened on $addr"
exit 0
else
echo "Port $port is not opened on $addr"
exit 2
fi
让我们试着了解这个脚本是如何工作的。 正如你所看到的插件不是别的,而是一个简单的Bash脚本。 我们使用while控制表达式来循环两个由H和p字母定义的参数。 两个H和P shell变量字母被参数化,并使用case语句作为命令行参数进行分析。 case语句将测试参数是否存在,并将声明addr和port变量。 接下来,$ addr和$ port变量将被添加为netcat命令的命令选项,作为返回将探测$ port变量中定义的端口号是否为IP地址为$ addr变量的主机打开。 netcat命令的输出和最终的错误对这个插件没有意义,所以它将被丢弃到Linux blackhole / dev / null文件中。 我们需要的是netcat命令退出代码。 netcat检查主机端口后,如果侦测到的UDP端口被打开,将总是返回0退出代码。 其余的命令很简单。 if-else case条件语句将打印以下内容:如果UDP端口在指定的IP地址上打开,则打印该主机IP地址的内容“端口已打开”的字符串,并附加退出代码0。在Linux中,代码总是成功或者没有错误返回代码。 如果UDP端口未打开(netcat的退出代码将不为0),则输出主机的“未打开端口”字符串,并附加退出代码2.每个回显后添加的退出代码这个脚本中的字符串对于Icinga2检查具有巨大的意义,如下所述。
在Icinga中的服务状态或主机状态的命令插件返回代码2:
0 =服务正常,主机服务正常
1 =服务警告,主机UP或DOWN / UNREACHABLE(主机频繁振荡或改变状态)
2 = CRITICAL为服务和DOWN / UNREACHABLE为主机
3 = UNKNOWN DOWN / UNREACHABLE
所以基本上,Icinga 2将使用主机和端口参数来执行这个脚本,它将返回两个状态:或者UDP端口不可达,并且会提醒您主机的UDP服务是关键的或者UDP端口是可访问的,并且会通知您UDP服务运行状况良好,可以。
编辑脚本文件后,保存并关闭它,并确保可以通过使用以下命令添加执行权限来启动文件。
chmod +x /usr/lib/nagios/plugins/check_udpport
然后,为了测试脚本是否按预期工作,通过发出以下语法,针对网络中主机上的UDP打开端口和UDP关闭端口运行该命令。
这里检查TFTP服务器的192.168.1.2主机。
/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 69
根据确定关闭的UDP端口模拟检查
/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 68
为了在Icinga 2中广泛使用这个新的自定义插件,请在Icinga 2命令的配置文件中添加一个新的命令定义,如下例所示。
nano /etc/icinga2/conf.d/commands.conf
转到这个文件的底部并添加命令定义如下:
object CheckCommand "myudp" {
command = [ PluginDir + "/check_udpport" ]
arguments = {
"-H" = "$addr$"
"-p" = "$port$"
}
vars.addr = "$address$"
}
在Icinga 2配置中用来调用ckeck_udpport命令的命令的名字是“ myudp ”。 当我们调用服务主机定义的命令时,我们不需要指定地址,因为Icinga 2宏$ address $变量是硬编码的。
为了检查命令是否按预期工作,请为主机添加一个新的服务定义,以便检查特定的UDP服务是否在该主机上打开。 例如,要检查DHCP端口是否为192.168.1.2主机打开,请在Icinga2 hosts.conf文件中添加以下定义。
object Service "dhcp" {
host_name = "Pi.hole"
check_command = "myudp"
vars.port = "67"
}
之后,重新启动Icinga 2以反映更改并导航到Icinga 2 Web面板,概述 - >主机,单击您的特定主机并验证UDP服务状态的状态,如下图所示。
就这样! 您已经成功添加了主机,Icinga 2网络监控应用程序会定期检查服务。 有关Icinga 2监控引擎和自定义命令脚本的其他自定义配置,请访问以下地址的文档页面: https ://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check- 命令