Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)


7.11.2 NIO HTTPサーバのアクセスログのカスタマイズ

NIO HTTPサーバでは,アプリケーション開発のサポート,運用時の性能解析,および障害発生時のトラブルシュートのために,アクセスログおよび性能解析トレースを出力します。これらのファイルは,ファイル面数やファイルサイズなどを変更できます。また,アクセスログでは,ログの出力形式をカスタマイズできます。

ここでは,NIO HTTPサーバのアクセスログの出力形式のカスタマイズについて,HTTPのアクセスログとWebSocketのアクセスログに分けて説明します。HTTPのアクセスログのファイル面数やファイルサイズなどの変更については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「3.3.9 NIO HTTPサーバのログ取得の設定」を参照してください。WebSocketのアクセスログのファイル面数やファイルサイズなどの変更については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「3.3.18 WebSocketコンテナのログ取得の設定」を参照してください。

〈この項の構成〉

(1) HTTPのアクセスログ

HTTPのアクセスログの出力形式のカスタマイズについて説明します。

(a) 設定方法

HTTPのアクセスログの出力形式は,簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に次のパラメタを指定します。

ejbserver.logger.access_log.nio_http.format

NIO HTTPサーバで扱うHTTPのアクセスログのフォーマットの形式を指定します。

簡易構築定義ファイル,および指定するパラメタの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「4.3 簡易構築定義ファイル」を参照してください。

(b) 設定例

HTTPのアクセスログの出力形式の設定例を次に示します。

:
<param>
  <param-name>ejbserver.logger.access_log.nio_http.format</param-name>
  <param-value>%a %A</param-value>
</param>
:

この設定例では,WebクライアントのIPアドレスとJ2EEサーバのIPアドレスが出力されます。

(c) 指定できるフォーマット引数

HTTPのアクセスログの出力形式を定義するときに指定する,アクセスログのフォーマットの引数を次の表に示します。

表7‒18 HTTPのアクセスログのフォーマットの引数の一覧

フォーマットの引数

出力内容

出力例

%a

WebクライアントのIPアドレス。

10.20.30.40

%A

J2EEサーバのIPアドレス。

10.20.30.100

%b

レスポンスボディの送信バイト数。

0 byteのときは「-」になる。

2048

%B

レスポンスボディの送信バイト数。

0byteのときは「0」になる。

1024

%h

Webクライアントのホスト名またはIPアドレス。

ホスト名が得られない場合はIPアドレスになる。

10.20.30.40

%H

リクエストプロトコル。

HTTP/1.1

%l

リモートログ名。

常に「-」になる※1

-

%m

リクエストメソッド

GET

%p

Webクライアントからのリクエストを受け付けたポート番号。

80

%q

クエリ文字列。

「?」から始まる。

クエリ文字列がない場合は空文字になる。

?id=100&page=15

%r

リクエストライン。

GET /index.html HTTP/1.0

%s

最終ステータスコード。

200

%S※2

クッキー名JSESSIONIDの値を出力する。

クッキー名JSESSIONIDの値がない場合は「-」になる。

00455AFE4DA4E7B7789F247B8FE5D605

%t

Webクライアントのリクエスト処理を開始した時刻を秒精度で表示。

[dd/MMM/YYYY:HH:mm:ss Z]

[18/Jan/2005:13:06:10 +0900]

%T

Webクライアントのリクエストの処理に要した時間(秒単位)。

2

%d

Webクライアントのリクエスト処理を開始した時刻をミリ秒精度で表示。

[dd/MMM/YYYY:HH:mm:ss.nnn Z](nnnはミリ秒)

[18/Jan/2005:13:06:10.152 +0900]

%D

Webクライアントのリクエストの処理に要した時間(ミリ秒単位)。

38

%u

ベーシック認証ユーザ名,フォーム認証ユーザ名。

認証ユーザ名がない場合は「-」になる。

user

%U

リクエストファイルパス。

/index.html

%v

J2EEサーバのローカルホスト名。

server

%{foo}i※3

リクエストヘッダfooの内容。

fooヘッダが存在しない場合は「-」になる。

%{Host}iの場合

www.example.com:8888

%{foo}c

Webクライアントが送信したCookie情報でCookieの名前がfooの内容を表示する。

Cookieの名前にfooがない場合は「-」になる。

%{MYSESSIONID}cの場合

00455AFE4DA4E7B7789F247B8FE5D605

%{foo}o※3

レスポンスヘッダfooの内容。

fooヘッダが存在しない場合は「-」になる。

%{Server}oの場合

CosminexusComponentContainer

%rootap

ルートアプリケーション情報。

10.100.10.100/1234/0x0000000000000001

%clport

Webクライアントからのリクエストを送信したポート番号。

888

%push

HTTP/2のプッシュリクエストの場合「PUSH」が出力される。そうでない場合「-」になる。

PUSH

注※1

リモートログ名は,RFC1413で規定されているIdentificationプロトコルによって得られるWebクライアント側のユーザ名です。

注※2

%Sで表示される値は,標準でHTTPセッションIDとして使用するクッキー名JSESSIONIDの値です。Servlet3.0以降でクッキー名JSESSIONIDの名前を変更した場合は,%{foo}cを使用します。

注※3

一度のHTTPリクエストまたはHTTPレスポンスで同じヘッダ名を複数回送信する場合があります。この場合,すべてのヘッダの内容を「,」(コンマ)区切りで出力します。

注意事項

フォーマットの引数の指定に誤りがある場合には,デフォルトフォーマットが使用されます。デフォルトフォーマットが使用される例を次に示します。

  • フォーマットの引数の一覧にない文字列(例:%Gなど)を指定した場合

  • リクエストヘッダの内容,レスポンスヘッダの内容,Cookie名で0文字(%{}iなど)を指定した場合

(d) デフォルトフォーマット

HTTPのアクセスログのデフォルトフォーマットを次に示します。

%h %{X-Forwarded-For}i %l %u %d %rootap "%r" %s %b %D %S %push

デフォルトフォーマットを用いた出力形式を次に示します。

Webクライアントのホスト名またはIPアドレス△X-Forwarded-Forヘッダ△リモートログ名△認証ユーザ名△Webクライアントのリクエスト処理を開始した時刻△ルートアプリケーション情報△”リクエストライン”△最終ステータスコード△HTTPヘッダを除く送信バイト数△Webクライアントのリクエストの処理に要した時間△HTTPセッションID△PUSHリクエスト

HTTPセッションIDのあとに改行されます。

(凡例)

△:半角スペース

デフォルトフォーマットを用いた場合の出力例を次に示します。

10.20.30.40 50.60.70.80 - user [18/Jan/2005:13:06:10.152 +0900] 10.100.10.100/1234/0x0000000000000001 "GET /index.html HTTP/1.0" 200 1024 38 00455AFE4DA4E7B7789F247B8FE5D605

(2) WebSocketのアクセスログ

WebSocketのアクセスログの出力形式のカスタマイズについて説明します。

(a) 設定方法

WebSocketのアクセスログの出力形式は,簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に次のパラメタを指定します。

ejbserver.logger.access_log.websocket.format

NIO HTTPサーバで扱うWebSocketのアクセスログのフォーマットの形式を指定します。

簡易構築定義ファイル,および指定するパラメタの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「4.3 簡易構築定義ファイル」を参照してください。

(b) 設定例

WebSocketのアクセスログの出力形式の設定例を次に示します。

:
<param>
  <param-name>ejbserver.logger.access_log.websocket.format</param-name>
  <param-value>%TS %IO %PAYLOADDATALEN</param-value>
</param>
:

この設定例では,WebSocketフレームの送受信時刻,送受信方向,ペイロードデータ長が出力されます。

(c) 指定できるフォーマット引数

WebSocketのアクセスログの出力形式を定義するときに指定する,アクセスログのフォーマットの引数を次の表に示します。

表7‒19 WebSocketのアクセスログのフォーマットの引数の一覧

フォーマットの引数

出力内容

出力例

%TS

WebSocketフレームの送受信時刻。

2001/01/01 01:01:01.111 +0900

%IO

WebSocketフレームの送受信方向。INまたはOUTが出力される。

IN:

サーバインスタンスがWebSocketフレームを受信したことを示す。

OUT:

サーバインスタンスがWebSocketフレームを送信したことを示す。

IN

%OPCODE

WebSocketフレームの種別。Text,Binary,Ping,Pong,またはCloseが出力される。

Text

%URI

リクエストURI。

/websocket_server/test001

%FIN

WebSocketフレームの終端を示す識別子。CONTまたはFINALが出力される。

CONT:

WebSocketフレームの継続。

FINAL:

WebSocketフレームの終端。

CONT

%PAYLOADDATALEN

ペイロードデータ長。

100

%ROOTAP

ルートアプリケーション情報。

10.100.10.100/1234/0x0000000000000001

%CLIENTAP

クライアントアプリケーション情報。

10.100.10.100/1234/0x0000000000000001

%CLOSEREASON

WebSocketコネクションが切断された理由。

NORMAL_CLOSURE:closereason specified by WebSocketClient001

%CLIENTADDR

WebクライアントのIPアドレスとポート番号。

10.20.30.40:55555

%SERVERADDR

J2EEサーバのIPアドレスとポート番号。

10.20.30.100:44444

%SESSIONID

WebSocketセッションID。

11111111-2222-3333-4444-555555555555

%MASK

WebSocketフレームの情報に設定されたMASKを表す。

MASK:

MASKされている。

NOMASK:

MASKされていない。

MASK

%MASKKEY

WebSocketフレームの情報をMASKするためのキー。

MASKしない場合は「-」になる。

EEEEEEEE

%ISEXTENDED

エンドポイントがメッセージの送受信に設定されたフレームを表す。

BASE:

基本フレームを使用している。

EXTENDED:

拡張フレームを使用している。

BASE

%RSV

拡張のネゴシエーション中にクライアントエンドポイントによって設定された予約ビットを表す。

RSV-000

%FRAMEMAINTYPE

WebSocketフレームがデータフレームかコントロールフレームかを指定する。

Data:

データフレームを使用する。

Control:

コントロールフレームを使用する。

Data

%PAYLOADDATA

ペイロードデータ。

データのサイズが65536文字を超える場合,最初と最後の32768文字だけを表示する。

バイナリの場合は常に「-」になる。

aaaaaa

%PAYLOADDATA(n)

メッセージの最初と最後のn文字分だけを表示する場合のペイロードデータ。

nは1〜32768の整数が指定できる。

バイナリの場合は常に「-」になる。

aaaaaaaaaa....aaaaaaaaaa

注※

%PAYLOADDATAと%PAYLOADDATA(n)はどちらか一方だけを指定できます。

注意事項

フォーマットの引数の指定に誤りがある場合には,デフォルトフォーマットが使用されます。デフォルトフォーマットが使用される例を次に示します。

  • フォーマットの引数の一覧にない文字列(例:%Gなど)を指定した場合

  • %PAYLOADDATA(n)のnに指定可能範囲外の文字列を指定した場合

  • %PAYLOADDATAと%PAYLOADDATA(n)を同時に指定した場合

(d) デフォルトフォーマット

WebSocketのアクセスログのデフォルトフォーマットを次に示します。

%TS %IO %OPCODE %ROOTAP %URI %FIN %PAYLOADDATALEN %CLIENTAP %CLOSEREASON

デフォルトフォーマットを用いた出力形式を次に示します。

WebSocketフレームの送受信時刻△WebSocketフレームの送受信方向△WebSocketフレームの種別△ルートアプリケーション情報△リクエストURI△WebSocketフレームの終端を示す識別子△ペイロードデータ長△クライアントアプリケーション情報△WebSocketコネクションが切断された理由

WebSocketコネクションが切断された理由のあとに改行されます。

(凡例)

△:半角スペース

デフォルトフォーマットを用いた場合の出力例を次に示します。

2020/01/01 01:01:01.111 +0900 IN Text 10.100.10.100/1234/0x0000000000000001  /websocket_server/test001 CONT 100 10.100.10.100/1234/0x0000000000000003 -