まえがき
はじめに
このページでは、BIG-IPでHTTPやHTTPSの、アクセスログを取るための方法について記載してます。
たとえば、BIG-IPからSyslogサーバに、こんな感じのログを出力できます。
Nov 12 13:21:34 bigip1 Virtual=/Common/test-vs PoolMember=10.0.0.10 Response: 203.0.113.10 - - [11/Nov/2017:20:21:34 -0800] "GET /index.html HTTP/1.1" 200 97 "-" "curl/7.48.0" "-"
Nov 12 13:21:36 bigip1 Virtual=/Common/test-vs PoolMember=10.0.0.11 Response: 203.0.113.10 - - [11/Nov/2017:20:21:36 -0800] "GET /hoge.html HTTP/1.1" 404 345 "-" "curl/7.48.0" "-"
かつてのBIG-IP
一般的には**「HTTPの負荷分散をしてるんだから、アクセスログを取るくらい簡単でしょ?」**と思われるかもしれませんが、実は、古いバージョンのBIG-IPでは、標準的には、ログを取る機能は備わっていません。そのため、BIG-IPでHTTPアクセスログを取るには、下記ページで紹介されているようなiRuleを利用する必要がありました。
DevCentral:HTTP通信のトラブルシューティングに役に立つiRule
しかもこのログはBIG-IPの内部ハードディスクに書き込まれるため、BIG-IP自身のパフォーマンスへの影響が大きく「あくまでトラブルシュート用」と注意しなければならないものでした。
最近のBIG-IP
最近になって、Request Logging Profile という機能が実装され、iRuleを使わずともHTTP アクセスログを取得できるようになりました。
また、**High Speed Logging(HSL)**によってBIG-IP内部にはログを保存せずに外部サーバにログを送信することで、利用してもパフォーマンスが下がらないようになっています。
このページでは、Request Logging Profileを使った、HTTPアクセスログ取得方法を紹介します。(HTTPSの場合も変わりありません。)
設定方法
構成
以下のようなシンプルな構成を例に、設定方法について説明します。
- Virtual Serverや、負荷分散用のPoolは、予め設定が完了しているものとします。
- BIG-IPが、Virtual Server(203.0.133.100:80)のアクセスログを、Syslog Server(10.0.0.13)へ送信することを目的とします。
設定の要素
(1) Syslog用Pool
ログの送信先となるSyslogサーバは、Poolとして登録する必要があります。
(2) Request Logging Profile
このプロファイルに、HTTPアクセスログのフォーマットや、送信先のサーバ(Pool)や、送信時のプロトコルなどを設定します。
(3) Virtual Server
HTTPアクセスログを取得したいVirtual Serverに、Request Logging Profileを適用します。
※ Virtual Serverの注意事項
- Request Logging Profileを適用するVirtual SereverのTypeはStanardであること。TypeがStandardではないVirtual Serverへは、Profileを適用できません。
- HTTPの情報を取得するには、HTTP Profileの適用も必要です。HTTPプロファイルなしでも適用はでき(てしまい)ますが、その場合、HTTPヘッダ内の情報がロギングされません。
設定手順
(1) Syslog用Poolの作成
Syslog用のPoolを作成し、Pool memberとしてSyslog Serverを登録します。
(tmos)# list ltm pool syslog-pool
ltm pool syslog-pool {
members {
10.0.0.13:514 {
address 10.0.0.13
}
}
}
(2) Request Logging Profileの作成
新規にRequest Logging Profileを作成します。Request Logging Profile内では、以下の設定箇所を変更します。
- Request Logging / Response Logging
- HTTPリクエストとHTTPレスポンスの、どちらのアクセスのログ取得を行うかの設定です。Response Loggingを使うと、HTTPリクエストの情報とレスポンスの情報が両方とも取得できます。
- Template
- アクセスログのフォーマットを指定します。空欄だとログが出力されません。フォーマットの詳細は後で記載しています。
- HSL Protocol
- ログサーバに送信する際のプロトコルです。TCPかUDPのどちらかを選択します。
- Pool Name
- ログを送信する宛先となるサーバをPoolで指定します。ここで先ほど作成したPoolを選択します。
(tmos)# list ltm profile request-log test-req-log
ltm profile request-log test-req-log {
app-service none
defaults-from request-log
response-log-pool syslog-pool
response-log-protocol mds-udp
response-log-template "$BIGIP_HOSTNAME Virtual=$VIRTUAL_NAME PoolMember=$SERVER_IP Response: $NCSA_COMBINED"
response-logging enabled
}
(3) Request Logging Profileの適用
Virtual Serverに、Request Logging Profileを適用します。
(tmos)# list ltm virtual test-vs
ltm virtual test-vs {
destination 203.0.113.100:http
ip-protocol tcp
mask 255.255.255.255
pool test-pool
profiles {
http { }
tcp { }
test-req-log { }
}
source 0.0.0.0/0
translate-address enabled
translate-port enabled
vs-index 19
}
これで、Virtual Serverにアクセスすれば、アクセスログが指定のSyslogサーバへ出力されます。
ログのフォーマット(Template)について
Request Logging ProfileのTemplate設定で、アクセスログのフォーマットを指定できます。デフォルト値というものはないので、きちんとフォーマットを決めなければなりません。
Apacheやnginxと同様、Templateには、アクセスを記録するための、様々な変数を使用できます。例えば「$CLIENT_IP」という変数で、クライアント(送信元)のIPアドレスが取得できます。HTTPリクエストの先頭行の情報(メソッド、URI、HTTPバージョン)を取得したい場合は「$HTTP_REQUEST」で取得できます。
BIG-IPで特徴的なものとしては、「VIRTUAL_NAME(Virtual Serverの名前)」、「VIRTUAL_IP(Virtual ServerのIPアドレス)」、「SERVER_IP(振り分け先Pool Memberのアドレス)」などがあります。
変数のリストは、下記マニュアルに載っていますので、そちらを参照してください。
Manual:External Monitoring of BIG-IP Systems: Implementations | Configuring Request Logging
ちなみに、いちいちTemplateを指定するのが面倒だ、という場合「$NCSA_COMMON」と指定すると、伝統的なNCSAのログフォーマットが設定されます。これは、Templateに次の一行を指定したことと同じになります。
"$CLIENT_IP - - $DATE_NCSA $HTTP_REQUEST $HTTP_STATCODE $RESPONSE_SIZE"
さらに「$NCSA_COMBINED」は、以下のフォーマットをまとめたものとなっています。
"$NCSA_COMMON $Referer ${User-agent} $Cookie"
免責事項
本ページの内容に誤り等があり、参考にされた方がなんらかの損害を被った場合、一切の責任は負いません。