有用なログ形式名前

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

Common Log Format (CLF)

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

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

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

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

NCSA の拡張/統合ログ形式

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

リファラーログ形式

1
%{Referer}i -> %U

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

1
%{User-agent}i

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

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

1
<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 - Private Enterprise Number (民間企業番号) です。例えば、Loggly の PEN は41058です。他のプロバイダーに送信したい場合は、IANA レジストリでそのプロバイダーの PEN を検索し、それを使用することができます。
  • tags - 任意のキー/値のペアにすることができます。上記の例では、fastlyother-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

1
2
3
4
5
6
7
8
9
10
{
  "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,
  "some_string":"%{json.escape(\{"dwayne "the rock" johnson"\})}V",
  "id" : "deadbeef",
  "version" : 1.1
}

CSV

1
%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

キー/値

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

1
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
Back to Top