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

Logging sessionid in irule to select pool based on host header

TFalk_342445
Nimbostratus
Nimbostratus

I've been trying to add sessionid to my logs for my irule to select pools based on host-header. It seems easy enough, but I've still managed to fail somehow 😞

The basic iRule isn't very complicated:

when HTTP_REQUEST {
set req_start [clock clicks -milliseconds]
set clientip [IP::client_addr]
set method [HTTP::method]
set uri [HTTP::uri]
set referer [HTTP::header Referer]
set uid [string range [AES::key 256] 8 end] 
set ua [HTTP::header User-Agent]

switch [string tolower [HTTP::host]] {

  monitoring.domain.com {
     set doSSL 1
     pool monitoring
  }

  tickets.domain.com {
  set doSSL 2
  pool ticketsystem
  }    

 default { reject }
}

log local0. "URI_LOG\t[ACCESS::session data get "session.user.sessionid"]\t$uid\t$clientip\t[clock      format [clock seconds] -format "%Y-%m-%d %H:%M:%S"]\t[expr {[clock clicks -milliseconds] -  $req_start}]\t[LB::server addr]\t$referer\t[URI::query $uri]"

 when SERVER_CONNECTED {
 if {$doSSL == 1} {
    SSL::profile MonitoringSSLProfile
 } elseif {$doSSL == 2} {
     SSL::profile TicketSystemSSLProfile
  }
  }

Of course, I do get a few log entries, but not the sessionid. I believe it is because I can only get that in HTTP_RESPONSE? But if I try to add HTTP_RESPONSE in this iRule, it turns out that my sites aren't accessible any longer.

I feel that there is a simple answer out there, I just haven't been able to think about it or find it yet. Anyone have a good tip here?

Thank you.

1 REPLY 1

youssef1
Cumulonimbus
Cumulonimbus

Hi,

You have to use event "ACCESS_ACL_ALLOWED", is triggered when a resource request passes the access control criteria and is allowed to go through the ACCESS filter.

when ACCESS_ACL_ALLOWED {
set req_start [clock clicks -milliseconds]
set clientip [IP::client_addr]
set method [HTTP::method]
set uri [HTTP::uri]
set referer [HTTP::header Referer]
set uid [string range [AES::key 256] 8 end] 
set ua [HTTP::header User-Agent]

switch [string tolower [HTTP::host]] {

  "monitoring.domain.com" {
     set doSSL 1
     pool monitoring
  }

  "tickets.domain.com" {
  set doSSL 2
  pool ticketsystem
  }    

 default { reject }
}

log local0. "URI_LOG\t[ACCESS::session data get "session.user.sessionid"]\t$uid\t$clientip\t[clock      format [clock seconds] -format "%Y-%m-%d %H:%M:%S"]\t[expr {[clock clicks -milliseconds] -  $req_start}]\t[LB::server addr]\t$referer\t[URI::query $uri]"

 when SERVER_CONNECTED {
 if {$doSSL == 1} {
    SSL::profile MonitoringSSLProfile
 } elseif {$doSSL == 2} {
     SSL::profile TicketSystemSSLProfile
  }
  }