Logs Engine を使うと、ログを R2 に保存し、直接クエリできます。
- Logpush to R2 ジョブを設定します。
- 少なくとも R2 の読み取り権限を持つ R2 アクセスキー を作成します。
- Logshare の読み取り権限があることを確認します。
- または、次の権限を持つ Cloudflare API トークンを作成します。
- アカウントスコープ
- Logs の読み取り権限
API を使い、時間範囲または RayID でログをクエリしてダウンロードできます。
すべての API 呼び出しに次のヘッダーが必要です。
X-Auth-Email- ドメインに紐づく Cloudflare アカウントのメールアドレスX-Auth-Key- Cloudflare API キー
または、Logs の編集権限を持つ API トークンでも認証できます。
Authorization: Bearer <API_TOKEN>
上記の認証ヘッダーに加え、API が R2 バケット内のログへアクセスするには次のヘッダーが必要です。
R2-access-key-id(必須) - R2 Access Key IdR2-secret-access-key(必須) - R2 Secret Access Key
エンドポイント GET /accounts/{accountId}/logs/list を使い、指定したクエリパラメーターに一致するログを含む R2 オブジェクトを一覧します。
-
start(必須) string(TimestampRFC3339) - RFC 3339 形式の開始時刻です。例:start=2022-06-06T16:00:00Z。 -
end(必須) string(TimestampRFC3339) - RFC 3339 形式の終了時刻です。例:end=2022-06-06T16:00:00Z。 -
bucket(必須) string(Bucket) - R2 バケット名です。例:bucket=cloudflare-logs。 -
prefixstring(Prefix) - ログを保存している R2 バケットのプレフィックスです。例:prefix=http_requests/example.com/{DATE}。 -
limitnumber(Limit) - 返す結果の最大数です。例:limit=100。
エンドポイント GET /accounts/{accountId}/logs/retrieve を使い、指定したクエリパラメーターに一致する R2 内のログをストリームします。
-
start(必須) string(TimestampRFC3339) - RFC 3339 形式の開始時刻です。例:start=2022-06-06T16:00:00Z -
end(必須) string(TimestampRFC3339) - RFC 3339 形式の終了時刻です。例:end=2022-06-06T16:00:00Z -
bucket(必須) string(Bucket) - R2 バケット名です。例:bucket=cloudflare-logs -
prefixstring(Prefix) - ログを保存している R2 バケットのプレフィックスです。例:prefix=http_requests/example.com/{DATE}
curl --globoff "https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/retrieve?start=2022-06-01T16:00:00Z&end=2022-06-01T16:05:00Z&bucket=cloudflare-logs&prefix=http_requests/example.com/{DATE}" \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>" \
--header "R2-Access-Key-Id: R2_ACCESS_KEY_ID" \
--header "R2-Secret-Access-Key: R2_SECRET_ACCESS_KEY"結果は > logs.json でファイルへリダイレクトできます。
さらに、クライアントが透過的に展開しない生の GZIP バイト列を受け取りたい場合は、ヘッダー --header "Accept-Encoding: gzip" を付けます。
R2 に保存したログを使い、Logpull RayID Lookup はインデックス済みの時間範囲に RayID があるかを照会し、一致した結果を返します。この機能は Logpull RayID Lookup ベータサブスクリプションのユーザーが利用できます。
RayID の検索は 2 ステップです。まず時間範囲をインデックスしてから、RayID でレコードを要求します。
インデックスは、7 日間使われないと自動で期限切れになります。
クエリを実行する前に、対象を絞り込むための時間範囲を指定してインデックスできます。次の例では、R2 バケット "cloudflare-logs" のプレフィックス "http_requests/{DATE}" に保存された 1 分分のログをインデックスします。
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/rayids/index \
--header "Authorization: Bearer <API_TOKEN>" \
--header "R2-Access-Key-Id: <R2_ACCESS_KEY_ID>" \
--header "R2-Secret-Access-Key: <R2_SECRET_ACCESS_KEY>" \
--header "Content-Type: application/json" \
--data-raw '{
"start": "2022-08-16T20:30:00Z",
"end": "2022-08-16T20:31:00",
"bucket": "cloudflare-logs",
"prefix": "http_requests/example.com/{DATE}"
}'時間範囲をインデックスしたあと、RayID を付けて GET リクエストを送ります。インデックス済みの時間範囲に一致する結果があれば、そのレコードが返されます。パラメーターはリクエスト本文ではなく URL に移っています。cURL が {DATE} パラメーターを誤解釈しないよう、-g フラグが必要です。
curl --globoff "https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/rayids/<RAY_ID>?bucket=cloudflare-logs&prefix=http_requests/example.com/{DATE}" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "R2-Access-Key-Id: <R2_ACCESS_KEY_ID>" \
--header "R2-Secret-Access-Key: <R2_SECRET_ACCESS_KEY>"API にアクセスするとエラーになります
- Error: Time range returned too many results. Try reducing the time range and try again.
start と end の時間範囲が広すぎると、HTTP ステータスコード 422 が返されます。この制限に当たった場合は、より短い時間範囲でクエリしてください。
- Error: Provided token does not have the required features enabled.
アカウント担当者に連絡し、ベータの Logpull RayID Lookup サブスクリプションをアカウントへ追加してもらってください。
- Error: Time range returned too many results. Try reducing the time range and try again.
トラフィックの多いゾーンは、R2 に多数のログファイルを生成します。ログ量に合う長さになるまで、開始時刻と終了時刻の範囲を短くしてください。
どの時間範囲をインデックスすればよいですか?
現時点では、到着したログを自動でインデックスする仕組みはありません。RayID があり、リクエスト時刻が分かる場合は、リクエスト完了後の 5〜10 分のログをインデックスしてみてください。
イベント発生からクエリできるようになるまでの遅延はどのくらいですか?
Logpush はログをできるだけ早くバッチで配信します。通常は 1 分未満です。その後、Logs Engine でログにアクセスできます。
R2 に保持期間の制御はありますか?
R2 には、現時点では保持期間の制御はありません。Logpush ジョブを作成した時点までさかのぼってクエリできます。
Logs Engine はどのデータセットに対応していますか?
取得 API は、対応しているすべてのデータセットで使えます。一覧は Datasets を参照してください。