Technical Forum
Ask questions. Discover Answers.
cancel
Showing results for 
Search instead for 
Did you mean: 

Calculate time taken for an HTTP request-response

telsonalva
Nimbostratus
Nimbostratus

Hi All,

Need help with my iRules, basically i am trying to calculate the time take when the F5 receives a request and sends it to the client. This gives me the time for how long the request took on our side before releasing it to the client. However i have seem some descrepancies with certain requests.

 

Setup:

 

I have two load balancers, there are two iRules and on each load balancer the time taken is calculated and the value sent as a header back in the response.

 

The traffic flow is as follows

 

Internet User -> Load balancer 1 -> Load balancer 2 -> Backend servers

 

iRule on Load balancer 1:

 

ltm rule LoadBalancer1 { when HTTP_REQUEST { #Record the time when request event in this iRule is triggered set http_request_time [clock clicks -milliseconds] } when HTTP_RESPONSE_RELEASE { #Record the time when response is ready to be released to the client side set http_responserelease_time [clock clicks -milliseconds] set time_taken [expr {$http_responserelease_time - $http_request_time}] #set response headers for client side analysis HTTP::header replace "LoadBalancer1-TimeTaken" "$time_taken ms" #unset the variables unset http_responserelease_time http_request_time time_taken } }

 

 

iRule on Load balancer 2:

 

ltm rule LoadBalancer2 { when HTTP_REQUEST { #Record the time when request event in this iRule is triggered set http_request_time [clock clicks -milliseconds] } when HTTP_RESPONSE_RELEASE { #Record the time when response is ready to be released to the client side set http_responserelease_time [clock clicks -milliseconds] set time_taken [expr {$http_responserelease_time - $http_request_time}] #set response headers for client side analysis HTTP::header replace "LoadBalancer2-TimeTaken" "$time_taken ms" #unset the variables unset http_responserelease_time http_request_time time_taken } }

 

Problem:

Assuming my above setup is correct, then the value of header LoadBalancer1-TimeTaken should be greater than LoadBalancer2-TimeTaken for each of the HTTP requests sent during a page load.

 

Though i see this to be true (LoadBalancer1-TimeTaken > LoadBalancer2-TimeTaken) for most of the requests, some requests it is the other way (LoadBalancer2-TimeTaken > LoadBalancer1-TimeTaken) I have noticed this for some javascript files, from my observation it seems consistent for the same javascript files. How is this possible?

 

2 REPLIES 2

I use the below snippet for troubleshooting latency stuffs.

when HTTP_REQUEST { set http_request_time [clock clicks -milliseconds] } when HTTP_REQUEST_SEND { set irule_proc_time [expr {[clock clicks -milliseconds] - $http_request_time}] } when HTTP_RESPONSE { log local0. "Irule-proc-time=$irule_proc_time;Response Time-taken:[expr {[clock clicks -milliseconds] - $http_request_time}]ms" }

Capture for every URI and its content length, see which is causing time to load longer.

Thanks, its the same logic that i have, i do not understand how the time taken on LB1 can be lesser than LB2 when the request flows from LB1->LB2.