カスタムログ形式
Last updated May 08, 2019
Fastly のカスタムログ形式は2つのバージョンがあります。新規のログエンドポイントはデフォルトでバージョン2のログ形式となります。バージョン1のログエンドポイントをバージョン2のログ形式にアップグレードすることができます。また、継続性を考慮してバージョン1形式に見えるバージョン2の作成を行うことも可能です。下記のバージョン2のログ形式の主な利点についても説明しています。
バージョン2のログ形式
この表は Fastly のバージョン2のログ形式についての詳細を記載しています。表に示すように、すべての変数の先頭にパーセント記号( %
)を付ける必要があります。
書式 | 説明 |
---|---|
%% |
パーセント記号。 |
%a |
リクエストのクライアント IP アドレス。 |
%A |
ローカル IP アドレス。 |
%B |
HTTP ヘッダーを除く、レスポンスサイズ(バイト)。 |
%b |
HTTP ヘッダーを除く、レスポンスサイズ(バイト)。Common Log Format(CLF)では、送信データがないときは「0」ではなく「 "-" 」となります。 |
%{Foobar}C |
サーバに送信されたリクエストのCookie Foobar の内容。 |
%D |
リクエストを処理するのにかかった時間(マイクロ秒)。 |
%{FOOBAR}e |
サポートしておりません。常に "-" を返します。 |
%f |
ファイル名。 |
%h |
リモート IP アドレス。 |
%H |
リクエストのプロトコル。 |
%{Foobar}i |
サーバに送信されたリクエストヘッダー Foobar の内容。 |
%I |
リクエストとヘッダーを含む受信バイト数。ゼロになることはありません。 |
%k |
この接続で処理されたキープアライブリクエストの数。常に0 を返します。 |
%l |
サポートしておりません。常に "-" を返します。 |
%m |
リクエストメソッド。 |
%{Foobar}n |
サポートしておりません。常に "-" を返します。 |
%{Foobar}o |
レスポンスの Foobar: ヘッダ行の内容。 |
%O |
ヘッダーを含む送信バイト数。ゼロになることはありません。 |
%p |
リクエストを処理するサーバーの正規のポート。常に 80 を返します。 |
%{format}p |
リクエストを処理するサーバーの正規のポート。format に使えるのは canonical 、 local 、 remote です。HTTP リクエストの場合は 80 、HTTPS リクエストの場合は 443 を返します。 |
%P |
サポートしておりません。常に "-" を返します。 |
%{format}P |
サポートしておりません。常に "-" を返します。 |
%q |
クエリ文字列( 存在する場合は前に ? が追加されます。存在しない場合は空文字列となります)。 |
%r |
リクエストの最初の行。 |
%R |
サポートしておりません。常に "-" を返します。 |
%s |
ステータス。内部的にリダイレクトされたリクエストの場合、これは元のリクエストのステータスです。最終ステータスは %>s を使います。 |
%t |
リクエストが受信された時刻。標準の英語形式(例 01/Jan/1970:00:00:00 -0700 )。最後の数字は GMT からのタイムゾーンオフセットを示します。 |
%{format}t |
format で与えられた形式の時刻。strftime(3) 形式でなければいけません(ローカライズされている可能性あり)。書式が begin: (デフォルト)で始まる場合、リクエスト処理の開始時に時間が取得されます。end: で始まっている場合には、ログエントリーが書き込まれた時刻で、リクエスト処理の終了時刻に近くなります。strftime(3) でサポートされている形式に加えて、 以下の形式もサポートされています。sec (Unix エポックからの秒数)、 msec (Unix エポックからのミリ秒数)、 usec (Unix エポックからのマイクロ秒数)、msec_frac (ミリ秒数部分)、usec_frac (マイクロ秒数部分)。 |
%T |
リクエストを処理するのにかかった時間(秒)。 |
%u |
サポートしておりません。常に "-" を返します。 |
%U |
リクエストの URL パス。クエリ文字列は含まれません。 |
%v |
リクエストのドメイン名。%{req.http.host}V と同じになります。 |
%V |
%v と同じです。 |
%{vcl}V |
VCL 変数は引用符なしでインクルードします。VCL 変数をログに書き込むために使用できます(例 :%{client.geo.country_code}V , %{tls.client.cipher}V )。この %- のディレクティブは Fastly の拡張機能であり、Apache では存在しません。 |
%X |
応答が完了したときの接続ステータス。常に + (レスポンスが送信された後に接続が維持される) を設定します。 |
バージョン1のログ形式
この表は Fastly のバージョン1のログ形式についての詳細を記載しています。表に示すように、すべての変数の先頭にパーセント記号(%
)を付ける必要があります。
書式 | 説明 |
---|---|
%b |
レスポンスサイズ。実際にレスポンスの長さをチェックするのではなく、 Content-Length ヘッダを使って計算されます(したがって、間違っている可能性があります)。 |
%h |
リモート IP アドレス。 |
%l |
リモートログ名。常に "-" を返します。 |
%r |
HTTP 動詞とリクエストパス(例えば、 GET / index.html )。Apache およびバージョン2のログ形式とは異なり、プロトコルのバージョンは含まれません。 |
%>s |
最後のリクエストのステータス。 |
%t |
リクエストを受信した時刻。Unixの ctime 形式(例:Thu, 01 Jan 1970 00:00:00 GMT )で、Apacheの標準英語フォーマットではありません(例:01/Jan/1970:00:00:00 -0700 )。 |
%u |
常に "-" を返します。 |
バージョン2のログ形式へのアップグレード
警告: アップグレードは恒久的な変更です。version 2 formatting を実施したログオブジェクトは、バージョン1にダウングレードすることはできません。
ログエンドポイントをバージョン2ログ形式にアップグレードするには、次の手順に従ってください。
- Fastly コントロールパネルにログインし、Configure のリンクをクリックします。
- サービスメニューから設定対象のサービスを選択します。
- Edit configuration ボタンをクリックし、Clone active を選択すると設定画面が開きます。
-
Logging リンクをクリックします。Logging endpoints 設定画面を開きます。バージョン1のログ形式を使用するログエンドポイントがある場合は、それらが更新可能であることを示すメッセージが表示されます。
-
ログエンドポイントの名前をクリックして編集します。Edit this endpoint ページが表示されます。
-
Convert to Log Format Version 2 ボタンをクリックします。Convert to log format version 2 ページが表示されます。
- 出力形式を選択する:
- Use compatible output を使用することを推奨します。この設定では、タイムスタンプの文字列は変更されませんが、ログの書式は変更されます。新しい形式は Apache のログ形式と互換性があります。
- Maintain legacy output はバージョン2形式ですが、生成されるログ文字列は同じになります。これは、
%t
が%{now}V
に、%r
が%{req.url}V
に、%b
は%{resp.http.Content-Lenght}V
となることを意味します。
- Select ボタンをクリックします。Edit this endpoint ページが表示されます。
- Update ボタンをクリックして、 該当ログエンドポイントをバージョン2ログ形式にアップグレードします。
- Activate ボタンをクリックしてサービスをデプロイします。
APIでアップグレードする
Fastly API を使用してログエンドポイントをアップグレードするには、アップグレードが必要なサービスのアクティブなバージョンをクローンしたバージョンか、ロックされていない非アクティブバージョンに対して、次のコマンドを実行します:
1
curl -X PUT -H 'Fastly-Key: FASTLY_API_TOKEN' -H 'Content-Type: application/json' 'https://api.fastly.com/service/<your Fastly service ID>/version/<version number>/logging/<log type>/<log name>' --data-binary '{"format_version":"2"}'
ここで log type
はアップグレードするエンドポイントのタイプです:
cloudfiles
ftp
heroku
logentries
loggly
logshuttle
openstack
papertrail
s3
scalyr
sumologic
syslog
format_version
フィールドはオブジェクトごとのフィールドであることに注意してください。ある1つのログオブジェクトで変更しても、他のオブジェクトには影響ありません。たとえば、Google Cloud Storage エンドポイントをアップグレードするには、エンドポイントの名前が「GCS Test」の場合、cURLコマンドは次のようになります。
1
curl -X PUT -H 'Fastly-Key: FASTLY_API_TOKEN' -H 'Content-Type: application/json' 'https://api.fastly.com/service/SU1Z0isxPaozGVKXdv0eY/version/1/logging/gcs/GCS%20Test' --data-binary '{"format_version":"2"}'
注意: ログ名 GCS Test
は URLエンコード する必要があり、スペースを %20
としています。
ログバージョンの判別
サービスが現在使用しているログバージョンを判別するには、次の cURL コマンドを実行します。
1
curl -X GET -H 'Fastly-Key: FASTLY_API_TOKEN' 'https://api.fastly.com/service/<your Fastly service ID>/version/<version number>/logging/<log type>/<log name>'
log type
は ftp
、 heroku
、logentries
、 loggly
、 logshuttle
、 papertrail
、 s3
、 scalyr
、 sumologic
、 syslog
です。cURL コマンドによって、該当バージョンの設定内容の詳細が JSON 形式で出力されます。例えば:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"address": "logs.papertrailapp.com",
"created_at": "2016-04-01T15:37:30+00:00",
"deleted_at": null,
"format": "time.start.msec time.to_first_byte time.elapsed req.body_bytes_read req.bytes_read resp.http.content-length server.region client.ip %>s \"req.method req.url req.proto\" \"req.http.referer\" \"req.http.user-agent\"",
"format_version": "2",
"hostname": "logs.papertrailapp.com",
"name": "fastly",
"port": "11111",
"public_key": null,
"response_condition": "LOG /",
"service_id": "1a2b3c4d5e6f7g8h9j0k",
"updated_at": "2016-04-01T19:47:47+00:00",
"version": "123"
}
format_version
フィールドは、使用されているログ形式に応じて 1
または 2
のいずれかが表示されます。
バージョン2ログ形式の利点
バージョン2ログ形式を使用する主な利点は、次のとおりです。
- ログは
vcl_deliver
ではなくvcl_log
で生成され、vcl_log
はオブジェクトがブラウザに渡された後に実行されるので、さまざまなサイズ変数を正確に設定することができます。 %t
ディレクティブは Apache ログ形式と互換性があります。バージョン1では、非標準の時刻形式を使用していました。%r
"first line of request" ディレクティブは、Apache ログ形式と互換性があります。バージョン1では、プロトコルを残していました。- HTTP ヘッダーを除いたレスポンスサイズを表す
%b
ディレクティブを使用することにより、より正確な情報が取得できます。バージョン1では、オリジンサーバから送られる Content-Length を使用しましたが、これは不正確な場合があります(特に ESI を利用している場合)。 - 意味あるすべての Apache ログディレクティブを追加しました。バージョン1では、より小さなサブセットを使用していました。
バージョン2のログをバージョン1のように表示する
バージョン1のデフォルトのログ形式は次のとおりです。
%h %l %u %t %r %>s
バージョン2のほとんどのディレクティブとはまったく同じです - %t
と %r
だけが異なっています。バージョン2のログ形式にアップグレードした後、新しい `%{…}V' を使ってバージョン1のログと同じ出力を実現することができます。それは次のようなログディレクティブになります。
%h %l %u %{now}V %{req.method}V %{req.url}V %>s
さらに、バージョン1で %b
ディレクティブを使用している場合、代わりにこのディレクティブを使用することができます:
%{resp.http.Content-Length}V