FileLog および WinLog の両方のコレクタに共通ログ フォーマット (CLF) Apache パーサを構成できます。

共通ログ フォーマット (Apache) パーサ

デフォルトの CLF パーサでは、以下のフィールドの順序と名前が定義されています。

host ident authuser datetime request statuscode bytes

パーサ名:clf

CLF パーサ固有のオプションは、format です。

format オプション

format オプションは、Apache ログを生成するのに使用するフォーマットを指定します。このオプションは必須ではありません。

フォーマットが指定されていない場合、以下のデフォルトの共通ログ フォーマットが使用されます。

%h %l %u %t \"%r\" %s %b

CLF パーサ フォーマットの文字列は正規表現の式を受け付けません。たとえば、式 \s+ ではなくスペースを指定します。

他のログ フォーマットを解析するには、そのフォーマットをエージェントの構成で指定します。解析されたフィールドはサーバ側に以下の名前で表示されます。

注: 変数が必要な場合に、構成で {VARNAME} が提供されていないと、フィールドは無視されます。
フィールド
'%a': "remote_ip"
'%A': "local_ip"
'%B', '%b': "response_size"
'%C': フォーマットで指定された変数の名前に依存します
'%c': フォーマットで指定された変数の名前に依存します
'%D': "request_time_mcs"
'%E': "error_status"
'%e': フォーマットで指定された変数の名前に依存します
'%F', '%f': "file_name"
'%h': "remote_host"
'%H': "request_protocol"
'%i': フォーマットで指定された変数の名前に依存します
'%k': "keepalive_request_count"
'%l': "remote_log_name"
'%L' "request_log_id"
'%M': "log_message"(この指定子に到達すると、パーサは入力ログの解析を停止します)
'%m': "request_method"
'%n': フォーマットで指定された変数の名前に依存します
'%o': フォーマットで指定された変数の名前に依存します
'%p': "server_port"

追加のフォーマットが次の指定子と使用できます:%{format}p。サポートされているフォーマットは "canonical"、"local"、または "remote" です。"canonical" フォーマットが使用されると、フィールド名は "server_port" のままです。"local" フォーマットが使用されるとフィールド名は "local_server_port" となり、"remote" フォーマットが使用されるとフィールド名は "remote_server_port" となります。

'%P': "process_id"

追加のフォーマットが次の指定子と使用できます:%{format}P。サポートされているフォーマットは "pid"、"tid"、および "hextid" です。"pid" がフォーマットとして使用されると、フィールド名は "process_id" となります。"tid" および "hextid" フォーマットは "thread_id" という名前のフィールドを生成します

'%q': "query_string"
'%r': "request"
'%R': "response_handler"
'%s': "status_code" は、要求の最終ステータスを生成します。
'%t':

"timestamp" は取り込みでイベント タイムスタンプとして機能し、タイムスタンプ パーサを確認します。タイムスタンプ自動検出をオーバーライドするには、日付と時刻のフォーマットを波括弧で指定できます:%{%Y-%m-%d %H:%M:%S}t。詳細については、「タイムスタンプ パーサ」を参照してください。

CLF パーサのタイムスタンプ フォーマットは "begin:" または "end:" プリフィックスで開始できます。フォーマットが begin:(デフォルト)で始まる場合、時刻は要求処理の始めに取得されます。end: で始まる場合、要求処理の終了に近い、ログ エントリが書き込まれた時刻になります。たとえば、%h %l %u [%{begin:%d/%b/%Y %T}t.%{msec_frac}t] \"%r\" %>s %b のようなフォーマットが CLF パーサでサポートされています。

次のフォーマット トークンも CLF パーサのタイムスタンプ フォーマット指定子でサポートされています。
sec
Epoch からの秒数。これは、タイムスタンプ パーサの %s 指定子に相当します。
msec
Epoch からのミリ秒数。
usec
Epoch からのマイクロ秒数。
msec_frac
ミリ秒の割合(タイムスタンプ パーサの %f 指定子に相当します)
musec
マイクロ秒の割合(タイムスタンプ パーサの %f 指定子に相当します)
タイムスタンプがフォーマット トークンで示されているログを解析するには、次のフォーマットを構成で使用できます。
format=%h %l %u %{sec}t \"%r\" %s %b
format=%h %l %u %{msec}t \"%r\" %s %b
format=%h %l %u %{usec}t \"%r\" %s %b

これらのトークンは同じフォーマット文字列で相互に組み合わせることも、タイムスタンプ パーサ フォーマットと組み合わせることもできません。代わりに複数の %{format}t トークンが使用可能です。たとえば、ミリ秒を含むタイムスタンプを使用するには、タイムスタンプ パーサの %f 指定子を使用する以外に、次のタイムスタンプの組み合わせを使用できます: %{%d/%b/%Y %T}t.%{msec_frac}t

'%T': "request_time_sec"
'%u': "remote_auth_user"
'%U': "requested_url"
'%v': "server_name"
'%V': "self_referential_server_name"
'%X': "connection_status" は、フォーマットで指定された変数の名前に依存します
'%x': フォーマットで指定された変数の名前に依存します
'%I': "received_bytes"
'%O': "sent_bytes"
'%S': "transferred_size"

たとえば、CLF パーサを使用して winlog または filelog ソースのいずれかから収集したログを解析する場合には、以下の構成を指定します。

[filelog|clflogs]
directory=D:\Logs
include=*.txt
parser=myclf

[parser|myclf]
debug=yes ;Note: use this option only while debugging and set it to ‘no’ when used in production.
base_parser=clf
format=%h %l %u %b %t \"%r\" %s

この構成を使用すると、clflogs ソースから収集されたログ(directory=D:\Logs ディレクトリなど)は myclf によって解析されます。myclf パーサは、構成に記述されているフォーマットを使用して生成されたログのみを解析します。

パーサに対する debug のデフォルト値は debug=no です。

CLF を使用して生成されたログの解析

CLF を使用して生成されたログを解析するには、対応するフォーマットを構成で定義する必要があります。次に例を示します。

format=%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User_Agent}i\"

指定子 %{Referer}i および %{User_Agent}i を使用する、空でないフィールドは、vRealize Log Insight サーバにそれぞれ referer および user_agent という名前で表示されます。

タイムスタンプ パーサと CLF パーサとの統合

Apache ログはカスタム時刻フォーマットで解析できます。

カスタム時刻フォーマットのあるアクセス ログは以下のとおりです。

format = %h %l %u %{%a, %d %b %Y %H:%M:%S}t \"%r\" %>s %b

カスタム時刻フォーマットが指定されていない場合、CLF パーサは自動タイムスタンプ パーサを実行して、自動的に時刻フォーマットを減算することを試みます。指定されている場合、カスタム時刻フォーマットが使用されます。

エラー ログでサポートされているカスタム時刻フォーマットでサポートされているものは以下のとおりです。

カスタム時刻フォーマット 説明 構成フォーマット
%{u}t マイクロ秒を含む現在時刻 format=[%{u}t] [%l] [pid %P] [client %a] %M
%{cu}t マイクロ秒を含むコンパクトな ISO 8601 フォーマットの現在時刻 format=[%{cu}t] [%l] [pid %P] [client %a] %M

サポートされているタイムスタンプ指定子の完全なリストについては、タイムスタンプ パーサを参照してください。

Windows 用の Apache デフォルト アクセス ログの構成

この例では、Windows 用の Apache v2.4 アクセス ログ構成のフォーマット方法を示します。

;ACCESS LOG
;127.0.0.1 - - [13/May/2015:14:44:05 +0400] "GET /xampp/navi.php HTTP/1.1" 200 4023 "http://localhost/xampp/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0"
;format=%h %l %u %{%d/%b/%Y:%H:%M:%S %z}t \"%r\" %>s %b \"%{Referer}i\" \"%{User_agent}i\"
 
; Section to collect Apache ACCESS logs
[filelog|clflogs-access]
    directory=C:\xampp\apache\logs
    include=acc*
    parser=clfparser_apache_access
    enabled=yes

;Parser to parse Apache ACCESS logs
[parser|clfparser_apache_access]
    debug=yes
    base_parser=clf
    format=%h %l %u %{%d/%b/%Y:%H:%M:%S %z}t \"%r\" %>s %b \"%{Referer}i\" \"%{User_agent}i\"
次の手順を実行して、アクセス ログ フォーマットを定義します。
  1. アクセス ログ フォーマット (httpd.conf) に対応するように Apache を構成します。
     LogFormat "%h %l %u %{%d-%b-%Y:%H:%M:%S}t \"%r\" %a %A %e %k %l %L %m %n %T %v %V %>s %b \"%{Referer}i\" \"%{User_Agent}i\"" combined
    
  2. CLF パーサ構成を定義します。
;ACCESS LOG
;127.0.0.1 unknown - 21-May-2015:13:59:35 "GET /xampp/navi.php HTTP/1.1" 127.0.0.1 127.0.0.1 - 0 unknown - GET - 1 localhost localhost 200 4023 "http://localhost/xampp/" "-"
[filelog|clflogs-access]
    directory=C:\xampp\apache\logs
    include=acc*;_myAcc*
    parser=clfparser_apache_access
    enabled=yes
; Parser to parse Apache ACCESS logs
[parser|clfparser_apache_access]
   debug=yes
   base_parser=clf
   format=%h %l %u %{%d-%b-%Y:%H:%M:%S}t \"%r\" %a %A %e %k %l %L %m %n %T %v %V %>s %b \"%{Referer}i\" \"%{User_Agent}i\"
CLF パーサは以下を返します。
remote_host=127.0.0.1
timestamp=2015-05-13T10:44:05
request=GET /xampp/navi.php HTTP/1.1
status_code=200
response_size=4023
referer=http://localhost/xampp/
user_agent=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0

この例では、Windows 用の Apache v2.4 エラー ログの構成のフォーマット方法を示します。

;ERROR LOG
;[Wed May 13 14:37:17.042371 2015] [mpm_winnt:notice] [pid 4488:tid 272] AH00354: Child: Starting 150 worker threads.
;[Wed May 13 14:37:27.042371 2015] [mpm_winnt:notice] [pid 5288] AH00418: Parent: Created child process 3480
;format=[%{%a %b %d %H:%M:%S%f %Y}t] [%m:%{severity}i] [pid %P:tid %{thread_id}i] %E: %M
;format=[%{%a %b %d %H:%M:%S%f %Y}t] [%m:%{severity}i] [pid %P] %E: %M 
 
; Section to collect Apache ERROR logs
[filelog|clflogs-error]
    directory=C:\xampp\apache\logs
    include=err*
    parser=clfparser_apache_error
    enabled=yes
 
;Parser to parse Apache ERROR logs
[parser|clfparser_apache_error]
    debug=yes
    base_parser=clf
    format=[%{%a %b %d %H:%M:%S%f %Y}t] [%m:%{severity}i] [pid %P:tid %{thread_id}i] %E: %M
    next_parser=clfparser_apache_error2
 
;Parser to parse Apache ERROR logs
[parser|clfparser_apache_error2]
    debug=yes
    base_parser=clf
    format=[%{%a %b %d %H:%M:%S%f %Y}t] [%m:%{severity}i] [pid %P] %E: %M
注: 提供された名前は、連結されたログ フォーマットに由来しています。Apache のエラー ログは、Apache エラー ログ フォーマットではなく、上記のフォーマット キーを使用しても記述されます。
次の手順を実行して、エラー ログ フォーマットを定義します。
  1. エラー ログ フォーマット (httpd.conf) に対応するように Apache を構成します。
     LogFormat "%h %l %u %{%d-%b-%Y:%H:%M:%S}t \"%r\" %a %A %e %k %l %L %m %n %T %v %V %>s %b \"%{Referer}i\" \"%{User_Agent}i\"" combined
    
  2. CLF パーサ構成を定義します。
;Parser to parse Apache ERROR logs
[parser|clfparser_apache_error]
   debug=yes
   base_parser=clf
   format=[%{%a %b %d %H:%M:%S%f %Y}t] [%m:%{severity}i] [pid %P] %E: %M
   next_parser=clfparser_apache_error2

;Parser to parse Apache ERROR logs
[parser|clfparser_apache_error2]
   debug=yes
   base_parser=clf
   format=[%{%a %b %d %H:%M:%S%f %Y}t] [%m:%{severity}i] [pid %P:tid %{thread_id}i] %E: %M

ログ エントリ:

[Wed May 13 14:37:17.042371 2015] [mpm_winnt:notice] [pid 4488:tid 272] AH00354: Child: Starting 150 worker threads.
CLF パーサはログ エントリ用の次のフィールドを返します(+0400 のタイムゾーンでパーサを使用している場合)。
timestamp=2015-05-13T10:37:17.042371
request_method=mpm_winnt
severity=notice
process_id=4488
thread_id=272
error_status=AH00354
log_message=Child: Starting 150 worker threads.

ログ エントリ:

[Wed May 13 14:37:27.042371 2015] [mpm_winnt:notice] [pid 5288] AH00418: Parent: Created child process 3480
CLF パーサはログ エントリ用の次のフィールドを返します(+0400 のタイムゾーンでパーサを使用している場合)。
timestamp=2015-05-13T10:37:27.042371
request_method=mpm_winnt
severity=notice
process_id=5288
error_status=AH00418
log_message=Parent: Created child process 3480