Forum Discussion

AngryCat_52750's avatar
AngryCat_52750
Icon for Nimbostratus rankNimbostratus
Mar 29, 2012

irule or other - soap http-response solution??

We currently have a web server making a SOAP service call to a VS on the F5 and that gets sent to ‎a ‎pair of application servers. Currently the VS is set to listen on tcp port 7333 and the health ‎monitor is ‎monitoring on port 7333. We had an issue where the back end services were not ‎responding to the ‎SOAP calls but the port was still up.

 

‎So we had a request to inspect the http ‎response to see what the error codes are and create a log ‎message based of that..‎

 

My questions are ‎for the VS, would we have to add a http profile and include an irule that would look ‎for the http ‎response and in that irule create a log message on the F5. Would the health monitor have ‎to change ‎or can we leave it monitoring the tcp 7333 port?‎
  • Hamish's avatar
    Hamish
    Icon for Cirrocumulus rankCirrocumulus
    Yes, create an iRule (You don't NEED an HTTP profile, but it does make it easier if the BigIP parses the responses and you use the [HTTP::xx] commands).

     

     

    The iRule should log with HSL or SIDEBAND connections (I've recently been warned by F5 support about too much logging using the log command).

     

     

    The health monitor should stay where it is until you find out if it needs changing to detect the outage separately.

     

     

    H
  • As Hamish says...

     

     

    If the TCP monitor isn't detecting application layer failures, I'd switch to a SOAP monitor. You could also add an HTTP profile to the virtual server and log individual failures on load balanced requests. But a monitor would be an effective and simpler fix.

     

     

    Aaron
  • thanks for the help guys.. we are planning to implement your suggestion.. we are keeping the health monitor as a simple tcp 7333 monitor but creating an irule to catch the 404 and 500 responses..

     

     

    something like this would work right..

     

     

     

    when HTTP_REQUEST {

     

    set host [HTTP::host]

     

    set uri [HTTP::uri] }

     

     

    when HTTP_RESPONSE {

     

    if { [HTTP::status] == 404 or [HTTP::status] == 500 } {

     

    log local0. "Server [IP::server_addr] sent [HTTP::status] for $host $uri"

     

    }

     

    }