我们使用 Nagios 安装来监控我们的基础设施和许多网站。监控网站的方式是使用check_http
作为参数传递的 URL。我们之所以使用这种方式,是因为多个网站托管在同一系统上,并且由于产品的 URL 键可能会发生变化,因此 URL 可能会发生合理变化。
因此 HTTP 检查基本上如下所示:
define service {
host_name ourhostname
service_description Typo 3
check_command check_http!www.ourdomain.com!/
max_check_attempts 3
check_interval 1
retry_interval 1
check_period 24x7
notification_interval 30
notification_period 24x7
contact_groups developers
}
问题就在这里。当出现值得通知的问题时,sendxmpp 被这样调用:
define command {
command_name notify-service-by-xmpp
command_line echo "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $ARG1$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/sendxmpp -j <server-ip> -u nagios -p <password> $CONTACTPAGER$
}
当我们尝试使用 时$ARG1$
,我们需要检查 URL。通知似乎可以访问有问题的对象的标准变量(例如$HOSTADDRESS$
),但我们需要 URL。
问题也可能是我检查 URL 时出错了。通常,您只有一个HOSTADDRESS
条目,但在主机定义中记录 URL 似乎是错误的,然后添加多个命令进行$HOSTADDRESS1$
检查$HOSTADDRESS15$
。
是否有人有关于如何访问传递给测试的命令行参数的解决方案,或者有更好的想法,关于如何在不打开多个不同命令或不同主机的情况下检查不同虚拟主机下同一主机的大量 URL?
答案1
我不知道是否有更好的解决方案,但这似乎是自定义变量的一个用例(参考:http://nagios.sourceforge.net/docs/3_0/customobjectvars.html)
只需在您的服务定义中添加类似这样的内容:
_domain www.ourdomain.com
然后您可以在通知命令中使用它$_DOMAIN$