我正在尝试使用Nagios的check_http插件监控Web服务。
我想要监控的网址包括url参数。
事实证明check_http插件会在检查时忽略url参数。
这是我的配置。
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
}
答案 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;
之前终止。将参数包装在双引号中应该使整个字符串看作一个完整的参数。