NEDS Rule
Problem this snippet solves:
Used in conjunction with the NEDS specification contained in the Logging & Reporting Toolkit series.
Code :
when RULE_INIT { set ::inbound_vlan "4094" set ::device_id "mybigip.test.net" set ::strlimit 256 set ::doAES 0 set ::AESKey "F(NY$*@&TYY%($&@(%SLJSDLF" } when CLIENT_ACCEPTED { set secs [clock seconds] set usecs [expr {[clock clicks] - [expr {$secs * 1000000}]}] # Since the seconds counter can increment between the two clock # calls above, we need to correct for values over 1000000. # This may adjust the measured time to be somewhere between # the two calls (instead of using the second measurement). # All other rollover conditions will not cause a problem. if { $usecs > 1000000 } { set usecs "999999" } else { set usecs [format "%06u" $usecs] } set conn_start_time $secs.$usecs set clientside_client_addr [IP::client_addr] set clientside_client_port [TCP::client_port] set clientside_server_addr [IP::local_addr] set clientside_server_port [TCP::local_port] set clientflow "$clientside_client_addr:$clientside_client_port" append clientflow "-$clientside_server_addr:$clientside_server_port@$conn_start_time" set vlanid "[LINK::vlan_id]" if { [string compare $vlanid $::inbound_vlan] } { set direction "Inbound" } else { set direction "Outbound" } set log_event "neds.f5.conn.start.v1" set log_content "\"$::device_id\"," append log_content "\"$clientflow\"," append log_content "$conn_start_time," append log_content "\"[LINK::vlan_id]\"," append log_content "[IP::protocol]," append log_content "[IP::tos]," append log_content "[IP::ttl]," append log_content "\"[virtual]\"," append log_content "\"$direction\"" if { $::doAES } { append log_event ".AES+base64" set log_content [b64encode [AES::encrypt $::AESKey $log_content]] } log local0. \"$log_event\",$log_content } when CLIENT_CLOSED { set secs [clock seconds] set usecs [expr {[clock clicks] - [expr {$secs * 1000000}]}] if { $usecs > 1000000 } { set usecs "999999" } else { set usecs [format "%06u" $usecs] } set conn_end_time $secs.$usecs set log_event "neds.f5.conn.end.v1" set log_content "\"$::device_id\"," append log_content "\"$clientflow\",$conn_end_time," append log_content "[lindex [IP::stats pkts] 0]," append log_content "[lindex [IP::stats pkts] 1]," append log_content "[lindex [IP::stats bytes] 0]," append log_content "[lindex [IP::stats bytes] 1]" if { $::doAES } { append log_event ".AES+base64" set log_content [b64encode [AES::encrypt $::AESKey $log_content]] } log local0. \"$log_event\",$log_content } when HTTP_REQUEST { set secs [clock seconds] set usecs [expr {[clock clicks] - [expr {$secs * 1000000}]}] if { $usecs > 1000000 } { set usecs "999999" } else { set usecs [format "%06u" $usecs] } set http_request_time $secs.$usecs set http_host [string range [HTTP::host] 0 $::strlimit] set http_host [string map {{"} {""}} $http_host] set http_request_uri [string range [HTTP::uri] 0 $::strlimit] set http_request_uri [string map {{"} {""}} $http_request_uri] set http_username [string range [HTTP::username] 0 $::strlimit] set http_username [string map {{"} {""}} $http_username] set http_user_agent [string range [HTTP::header User-Agent] 0 $::strlimit] set http_user_agent [string map {{"} {""}} $http_user_agent] set log_event "neds.f5.http.req.v1" set log_content "\"$::device_id\"," append log_content "\"$clientflow\"," append log_content "$http_request_time," append log_content "[HTTP::request_num]," append log_content "\"$http_host\"," append log_content "\"$http_request_uri\"," append log_content "\"$http_username\"," append log_content "\"$http_user_agent\"" if { $::doAES } { append log_event ".AES+base64" set log_content [b64encode [AES::encrypt $::AESKey $log_content]] } log local0. \"$log_event\",$log_content } when HTTP_RESPONSE { set secs [clock seconds] set usecs [expr {[clock clicks] - [expr {$secs * 1000000}]}] if { $usecs > 1000000 } { set usecs "999999" } else { set usecs [format "%06u" $usecs] } set http_reply_time $secs.$usecs set content_length "" if { [HTTP::header exists "Content-Length"] } { set content_length [HTTP::header "Content-Length"] } set lb_server "[LB::server addr]:[LB::server port]" if { [string compare "$lb_server" ""] == 0 } { set lb_server "" } set status_code [HTTP::status] set status_code [string map {{"} {""}} $status_code] set content_type [HTTP::header "Content-type"] set content_type [string map {{"} {""}} $content_type] set serverside_client_addr [IP::local_addr] set serverside_client_port [TCP::local_port] set serverside_server_addr [IP::remote_addr] set serverside_server_port [TCP::remote_port] set serverflow "$serverside_client_addr:$serverside_client_port" append serverflow "-$serverside_server_addr:$serverside_server_port" set log_event "neds.f5.http.resp.v1" set log_content "\"$::device_id\"," append log_content "\"$clientflow\"," append log_content "$http_reply_time," append log_content "[HTTP::request_num]," append log_content "\"$status_code\"," append log_content "\"$content_type\"," append log_content "\"$content_length\"," append log_content "\"$lb_server\"," append log_content "\"$serverflow\"" if { $::doAES } { append log_event ".AES+base64" set log_content [b64encode [AES::encrypt $::AESKey $log_content]] } log local0. \"$log_event\",$log_content }
Published Mar 18, 2015
Version 1.0CodeCentral_194
Cirrus
Joined May 05, 2019
CodeCentral_194
Cirrus
Joined May 05, 2019
No CommentsBe the first to comment