カスタムログ形式

リモートログストリーミングの設定を使用する場合、Fastly のカスタムログ形式には2つのバージョンがあります。新規のログエンドポイントはデフォルトでバージョン2のログ形式となります。バージョン1のログエンドポイントをバージョン2のログ形式にアップグレードすることができます。また、連続性を考慮してバージョン2をバージョン1形式に見えるように作成することも可能です。下記のバージョン2のログ形式の主な利点についても説明しています。

バージョン2のログ形式

以下の表には Fastly のバージョン2のログ形式に関する詳細が記載されています。表に示されるように、すべての変数の先頭にパーセント記号 (%) を付ける必要があります。

書式説明
%%パーセント記号。
%aリクエストのクライアント IP アドレス。req.http.Fastly-Client-IP に相当します。
%Aローカル IP アドレス。server-ip に相当します。
%BHTTP ヘッダーを除く、レスポンスサイズ (バイト)resp.body_bytes_written に相当します。
%bHTTP ヘッダーを除く、レスポンスサイズ (バイト)Common Log Format (CLF) では、送信データがないときは「0」ではなく「"-"」となります。
%{Foobar}Cサーバーに送信されたリクエストの Cookie Foobar の内容
%Dリクエストを処理するのにかかった時間 (マイクロ秒)time.elapsed.usec に相当します。
%{FOOBAR}eサポートされていません。常に "-" を返します。
%fファイル名。Varnish にはファイル配信中の概念がないため、クエリ文字列が削除された場合、req.urlに相当します。
%hリモート IP アドレスreq.http.Fastly-Client-IP に相当します。
%Hリクエストのプロトコルreq.proto に相当します。
%{Foobar}iサーバーに送信されたリクエストヘッダー Foobar: の内容
%Iリクエストとヘッダーを含む受信バイト数。ゼロになることはありません。req.bytes_read に相当します。
%kこの接続で処理されたキープアライブリクエストの数。常に0を返します。
%lサポートされていません。常に"-"を返します。
%mリクエストメソッド。req.request に相当します。
%{Foobar}nサポートされていません。常に "-" を返します。
%{Foobar}oレスポンスの Foobar: ヘッダー行の内容
%Oヘッダーを含む送信バイト数。ゼロになることはありません。resp.bytes_written に相当します。
%pリクエストを処理するサーバーの正規のポート。常に 80 を返します。server.port に相当します。
%{format}pリクエストを処理するサーバーの正規のポート。有効な形式は canonicallocalremote です。HTTP リクエストの場合は 80、HTTPS リクエストの場合は 443を返します。
%Pサポートされていません。常に "-" を返します。
%{format}Pサポートされていません。常に"-"を返します。
%qクエリ文字列 (クエリ文字列が存在する場合は前に ? が追加され、存在しない場合は空文字列となります)req.url に相当します。
%rリクエストの最初の行
%Rサポートされていません。常に"-"を返します。
%sステータス。内部的にリダイレクトされたリクエストの場合、これは元のリクエストのステータスです。最終ステータスには %>s を使用します。resp.status に相当します。
%tリクエストが受信された時刻。標準の英語形式で表されます (01/Jan/1970:00:00:00 -0700 など)。最後の数字は GMT からのタイムゾーンオフセットを示します。
%{format}tformat で与えられた形式の時刻。strftime(3) 形式でなければなりません (ローカライズされている可能性があります)。書式が begin: (デフォルト) で始まる場合、リクエスト処理の開始時に時間が取得されます。end: で始まる場合は、ログエントリーが書き込まれた時間で、リクエスト処理の終了時刻に近くなります。strftime(3) でサポートされている形式に加えて、以下のフォーマットトークンもサポートされています。 sec (エポックからの秒数)、msec (エポックからのミリ秒数)、usec (エポックからのマイクロ秒数)、msec_frac (ミリ秒数部分)、usec_frac (マイクロ秒数部分)。time.start に相当します。
%Tリクエストを処理するのにかかった時間 (秒)。time.elapsed.sec に相当します。
%uサポートされていません。常に "-" を返します。
%Uリクエストの URL パス。クエリ文字列は含まれません。req.url.path に相当します。
%vリクエストのドメイン名。req.http.host に相当します。
%V%v と同じです。req.http.host に相当します。
%{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リモートログ名。常に "-" を返します。
%rHTTP 動詞とリクエストパス (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のログ形式へのアップグレード

警告

アップグレードは恒久的な変更です。バージョン2形式を使用してオブジェクトをログした場合、バージョン1にダウングレードすることはできません。

ログエンドポイントをバージョン2のログ形式にアップグレードするには、以下の手順に従ってください。

  1. Fastly コントロールパネルにログインします。
  2. Home ページから、適切なサービスを選択します。検索ボックスで ID、名称、ドメインによる検索が行えます。
  3. Edit configuration をクリックし、アクティブなバージョンをクローンするオプションを選択します。
  4. Logging をクリックします。

    the logging endpoints page with upgrade message

  5. 編集したいログエンドポイントの名前をクリックします。

    the edit logging endpoint page with upgrade message

  6. Convert to Log Format Version 2 をクリックします。

    the convert to log format version 2 window

  7. 出力形式を選択します。

    • Use compatible output を使用することを推奨します。この設定では、タイムスタンプの文字列は変更されませんが、ログの書式は変更されます。新しい形式は Apache のログ形式と互換性があります。
    • Maintain legacy output はバージョン2形式ですが、生成されるログ文字列は同じになります。つまり、%t%{now}V に、%r%{req.url}V に、%b%{resp.http.Content-Length}V となることを意味します。
  8. Select をクリックします。

  9. Update をクリックして、当該ログエンドポイントをバージョン2のログ形式にアップグレードします。

  10. Activate をクリックして設定への変更をデプロイします。

APIでアップグレードする

Fastly API を使用してログエンドポイントをアップグレードするには、アップグレードが必要なサービスのアクティブなバージョンをクローンしたバージョンか、ロックされていない非アクティブバージョンに対して、以下のコマンドを実行します。

$ 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/<logging endpoint>/<log name>' --data-binary '{"format_version":"2"}'

format_versionフィールドはオブジェクトごとのフィールドであることに留意してください。ある1つのログオブジェクトで変更しても、他のオブジェクトには影響ありません

例えば、「GCS Test」という名前の Google Cloud Storage エンドポイントをアップグレードする場合、curl コマンドは以下のようになります。

$ 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"}'
注意

log nameには、URL エンコードが必要なスペースが含まれています。(%20 のスペース)。

ログバージョンの判別

ご利用のサービスで現在使用されているログバージョンを判別するには、以下の curl コマンドを実行します。

$ curl -X GET -H 'Fastly-Key: FASTLY_API_TOKEN' 'https://api.fastly.com/service/<your Fastly service ID>/version/<version number>/logging/<logging endpoint>/<log name>'

curl コマンドによって、当該バージョンの設定内容の詳細が JSON 形式で出力されます。例:

1{
2 "address": "logs.papertrailapp.com",
3 "created_at": "2016-04-01T15:37:30+00:00",
4 "deleted_at": null,
5 "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\"",
6 "format_version": "2",
7 "hostname": "logs.papertrailapp.com",
8 "name": "fastly",
9 "port": "11111",
10 "public_key": null,
11 "response_condition": "LOG /",
12 "service_id": "1a2b3c4d5e6f7g8h9j0k",
13 "updated_at": "2016-04-01T19:47:47+00:00",
14 "version": "123"
15}

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のログ形式と同じ出力を実現することができます。この場合、ログディレクティブに VCL を含むことが可能です。

%h %l %u %{now}V %{req.method}V %{req.url}V %>s

また、バージョン1で %b ディレクティブを使用している場合、代わりに以下のディレクティブを使用できます。

%{resp.http.Content-Length}V

翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。