我目前通过Soap UI手动发送请求,请求如下。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:sear="http://www.mysite.com/ws/search/searchcustomer">
<soapenv:Header/>
<soapenv:Body>
<sear:searchCustomerRequest>
<sear:sustomerID>0000245</sear:sustomerID>
<sear:registrationStatus>R</sear:registrationStatus>
<sear:versionNumber>1.0</sear:versionNumber>
</sear:searchCustomerRequest>
</soapenv:Body>
</soapenv:Envelope>
现在,我希望可以使用nagios中的 check_http 类/函数发送它,
你知道这是否可能吗?
我希望它会给我以下内容:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<ns2:searchGprnResponse xmlns:ns2="http://www.mysite.com/ws/gasmapservice/searchcustomer">
<ns2:areaName>Blackrock, County Dublin</ns2:areaName>
<ns2:townName>Dublin City</ns2:townName>
<ns2:countyName>Dublin</ns2:countyName>
</ns2:searchcustomer>
</env:Body>
</env:Envelope>
我想要grep,让我们说&#34; Dublin&#34;,如果计数是&gt; 0然后它会给出一个OK,如果它没有返回它,那么它会给出一个失败。
我是nagios的新手,我觉得让它工作有点复杂,
任何想法都会非常感激,我认为CURL可能有效,但不确定:)
再次感谢, 本
答案 0 :(得分:8)
看到你的问题有点晚了,但希望无论如何都会有所帮助。
您可以使用check_http
插件执行此操作。 check_http
Nagios插件附带Nagios插件包(nagios-plugins.org)
使用-P
参数,您可以POST
SOAP请求,使用-r
参数,您可以(正则表达式)匹配特定字符串的响应。
使用check_http
插件从命令行:
(我不得不截断你的SOAP请求,因为我发布了带有http标题的url&#39;)
check_http -H my.webserver.org -p 8080 -u "/testing" -P '<soapenv:Envelope .... </soapenv:Envelope>' -r 'Dublin'
如果这对你有用,那么你需要在Nagios中创建一个新的检查命令和服务检查定义。
webservice命令的检查命令定义示例(同时使用警告和关键的repsonse时间值)...
define command {
command_name check_webservice
command_line $USER1$/check_http -H $ARG1$ -p $ARG2$ -u $ARG3$ -P $ARG4$ -r $ARG5$ -w $ARG6$ -c $ARG7$
}
...以及示例服务检查定义
define service {
use generic-service
host_name my.webserver.org
service_description check_webservice
check_command check_http_webservice!my.webserver.org!8080!/testing!'<soapenv:Envelope .... </soapenv:Envelope>'!'Dublin'!5!10
}
请注意引用:这是必不可少的这种检查!
在上面的示例中,我使用单引号引用SOAP POST
请求和响应。