Forum Discussion

Raja_M's avatar
Raja_M
Icon for Nimbostratus rankNimbostratus
Jul 16, 2018

HSL is not working

Have configured the Pool member and created a Rule for HSL also added the syslog HSL server. Could you please help me in this. I dont see any hit count on the irule or no more statistics on pool member.

ltm pool logInsight_pool_syslog { members { logInsight_node:514 { address 172.30.4.230 session monitor-enabled state up } } monitor gateway_icmp }

++++++++++++++++++++++++++++

sys log-config destination remote-high-speed-log logInsight_pool_syslog { description HSL-Logging pool-name logInsight_pool_syslog }

+++++++++++++++++++++

============================= iRule: logInsight_iRule_http START ==============================

when CLIENT_ACCEPTED { set client [IP::client_addr] set client_req_start_time [clock clicks -milliseconds] }

when SERVER_CONNECTED { set server_req_start_time [clock clicks -milliseconds] }

when HTTP_REQUEST_SEND { set http_req_send_start_time [clock clicks -milliseconds] set node_elapsed_time [expr {$http_req_send_start_time - $server_req_start_time}]

}

when HTTP_REQUEST {

set client_latency [expr {[clock clicks -milliseconds] -  $client_req_start_time} ]
set vhost [HTTP::host]:[TCP::local_port]
set url [HTTP::uri]
set method [HTTP::method]
set http_version [HTTP::version]
set user_agent [HTTP::header "User-Agent"]
set tcp_start_time [clock clicks -milliseconds]
set req_start_time [clock format [clock seconds] -format "%Y/%m/%d %H:%M:%S"]
set req_elapsed_time 0
set virtual_server [LB::server]

if { [HTTP::header Content-Length] > 0 } then {
    set req_length [HTTP::header "Content-Length"]
    if {$req_length > 4000000} then {
        set req_length 4000000
    }
    HTTP::collect $req_length
} else {
    set req_length 0
}

if { [HTTP::header "Referer"] ne "" } then {
    set referer [HTTP::header "Referer"]
} else {
    set referer -
}

}

when HTTP_RESPONSE {

set hsl [HSL::open -proto TCP -pool logInsight_pool_syslog]
set resp_start_time [clock format [clock seconds] -format "%Y/%m/%d %H:%M:%S"]
set node [IP::server_addr]:[TCP::server_port]
set status [HTTP::status]

set req_elapsed_time [expr {[clock clicks -milliseconds] - $tcp_start_time}] set server_latency [expr {[clock clicks -milliseconds] - $server_req_start_time} ]

if { [HTTP::header Content-Length] > 0 } then {
    set response_length [HTTP::header "Content-Length"]
} else {
    set response_length 0
}

HSL::send $hsl "<190>f5_web_access_info|$vhost|$virtual_server|$client|$method|\"$url\"|HTTP/$http_version|$req_start_time|$req_length|$req_elapsed_time|$node|$status|$resp_start_time|$response_length|$user_agent|$client_latency|$server_latency|\"$referer\"\r\n" }

============================= iRule: logInsight_iRule_http END ==============================

3 Replies

  • Snl's avatar
    Snl
    Icon for Cirrostratus rankCirrostratus

    Try below irule , HTH

    POOL_SYSLOG-create a pool with syslog server ip address
    
            when HTTP_REQUEST {
    
        set http_request_time [clock clicks -milliseconds]
        set timestamp [clock format [clock seconds] -format {%d/%b/%Y:%H:%M:%S %z}] 
        set remote [IP::remote_addr]
        set client [IP::client_addr]:[TCP::client_port]
        set url [HTTP::host][HTTP::uri]
        set referer [HTTP::header "Referer"]
        set vip [IP::local_addr]:[TCP::local_port]
        set httpMethod [HTTP::method]
        set httpVersion [HTTP::version]
        set xforwardfor [HTTP::header X-Forwarded-For]
        set url [string map " x" $url]
        set referer [string map " x" $referer] 
        set hsl [HSL::open -proto UDP -pool POOL_SYSLOG]
    
         Limit the url variable to 300 characters
        if {[string length $url] > 300} {
          set url "[string range $url 0 300]..."   
        }
    
         Limit the referer variable to 300 characters
        if {[string length $referer] > 300} {
          set referer "[string range $referer 0 300]..."   
        }
    
         Build the Request log line
        set request_log_line " $timestamp  [virtual name]  $client  $remote  $vip  $url  $referer  $httpMethod  $httpVersion" 
        log local0.info "Request - $request_log_line"
        }
    
        when HTTP_RESPONSE {
    
         VARIABLES
         Initialize local variables used in this rule
        
        set http_response_time [ clock clicks -milliseconds ]
        set client [IP::client_addr]:[TCP::client_port]
        set node [IP::server_addr]:[TCP::server_port]
        set nodeResp [HTTP::status]
        set payloadLength [HTTP::payload length]
        set responseTime [expr $http_response_time - $http_request_time]
    
          Build the Response log line
         set response_log_line "$client  $node  $nodeResp  $payloadLength  $responseTime  $http_request_time  $xforwardfor" 
        log local0.info "Response - $response_log_line"
    
         Write Request and Response log lines to the LTM log
        HSL::send $hsl "IRULE_COMMON_LOG : $request_log_line  -  $response_log_line"
         }
        }
    
  • Raja_M's avatar
    Raja_M
    Icon for Nimbostratus rankNimbostratus

    Treied adding this irule with same pool i dont see any hit count on pool either irule. I chnaged from tcp to UDP in the HSL remote logging

     

  • Do you see any errors in /var/log/ltm? As a side note, you do not need to use 'then' in an if statement