Cookie Persistence Inactivity Tracker
Problem this snippet solves:
iRule intended to be used in conjunction with BIG-IP Cookie Insert persistence (that doesn't have in-memory entries that can be viewed). The iRule creates "fake" persistence entries which aren't used for persistence, but allow administrators to track whether there is still activity to a server (that presumably has been soft-disabled) to see if sessions have finished bleeding off of that server.
Cookie to track could be BIGIP... cookie or other session cookie (even if session cookie [JSESSIONID] isn't used for BIG-IP server persistence).
How to use this snippet:
Apply iRule to virtual server.
Edit static variables in RULE_INIT section (cookie name to use and inactivity value).
once rule is in place, you can use "show ltm persistence persist node-addr a.b.c.d" to check on whether there's activity to the node you are bleeding traffic from.
Code :
#This iRule is intended to be used in conjunction with F5 cookie persistence (default insert type)
#By looking at persistence table entries on GUI or TMSH (show ltm persistence persist-records; you can
#assess whether sessions have "bled" away from a server after disabling it
#Note the default BIG-IP cookie persistence algorithm doesn't create in-memory persistence records
#This iRule doesn't implement persistence, only uses the persistence engine to track activity to nodes
#Cookie insert persistence will stil be what is honored
#c.jenison at f5.com (Chad Jenison)
when RULE_INIT {
set static::cookiename "BIGipServerubuntu-tomcat"
# set sessioninactivitytime to value in seconds before you want persistence records to timeout
set static::sessioninactivitytime 300
}
when HTTP_REQUEST {
if {[HTTP::cookie exists $static::cookiename]} {
if {[persist lookup uie [HTTP::cookie $static::cookiename]] ne ""}{
log local0. "Cookie $static::cookiename : [HTTP::cookie $static::cookiename]"
} else {
set requestcookievalue [HTTP::cookie $static::cookiename]
}
}
}
when HTTP_RESPONSE {
if {[HTTP::cookie exists $static::cookiename]}{
persist add uie [HTTP::cookie $static::cookiename] $static::sessioninactivitytime
log local0. "Saw $static::cookiename cookie set with value: [HTTP::cookie $static::cookiename]"
} elseif {[info exists requestcookievalue]}{
persist add uie $requestcookievalue $static::sessioninactivitytime
unset requestcookievalue
}
}