10
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BIG-IPでHTTPのアクセスログを取得する

Last updated at Posted at 2017-11-12

まえがき

はじめに

このページでは、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の場合も変わりありません。)

設定方法

構成

以下のようなシンプルな構成を例に、設定方法について説明します。

request_logging_1(1).png

  • Virtual Serverや、負荷分散用のPoolは、予め設定が完了しているものとします。
  • BIG-IPが、Virtual Server(203.0.133.100:80)のアクセスログを、Syslog Server(10.0.0.13)へ送信することを目的とします。

設定の要素

(1) Syslog用Pool

ログの送信先となるSyslogサーバは、Poolとして登録する必要があります。

request_logging_2.png

(2) Request Logging Profile

このプロファイルに、HTTPアクセスログのフォーマットや、送信先のサーバ(Pool)や、送信時のプロトコルなどを設定します。

request_logging_3.png

(3) Virtual Server

HTTPアクセスログを取得したいVirtual Serverに、Request Logging Profileを適用します。

request_logging_4.png

※ 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"

免責事項

本ページの内容に誤り等があり、参考にされた方がなんらかの損害を被った場合、一切の責任は負いません。

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?