コンテンツにスキップ

ログ出力オプション

Logpushのジョブには新しいキー、output_optionsが追加され、logpull_optionsが置き換えられ、より柔軟なフォーマットが可能になりました。APIを介してoutput_optionsを変更できます。

logpull_optionsの置き換え

以前は、Logpushジョブはlogpull_optionsでフィールドのリスト、サンプリングレート、タイムスタンプフォーマットを指定することでカスタマイズできました。これはURLエンコードされたパラメータとして指定されます。例えば:

{
"id": 146,
"dataset": "http_requests",
"enabled": false,
"name": "<DOMAIN_NAME>",
"logpull_options": "fields=ClientIP,EdgeStartTimestamp,RayID&sample=0.1&timestamps=rfc3339",
"destination_conf": "s3://<BUCKET_PATH>?region=us-west-2"
}

これをoutput_optionsに置き換えました。これはLogpullとLogpushの両方で使用されます。

{
"id": 146,
"dataset": "http_requests",
"enabled": false,
"name": "<DOMAIN_NAME>",
"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"sample_rate": 0.1,
"timestamp_format": "rfc3339"
},
"destination_conf": "s3://<BUCKET_PATH>?region=us-west-2"
}

出力タイプ

デフォルトでは、Logpushは各レコードを1行のJSON(ndjsonとしても知られています)として出力します。

output_optionsを使用すると、CSVまたは単一のJSONオブジェクトに切り替えたり、プレフィックス、サフィックス、区切り文字をさらにカスタマイズしたり、独自のレコードテンプレートを提供したりできます(Goのテキストテンプレート構文の簡略版)。

output_optionsオブジェクトには以下の設定があります:

  • field_names: 文字列の配列。現時点では、すべてのフィールドを一度に追加するオプションはなく、フィールド名を指定する必要があります。
  • output_type: 出力タイプを指定する文字列(例:ndjsonまたはcsv、デフォルトはndjson)。これは選択した出力タイプに応じて残りの設定のデフォルト値を設定します。出力タイプによっては、いくつかのフォーマットルール(文字列の引用など)が異なります。
  • batch_prefix: 各バッチの前に追加される文字列。
  • batch_suffix: 各バッチの後に追加される文字列。
  • record_prefix: 各レコードの前に追加される文字列。
  • record_suffix: 各レコードの後に追加される文字列。
  • record_template: デフォルトのカンマ区切りリストの代わりに各レコードのテンプレートとして使用する文字列。テンプレートで使用されるすべてのフィールドはfield_namesにも存在する必要があります。そうでない場合、それらはnullになります。標準関数(条件文、ループ、サブテンプレートなど)は使用できないGoのテキストテンプレートとしてフォーマットします。テンプレートは以下の3種類のトークンで構成される必要があります:
    • アクション:これは{{ .Field }}または{{ "constant text" }}のいずれかです。
    • テキスト:これは{{ actions }}の間の定数テキストです。
    • コメント:{{/* comments */}}は静かに削除されます。
  • record_delimiter: レコード間の区切りとして挿入される文字列。
  • field_delimiter: フィールドを結合する文字列。record_templateが設定されている場合は無視されます。
  • timestamp_format: タイムスタンプのフォーマットを指定する文字列(例:unixnanounix、またはrfc3339)。デフォルトはunixnano
  • sample_rate: サンプリングレートを指定する浮動小数点数(デフォルト1.0:サンプリングなし)。サンプリングはフィルタリングの上に適用され、データの現在のsample_intervalに関係なく行われます。
  • CVE-2021-44228: bool、デフォルトはfalse。trueに設定すると、生成されたファイル内のすべての${の出現がx{に置き換えられます。

field_namesoutput_typeを指定すると、残りのオプションは指定されたoutput_typeに対して以下のように設定されます:

ndjson

ndjsonのデフォルトoutput_options

{
"record_prefix": "{",
"record_suffix": "}\n",
"field_delimiter": ","
}

例 output_options

"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "ndjson"
}

例 output

{"ClientIP":"89.163.242.206","EdgeStartTimestamp":1506702504433000200,"RayID":"3a6050bcbe121a87"}
{"ClientIP":"89.163.242.207","EdgeStartTimestamp":1506702504433000300,"RayID":"3a6050bcbe121a88"}
{"ClientIP":"89.163.242.208","EdgeStartTimestamp":1506702504433000400,"RayID":"3a6050bcbe121a89"}
  • 異なるフィールド名のndjson:

例 output_options

"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "ndjson",
"record_template": "\"client-ip\":{{.ClientIP}},\"timestamp\":{{.EdgeStartTimestamp}},\"ray-id\":{{.RayID}}"
}

例 output

{"client-ip":"89.163.242.206","timestamp":1506702504433000200,"ray-id":"3a6050bcbe121a87"}
{"client-ip":"89.163.242.207","timestamp":1506702504433000300,"ray-id":"3a6050bcbe121a88"}
{"client-ip":"89.163.242.208","timestamp":1506702504433000400,"ray-id":"3a6050bcbe121a89"}

二重波括弧({{}})、すなわち"double{{curly}}braces"は、Goのテキストテンプレートの規則に従って挿入できます。すなわち、"{{doublecurlybraces}}"です。

csv

CSVのデフォルトoutput_options

{
"record_suffix": "\n",
"field_delimiter": ","
}

例 output_options

"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "csv"
}

例 output

"89.163.242.206",1506702504433000200,"3a6050bcbe121a87"
"89.163.242.207",1506702504433000300,"3a6050bcbe121a88"
"89.163.242.208",1506702504433000400,"3a6050bcbe121a89"

csv/jsonのバリエーション

上記に基づいて、csvやjsonに似た他のフォーマットもサポートされています:

  • ヘッダー付きcsv:

例 output_options

"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "csv",
"batch_prefix": "ClientIP,EdgeStartTimestamp,RayID\n"
}

例 output

ClientIP,EdgeStartTimestamp,RayID
"89.163.242.206",1506702504433000200,"3a6050bcbe121a87"
"89.163.242.207",1506702504433000300,"3a6050bcbe121a88"
"89.163.242.208",1506702504433000400,"3a6050bcbe121a89"
  • ヘッダー付きtsv:

例 output_options

"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "csv",
"batch_prefix": "ClientIP\tEdgeStartTimestamp\tRayID\n",
"field_delimiter": "\t"
}

例 output

ClientIP EdgeStartTimestamp RayID
"89.163.242.206" 1506702504433000200 "3a6050bcbe121a87"
"89.163.242.207" 1506702504433000300 "3a6050bcbe121a88"
"89.163.242.208" 1506702504433000400 "3a6050bcbe121a89"
  • ネストされたオブジェクトを持つjson:

例 output_options

"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"output_type": "ndjson",
"batch_prefix": "{\"events\":[",
"batch_suffix": "\n]}\n",
"record_prefix": "\n {\"info\":{",
"record_suffix": "}}",
"record_delimiter": ","
}

例 output

{"events":[
{"info":{"ClientIP":"89.163.242.206","EdgeStartTimestamp":1506702504433000200,"RayID":"3a6050bcbe121a87"}},
{"info":{"ClientIP":"89.163.242.207","EdgeStartTimestamp":1506702504433000300,"RayID":"3a6050bcbe121a88"}},
{"info":{"ClientIP":"89.163.242.208","EdgeStartTimestamp":1506702504433000400,"RayID":"3a6050bcbe121a89"}}
]}

移行方法

logpull_optionsから新しいoutput_optionsにジョブを移行するには、以下の手順を実行します:

  1. &fields=ClientIP,EdgeStartTimestamp,RayIDパラメータをoutput_options.field_namesの配列に変更します。
  2. &sample=0.1パラメータをoutput_options.sample_rateに変更します。
  3. &timestamps=rfc3339パラメータをoutput_options.timestamp_formatに変更します。
  4. &CVE-2021-44228=trueパラメータをoutput_options.CVE-2021-44228に変更します。

例えば、logpull_optionsがfields=ClientIP,EdgeStartTimestamp,RayID&sample=0.1&timestamps=rfc3339&CVE-2021-44228=trueの場合、output_optionsは次のようになります:

"output_options": {
"field_names": ["ClientIP", "EdgeStartTimestamp", "RayID"],
"sample_rate": 0.1,
"timestamp_format": "rfc3339",
"CVE-2021-44228": true
}