使用Nagios check_http

时间:2015-10-09 01:49:39

标签: web-services monitor nagios

我正在尝试使用Nagios的check_http插件监控Web服务。

我想要监控的网址包括url参数。

事实证明check_http插件会在检查时忽略url参数。

这是我的配置。

' check_http'命令定义

define command{
    command_name    check_http
    command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
    }


define service{
    use                             local-service         ; Name of service template to use
    host_name                       pear
    service_description             HTTP
    check_command                   check_http!-u http://pear.com/total?eId=12345&env=abcde
    notifications_enabled           0
    }

1 个答案:

答案 0 :(得分:5)

尝试使用相对路径而不是完整网址替换传递到-u的值。

在此示例中,主机名(-H)将由$HOSTADDRESS$提供,该address取自pear主机定义的-u字段。 传递到/total?eId=12345&env=abcde参数的值应该是相对路径,例如:-u。 我们会将check_http_with_args添加到define host { host_name pear alias pear address pear.com use linux-server contact_groups admins notification_interval 0 notification_period 24x7 notifications_enabled 1 register 1 } define command{ command_name check_http_with_args command_line $USER1$/check_http -H $HOSTADDRESS$ -u $ARG1$ } define service { service_description pear_total_http use generic-service check_command check_http_with_args!/total?eId=12345&env=abcde host_name pear contact_groups admins notification_interval 0 notification_period 24x7 notifications_enabled 1 flap_detection_enabled 1 register 1 } 命令定义中,因此我们不必将其作为服务定义中参数的一部分传递。

/usr/local/nagios/libexec/check_http -H pear.com -u /total?eId=12345&env=abcde

最后,Nagios执行的命令应该转换成如下所示:

check_http

您可以尝试从命令行执行上述操作,以确保它适合您。

注意:check_http的路径替换为Nagios服务器上与您的安装位置对应的实际路径。

我们引用的-H, --hostname=ADDRESS Host name argument for servers using host headers (virtual host) Append a port to include it in the header (eg: example.com:5000) ... -u, --url=PATH URL to GET or POST (default: /) 手册页的相关部分:

-k

来源:https://www.monitoring-plugins.org/doc/man/check_http.html

修改

要从评论中回答您的问题,--header=-k, --header=STRING Any other tags to be sent in http header. Use multiple times for additional headers 将允许您传入标题。

define command{
    command_name    check_http_with_args
    command_line    $USER1$/check_http -H $HOSTADDRESS$ -u "$ARG1$" -k "$ARG2$"
}

define service {
        service_description             pear_total_http
        use                             generic-service
        check_command                   check_http_with_args!/total?eId=12345&env=abcde!Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        host_name                       pear
        contact_groups                  admins
        notification_interval           0
        notification_period             24x7
        notifications_enabled           1
        flap_detection_enabled          1
        register                        1
}
     

来源:https://www.monitoring-plugins.org/doc/man/check_http.html

因此,要指定Accept标头,我将修改以下内容:

-k "$ARG2$"

...将command_line添加到command定义的Accept: <MIME types>,并将Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8(例如check_command)添加到service } $ARG1$定义。

此外,我将-u "$ARG1$" command_line &部分的eId=12345&env=abcde包裹在双引号中,因为我怀疑&中的module.exports导致shell认为命令的结尾在var UserModel = { create: function(){}, read: function(){}, update: function(){}, delete: function(){}, list: function(){} } module.exports = UserModel; 之前终止。将参数包装在双引号中应该使整个字符串看作一个完整的参数。