はじめに:
HTTP通信のトラブルシューティングに役立つiRuleを紹介します。
BIG-IPとClient間の通信状況の監視や、iRulesが予想通り動くかを確認したい場合などは、このiRuleによりHTTP通信のヘッダ情報を取得し、分析しやすい形に変換してログとして出力します。そうすることでHTTP通信の状況が一目でよく分かります。

タイトル:
HTTP通信のトラブルシューティングに役に立つiRule 

メリット:

トラブルシューティング時にHTTP通信の状況がすぐに把握でき、素早い問題解決につながる。

機能解説:
このiRuleにより、HTTP通信のトラブルシューティング時、HTTP通信のヘッダがキャプチャされ、Request/ Responseという形で/var/log/ltmに吐き出されます。クライアントのリクエスト(request)がBIG-IPにあった場合、下記のiRuleコマンドでクライアントのIPアドレス、ポート番号及び宛先のホストとuriを取得します。
set LogString "Client [IP::client_addr]:[TCP::client_port] -> [HTTP::host][HTTP::uri]"
foreachループで各リクエストのヘッダー情報を加工し、見やすい形で/var/log/ltmに出力します。
また、クライアントへのレスポンスに関してもforeachループで、ヘッダー情報を取得して、最後にその情報を/var/log/ltmに出します。

設定概要:
このiRuleをトラブルシューティングしたいvirtual serverに設定/適用します。
/var/log/ltmにたくさんのログが出力されるため、トラブルシューティング時のみの使用を推奨します。

【iRule定義】

when HTTP_REQUEST {
   set LogString "Client [IP::client_addr]:[TCP::client_port] -> [HTTP::host][HTTP::uri]"
   log local0. "============================================="
   log local0. "$LogString (request)"
   foreach aHeader [HTTP::header names] {
      log local0. "$aHeader: [HTTP::header value $aHeader]"
   }
   log local0. "============================================="
}
when HTTP_RESPONSE {
   log local0. "============================================="
   log local0. "$LogString (response) - status: [HTTP::status]"
   foreach aHeader [HTTP::header names] {
      log local0. "$aHeader: [HTTP::header value $aHeader]"
   }
   log local0. "============================================="
}

 【/var/log/ltmのログの出力例】 

Rule log_http_headers_rule <HTTP_REQUEST>: =============================================
Rule log_http_headers_rule <HTTP_REQUEST>: Client 192.168.99.32:2950 -> webmail.example.com/exchange/Aaron/Inbox/?Cmd=contents (request)
Rule log_http_headers_rule <HTTP_REQUEST>: Host: webmail
Rule log_http_headers_rule <HTTP_REQUEST>: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9)
Rule log_http_headers_rule <HTTP_REQUEST>: Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,im
Rule log_http_headers_rule <HTTP_REQUEST>: Accept-Language: en-us,en;q=0.5
Rule log_http_headers_rule <HTTP_REQUEST>: Accept-Encoding: gzip,deflate
Rule log_http_headers_rule <HTTP_REQUEST>: Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Rule log_http_headers_rule <HTTP_REQUEST>: Keep-Alive: 300
Rule log_http_headers_rule <HTTP_REQUEST>: Connection: keep-alive
Rule log_http_headers_rule <HTTP_REQUEST>: Referer: https://webmail.example.com/exchange/
Rule log_http_headers_rule <HTTP_REQUEST>: X-Forwarded-For: 192.168.99.32
Rule log_http_headers_rule <HTTP_REQUEST>: Front-End-Https: On
Rule log_http_headers_rule <HTTP_REQUEST>: =============================================
Rule log_http_headers_rule <HTTP_RESPONSE>: =============================================
Rule log_http_headers_rule <HTTP_RESPONSE>: Client 192.168.99.32:2950 -> webmail.example.com/exchange/Aaron/Inbox/?Cmd=contents (response) - status: 200
Rule log_http_headers_rule <HTTP_RESPONSE>: Date: Tue, 06 Nov 2007 16:30:32 GMT
Rule log_http_headers_rule <HTTP_RESPONSE>: Server: Microsoft-IIS/6.0
Rule log_http_headers_rule <HTTP_RESPONSE>: X-Powered-By: ASP.NET
Rule log_http_headers_rule <HTTP_RESPONSE>: Content-Type: text/html
Rule log_http_headers_rule <HTTP_RESPONSE>: Content-Length: 55446
Rule log_http_headers_rule <HTTP_RESPONSE>: MS-WebStorage: 6.5.7638
Rule log_http_headers_rule <HTTP_RESPONSE>: Cache-Control: no-cache
Rule log_http_headers_rule <HTTP_RESPONSE>: =============================================

※F5ネットワークスジャパンでは、サンプルコードについて検証を実施していますが、お客様の使用環境における動作を保証するものではありません。実際の使用にあたっては、必ず事前にテストを実施することを推奨します。