使用nagios将xml请求发送到Web服务,并检索响应

时间:2014-04-29 17:26:47

标签: xml web-services unix curl nagios

我目前通过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可能有效,但不确定:)

再次感谢, 本

1 个答案:

答案 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请求和响应。