有用なログ形式

異なるシステムでは、時間の経過とともに異なるログ形式が標準化されています。Fastly では、可能な限りログ機能をカスタマイズでき、お客様の既存のインフラと連携できるべきであると考えています。このガイドでは、Apache のログモジュールに記載されているログ形式を実装するために使用できる、より複雑な例とカスタムログ文字列 (JSON、キー/値、CSV、URL エンコードなど) について詳しくご説明します。

注意

Fastly のカスタムログ形式には2つのバージョンがあります。新しいログエンドポイントを作成する際にデフォルトで使用されるバージョン2のログ形式では、Apache のログディレクティブとの互換性が向上しています。

重要

ストリームログに含める予定のデータに対する設定とエンドポイントの決定を行う際には、セキュリティ、プライバシー、およびコンプライアンスのそれぞれの要件を必ず考慮するようにしてください。

ヒント

任意の Varnish 変数や Fastly の VCL への拡張機能をログすることができます。ログに有用な変数のガイドをご覧ください。

Common Log Format (CLF)

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

これは、多くのログプロバイダーがデフォルトで使用しています。

仮想ホスト情報を備えた Common Log Format

%v %h %l %u %t "%r" %>s %b

NCSA の拡張/統合ログ形式

%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i"

リファラーログ形式

%{Referer}i -> %U

エージェント (ブラウザ) ログ形式

%{User-agent}i

Loggly 向けのカスタムタグまたは他のプロバイダー向けの RFC5424

通常の Syslog のログオブジェクトを作成し、RFC5424 をサポートするエンドポイントに向けるように設定します。例えば、カスタムタグを Loggly に送信する場合、新規に Syslog オブジェクトを作成し、hostnamelogs-01.loggly.comport6514use_tlstruemessage format のフィールドを blank に設定します。また、token フィールドを必ず空白にしてください。次に、format フィールドに以下のように入力します。

<134>1 %{%Y-%m-%dT%TZ}t %{server.datacenter}V <log name> - - [<token>@<PEN> tag="fastly" tag="other-tag" id="12345" key="some-value" <tags>] <regular format string>

以下のフィールドを置き換える必要があります。

  • log name - これは任意で構いませんが、Fastly のログオブジェクトに使用した名前と同じものを使用することをお勧めします。
  • token - RFC5424 をサポートするエンドポイントのプライベートトークンです (Loggly に送信する場合はこれが Customer Token になります)。
  • PEN - プライベートエンタープライズ番号です。例えば、Loggly の PEN は41058です。他のプロバイダーに送信したい場合は、IANA レジストリでそのプロバイダーの PEN を検索し、それを使用することができます。
  • tags - 任意のキー/値のペアにすることができます。上記の例では、fastlyother-tag の2つが表示されています。有効なタグの値には、すべての英数字、ダッシュ (-)、ピリオド (.)、アンダースコア (_) を使用することができます。スペースを含むタグの値は有効ではなく、Loggly を含む多くのログプロバイダーによって無視されます。タグやその制約、Loggly がタグを解析する方法の詳細は、Loggly のドキュメントに記載されていますが、これらの情報は RFC5424 をサポートするすべてのエンドポイントにデータを送信する際にも役立ちます。
  • regular format string - Fastly の通常のログディレクティブで、任意の文字列を入力できます (例: 上述の Common Log Format)。

構造化データ

以下の例では、同じ変数や変数タイプについて表示されるさまざまな項目を示しています。

NameVCL の値種類説明
Protocolreq.protocol文字列HTTP プロトコルのバージョン
Epoch Secondstime.start.sec数字リクエストが開始された時間 (秒単位)
Start Timebegin:%Y-%m-%dT%H:%M:%S%z時間リクエストが開始された時間 (ISO8601 形式)
User Agentreq.http.User-Agentエスケープされた文字列User-Agent リクエストヘッダー
Is IPv6req.is_ipv6ブーリアンリクエストが IPv6 で行われたかどうか
IDdeadbeefリテラル文字列一般的な ID
Some Stringdwayne "the rock" johnsonエスケープされたリテラル文字列引用符を含む文字列
Version1.1リテラル番号一般的なバージョン番号

JSON

特定のログエンドポイント向けに、この例の JSON を調整する必要がある場合があります。ログエンドポイントプロバイダーのドキュメントで、必要となる正確な形式を確認してください。

1{
2 "protocol" : "%H",
3 "epoch_seconds" : %{time.start.sec}V,
4 "time_start" : "%{begin:%Y-%m-%dT%H:%M:%S%z}t",
5 "user_agent" : "%{User-Agent}i",
6 "is_ipv6" : %{if(req.is_ipv6, "true", "false")}V,
7 "some_string":"%{json.escape(\{"dwayne "the rock" johnson"\})}V",
8 "id" : "deadbeef",
9 "version" : 1.1
10}

CSV

%H, %{time.start.sec}V, %{begin:%Y-%m-%dT%H:%M:%S%z}t, %{regsub(req.http.User-Agent, \{"""\}, \{"""""\})}V, %{if(req.is_ipv6, "true", "false")}V, deadbeef, %{regsub(\{"dwayne "the rock" johnson"\}, \{"""\}, \{"""""\})}V, 1.1

キー/値

protocol:%H, epoch_seconds:%{time.start.sec}V, time_start:%{begin:%Y-%m-%dT%H:%M:%S%z}t, user_agent:%{User-Agent}i, is_ipv6:%{if(req.is_ipv6, "true", "false")}V, id:deadbeef, some_string:%{json.escape(\{"dwayne "the rock" johnson"\})}V, version:1.1

エンコードされた URL

protocol=%H&epoch_seconds=%{time.start.sec}V&time_start=%{begin:%Y-%m-%dT%H:%M:%S%z}t&user_agent=%{urlencode(req.http.User-Agent)}i&is_ipv6=%{if(req.is_ipv6, "true", "false")}V&some_string=%{urlencode(\{"dwayne "the rock" johnson"\})}V&id=deadbeef&version=1.1

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

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