Nagios 不接受命令中的正则表达式

Nagios 不接受命令中的正则表达式

我已经定义了这个命令:

define command{
command_name check_http_sane
command_line $USER1$/check_http -H $HOSTNAME$ -r "HTTP/1.1 (200|301|302|303|304|307|401|418|426)"
}

当我在命令行上手动运行它时,它工作正常,但 nagios (2.6) 报告“未找到模式”错误。我需要转义某些内容吗?


编辑:如下所示,我通过check_http用我自己的脚本替换解决了这个问题(无论如何,对于我们的用例来说已经足够好了)。脚本:http://pastebin.com/hNmz6Wa1

答案1

check_http.c 的源代码显示该-r选项检查标题和页面内容。您看到的问题可能是 Nagios 命令宏解释器试图替换正则表达式字符串中的某些内容。

您应该尝试转义所有(|)字符。如果这不起作用,请尝试仅使用括号和竖线。您也可以尝试使用单引号而不是双引号。

答案2

因为逃跑也不管用(而且由于我不需要命令行就可以工作,而且我也不想花更多时间调试它,所以我编写了自己的 Nagios 插件来替换 check_http,它非常有效:

https://github.com/tao-software/nagios-plugin-http-tao

答案3

您关于此命令在命令行上“运行良好”的断言值得怀疑。当我手动运行它时,它并没有“运行良好”:

./check_http -H localhost -r "HTTP/1.1 (200|301|302|303|304|307|401|418|426)" HTTP CRITICAL: HTTP/1.1 302 Found - pattern not found - 650 bytes in 0.001 second response time |time=0.001410s;;;0.000000 size=650B;;;0

正如 Jeff Strunk 所建议的,您需要转义括号(以便 shell 不会使用它们),如下所示:

./check_http -H localhost -r "HTTP/1.1 \(200|301|302|303|304|307|401|418|426\)" HTTP OK: HTTP/1.1 302 Found - 650 bytes in 0.001 second response time |time=0.001425s;;;0.000000 size=650B;;;0

相关内容