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

Ben*_*lan 3 xml unix curl web-services 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>
Run Code Online (Sandbox Code Playgroud)

现在,我希望可以使用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>
Run Code Online (Sandbox Code Playgroud)

我想要grep,让我们说"都柏林",如果计数> 0那么它会给出一个OK,如果它不返回它,那么它会给出一个失败.

我是nagios的新手,我发现让它工作有点复杂,

任何想法将不胜感激,我认为CURL可能会工作,但不确定:)

再次感谢,本

小智 8

看到你的问题有点晚了,但希望无论如何都有帮助.

您可以使用check_http插件执行此操作.在check_httpNagios的插件随Nagios的插件包(nagios-plugins.org)

使用-P参数,您可以POST使用SOAP请求,并使用-r参数(正则表达式)匹配特定字符串的响应.

从命令行使用check_http插件:( 我不得不截断你的SOAP请求,因为我不能发布带有http标题的url ...)

check_http -H my.webserver.org -p 8080 -u "/testing" -P '<soapenv:Envelope .... </soapenv:Envelope>' -r 'Dublin'
Run Code Online (Sandbox Code Playgroud)

如果这对您有用,则需要在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$
}
Run Code Online (Sandbox Code Playgroud)

...以及示例服务检查定义

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
}
Run Code Online (Sandbox Code Playgroud)

请注意引用:这是必不可少的这种检查!在上面的示例中,我使用单引号引用SOAP POST请求和响应.