- English
- 日本語
有用なログ形式
最終更新日 2023-04-13
異なるシステムでは、時間の経過とともに異なるログ形式が標準化されています。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 オブジェクトを作成し、hostname
を logs-01.loggly.com
、port
を 6514
、use_tls
を true
、message 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 - 任意のキー/値のペアにすることができます。上記の例では、
fastly
とother-tag
の2つが表示されています。有効なタグの値には、すべての英数字、ダッシュ (-
)、ピリオド (.
)、アンダースコア (_
) を使用することができます。スペースを含むタグの値は有効ではなく、Loggly を含む多くのログプロバイダーによって無視されます。タグやその制約、Loggly がタグを解析する方法の詳細は、Loggly のドキュメントに記載されていますが、これらの情報は RFC5424 をサポートするすべてのエンドポイントにデータを送信する際にも役立ちます。 - regular format string - Fastly の通常のログディレクティブで、任意の文字列を入力できます (例: 上述の Common Log Format)。
構造化データ
以下の例では、同じ変数や変数タイプについて表示されるさまざまな項目を示しています。
名前 | VCL の値 | 種類 | 説明 |
---|---|---|---|
Protocol | req.protocol | 文字列 | HTTP プロトコルのバージョンです。 |
Epoch Seconds | time.start.sec | 数字 | リクエストが開始された時間 (秒単位)。 |
Start Time | begin:%Y-%m-%dT%H:%M:%S%z | 時間 | リクエストが開始された時間 (ISO8601 形式)。 |
User Agent | req.http.User-Agent | エスケープされた文字列 | User-Agent リクエストヘッダー。 |
Is IPv6 | req.is_ipv6 | ブール値 | リクエストが IPv6 で行われたかどうかを示します。 |
ID | deadbeef | リテラル文字列 | 一般的な ID。 |
Some String | dwayne "the rock" johnson | エスケープされたリテラル文字列 | 引用符を含む文字列です。 |
Version | 1.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.110}
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 のプライバシーポリシーと利用規約が適用されます。