Cloudflare Logpush は、Cloudflare ダッシュボードまたは API から、Google BigQuery(Legacy Streaming API を使用)へログを直接プッシュできます。
Cloudflare は、Logpush ジョブの destination_conf に指定した Google Application Credentials を使い、テーブルへの書き込みアクセスを取得します。指定するサービスアカウントには、テーブルへの書き込み権限が必要です。
Logpush を BigQuery に有効にするには、次の手順を実行します。
- アカウントの Google Cloud Console を開きます。
- IAM & Admin > Service Accounts を開き、新しいサービスアカウントを作成します。
- Permissions で BigQuery Data Editor ロールを追加します。最低でも
bigquery.tables.updateData権限が必要です。 - Keys でキーを追加します。
- Add key をクリックします。
- Create new key をクリックします。
- キータイプ JSON を選びます。
- Create をクリックします。
- Application Credentials の JSON ファイルを保存します。新しい Logpush ジョブの設定時に使います。
- BigQuery でデータセットとテーブルを作成します。BigQuery の手順 ↗ を参照してください。たとえば、
schema.jsonとbqコマンドを使う場合:
gcloud auth activate-service-account --key-file=${KEY_FILE}
PROJECT_ID=<PROJECT_ID>
DATASET_ID=<DATASET_ID>
TABLE_ID=<TABLE_ID>
bq mk --table "${PROJECT_ID}:${DATASET_ID}.${TABLE_ID}" schema.json-
Cloudflare ダッシュボードで、アカウントまたはドメイン(ゾーンとも呼ばれます)の Logpush ページを開きます。
アカウントの場合: Logpush を開く ↗
ドメイン(ゾーン)の場合: Logpush を開く ↗
-
選んだ範囲に応じて、それぞれ アカウントスコープのデータセット と ゾーンスコープのデータセット を利用できます。
-
Create a Logpush job を選択します。
-
Select a destination で Google BigQuery を選びます。
-
次の送信先の詳細を入力します。
- Project ID — Google Cloud のプロジェクト ID
- Dataset ID — テーブルを含む BigQuery データセット
- Table ID — ログをプッシュする BigQuery テーブル
- Service Account Credentials — Google サービスアカウントキーの JSON を貼り付けます。この資格情報は暗号化して保存され、再表示されません。
送信先の詳細を入力したら、Continue を選択します。
-
ストレージサービスへプッシュするデータセットを選びます。
-
次のステップで、Logpush ジョブを設定します。
- Job name を入力します。
- If logs match では、ログに含めるイベントと除外するイベントを選べます。詳細は フィルター を参照してください。このオプションがないデータセットもあります。
- Send the following fields では、すべてのログを送信先へプッシュするか、プッシュするログを選ぶかを選べます。
-
Advanced Options では、次の設定ができます。
- ログ内のタイムスタンプフィールドの形式を選びます(
RFC3339(デフォルト)、Unix、またはUnixNano)。 - ログの サンプリングレート を選ぶか、ランダムにサンプリングした割合のログをプッシュします。
CVE-2021-44228の秘匿化を有効にします。このオプションは${の出現をすべてx{に置き換えます。
- ログ内のタイムスタンプフィールドの形式を選びます(
-
Logpush ジョブの設定が完了したら、Submit を選択します。
BigQuery の Logpush ジョブを設定するには、次の手順を実行します。
- 適切なエンドポイント URL と認証パラメーターでジョブを作成します。
- ジョブを有効にして、ログのプッシュを開始します。
Logpush ジョブの読み取りや設定の前に、Log Share の権限が有効になっていることを確認してください。詳細は Roles のセクション を参照してください。
ジョブを作成するには、Logpush ジョブのエンドポイントに、次のフィールドを付けて POST リクエストを送ります。
- name(任意)— ジョブ名にはドメイン名を使います。
- destination_conf — BigQuery テーブルへの参照と資格情報からなるログ送信先です。次の文字列形式を使います。
- <PROJECT_ID>、<DATASET_ID>、<TABLE_ID>: 対象 BigQuery テーブルのプロジェクト ID、データセット ID、テーブル ID です。
- <ENCODED_VALUE>: Application Credentials JSON を
credentialsとしてエンコードした値です。base64:プレフィックス付きの Base64、またはurl:プレフィックス付きの URL エンコードのいずれかです。
"bq://projects/<PROJECT_ID>/datasets/<DATASET_ID>/tables/<TABLE_ID>?credentials=<ENCODED_VALUE>"- dataset — 受け取りたいログのカテゴリです。対応データセットの一覧は Datasets を参照してください。
- output_options(任意)— フィールド、サンプルレート、タイムスタンプ形式の設定は、Log Output Options を参照してください。タイムスタンプには
timestamps=rfc3339を推奨します。output_typeや prefix / suffix / delimiter / template などのカスタム書式オプションを含める場合は、stringify_objectも true にしてください。そうしないと、object型のフィールドが BigQuery Legacy Streaming API と互換性のある形式でシリアライズされないことがあります。
cURL を使ったリクエスト例:
Required API token permissions
At least one of the following token permissions is required:Logs Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/logpush/jobs" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "<DOMAIN_NAME>",
"destination_conf": "bq://projects/<PROJECT_ID>/datasets/<DATASET_ID>/tables/<TABLE_ID>?credentials=<ENCODED_VALUE>",
"output_options": {
"field_names": [
"ClientIP",
"ClientRequestHost",
"ClientRequestMethod",
"ClientRequestURI",
"EdgeEndTimestamp",
"EdgeResponseBytes",
"EdgeResponseStatus",
"EdgeStartTimestamp",
"RayID"
],
"timestamp_format": "rfc3339"
},
"max_upload_bytes": 5000000,
"max_upload_records": 50000,
"dataset": "http_requests",
"enabled": true
}'レスポンス:
{
"errors": [],
"messages": [],
"result": {
"id": <JOB_ID>,
"dataset": "http_requests",
"kind": "",
"max_upload_bytes": 5000000,
"max_upload_records": 50000,
"enabled": true,
"name": "<DOMAIN_NAME>",
"output_options": {
"field_names": ["ClientIP", "ClientRequestHost", "ClientRequestMethod", "ClientRequestURI", "EdgeEndTimestamp", "EdgeResponseBytes", "EdgeResponseStatus" ,"EdgeStartTimestamp", "RayID"],
"timestamp_format": "rfc3339"
},
"destination_conf": "bq://projects/<PROJECT_ID>/datasets/<DATASET_ID>/tables/<TABLE_ID>?credentials=<ENCODED_VALUE>",
"last_complete": null,
"last_error": null,
"error_message": null
},
"success": true
}これにより、Logpush がアップロードできることを確認するための空のテストアップロードが行われます。空のデータ行が表示されることがあります。
ジョブの更新(有効化と無効化を含む)は、cURL で Logpush を管理する を参照してください。
BigQuery のドキュメント ↗ に記載されている、次のデフォルトのクォータと制限に注意してください。
BigQuery のストリーミング挿入には、次の制限があります。
- HTTP リクエストの最大サイズ(非圧縮、ヘッダーを含む場合があります): 10 MB
- 行の最大サイズ: 10 MB
- 1 リクエストあたりの最大行数: 50,000 行
これらはデフォルトのクォータ/制限です。Logpush ジョブを制限に合わせて調整するか、必要に応じて Google に引き上げを依頼してください。
Cloudflare Logpush は、Google Cloud Storage へのログプッシュにも対応しています。
BigQuery は、テーブルあたり 1 日最大 1,500 件のロードジョブ(失敗を含む)を処理でき、各ロードには最大 1,000 万ファイルを含められます。 つまり、1 分に 1 回 BigQuery へロードでき、1 回のロードに最大 1,000 万ファイルを含められます。 詳細は、BigQuery のロードジョブのクォータを参照してください。
Logpush はログのバッチをできるだけ早く配信します。そのため、1 分あたり複数バッチのファイルを受け取ることがあります。BigQuery ジョブは、ファイル受信時ではなく、1 分ごとなど一定の時間間隔でファイルを取り込むように設定してください。Logpush のファイルを受け取るたびに BigQuery へ取り込むと、クォータをすぐ使い切ることがあります。
スケジュール済みのジョブロードを BigQuery で設定するコミュニティサポートの例は、Cloudflare + Google Cloud | Integrations リポジトリ ↗ を参照してください。このリポジトリはベストエフォートで提供されており、定期的なメンテナンスは行っていません。