iRulesのロギング機能を紹介します。
 
この機能により、BIG-IPでCentralized loggingを管理できます。

たとえば、100台のサーバのログを1つずつ管理・確認するよりも、1台のログ専用サーバでまとめて実施できるようになります。ログのフォーマットを変更したい場合は100台ではなく、1台での変更で済みます。

 

また、iRulesの柔軟性により自由にログのフォーマットを決められます。

以下の例ではApache web serverのフォーマットを使いますが、iRules定義により他のフォーマットに簡単に変更できます。なお、Trouble shootingやtuning, iRulesの動作確認などのためにiRules機能はよく使われていますが、このようにCentralized loggingとして使うケースもあります。以下でもiRulesのロギング機能についてご確認いただけます。

 

タイトル : iRuleによるCentralized logging 

メリット :
・サーバのロギング負荷の軽減
・ログ管理負荷の削減
・ログフォーマット変更への柔軟な対応

機能解説 :
HTTP requestがBIG-IPに来たタイミングで情報を取得し、その情報を一旦BIG-IPで保存します。次にサーバからのResponseが来たらその情報を使ってログを作成します。そのためにsetコマンドを使って、いくつかの変数を使って情報を保存し、セッションにかかる時間を計算することもできます([expr $http_response_time - $http_request_time])。

また、BIG-IP内部のログでは保存せずに、直接にログサーバへ送信することが可能です。
log 192.168.202.46 local0.info "$request_log_line

上記の例では、192.168.202.46はsyslogサーバのアドレスで、これをこのままiRuleに書くことで、ログが送られます。

設定概要 :
このRuleでApacheフォーマットをemulateすることでフォーマットを決定します。

Requestの時にClientのアドレスやHTTPに関する情報が取得されます。しかし、set request_log_lineの項目を変更、追加や削除することによりログのフォーマットを変えることができます。

iRule定義 :

when HTTP_REQUEST {
 set http_request_time [clock clicks -milliseconds]
 set request_log_line "[HTTP::request_num],[IP::remote_addr],[HTTP::method],
[HTTP::version],[HTTP::host],[HTTP::uri],[HTTP::header value Referer],[HTTP::header User-Agent],
[HTTP::cookie value JSESSIONID],[SSL::cipher name],[SSL::cipher version],[SSL::cipher bits]"
}
 
when HTTP_RESPONSE {
 set http_response_time [ clock clicks -milliseconds ]
 log 192.168.202.46 local0.info "$request_log_line,[HTTP::status],
[HTTP::payload length],[expr $http_response_time - $http_request_time]"
}