Instant Logs を使うと、Cloudflare のお客様は、ドメインのトラフィックを Cloudflare ダッシュボードまたはコマンドラインインターフェース(CLI)からライブで確認できます。リアルタイムにデータを見られるため、攻撃の調査、トラブルシューティング、デバッグ、ネットワーク変更の検証ができます。Instant Logs は軽量で使いやすく、追加のセットアップは不要です。
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
| 利用可否 | いいえ | いいえ | はい | はい |
-
Cloudflare ダッシュボードで、Instant Logs のページを開きます。
Instant Logs を開く ↗ -
Start streaming を選択します。
-
(任意)Add filter を選択して、表示するイベントを絞り込みます。
フィルターを追加するときは、HTTP requests データセット でサポートされているフィールドを使えます。追加のサブスクリプションが必要な一部のフィールドはダッシュボードでは使えません。その場合は CLI を使います。
フィルターを選び、ストリームを開始すると、条件に一致するログ行だけが表示されます。すでにダッシュボードに出ているログには、フィルターは遡って適用されません。
次のパラメーターを付けて Instant Logs ジョブのエンドポイントへ POST リクエストを送り、セッションを作成します。
-
Fields - HTTP requests データセット で使える任意のフィールドを指定します。
-
Sample - sample パラメーターは、クライアントが設定するレコードのサンプリングレートです。
"sample": 1は全件(100%)、"sample": 10は 10% です。以降も同様です。
- Filters - フィルターで特定のイベントに絞り込みます。フィルターは key、operator、value の3要素で構成します。
使える演算子は Filters のページを参照してください。
フィルターの例を3つ示します。
# Filter when client IP country is not Canada:
"filter": "{\"where\":{\"and\":[{\"key\":\"ClientCountry\",\"operator\":\"neq\",\"value\":\"ca\"}]}}"# Filter when the status code returned from Cloudflare is either 200 or 201:
"filter": "{\"where\":{\"and\":[{\"key\":\"EdgeResponseStatus\",\"operator\":\"in\",\"value\":[200,201]}]}}"# Filter when the request path contains "/static" and the request hostname is "example.com":
"filter": "{\"where\":{\"and\":[{\"key\":\"ClientRequestPath\",\"operator\":\"contains\",\"value\":\"/static\"}, {\"where\":{\"and\":[{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"example.com\"}]}}"cURL を使ったリクエストの例です。
Required API token permissions
At least one of the following token permissions is required:Logs Read
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/logpush/edge/jobs" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"fields": "ClientIP,ClientRequestHost,ClientRequestMethod,ClientRequestURI,EdgeEndTimestamp,EdgeResponseBytes,EdgeResponseStatus,EdgeStartTimestamp,RayID",
"sample": 100,
"filter": "",
"kind": "instant-logs"
}'レスポンス:
レスポンスには、destination_conf という新しいフィールドが含まれます。この値は、Cloudflare のグローバルネットワークからメッセージを受信する、一意の WebSocket アドレスです。
{
"errors": [],
"messages": [],
"result": {
"id": <JOB_ID>,
"fields": "ClientIP,ClientRequestHost,ClientRequestMethod,ClientRequestURI,EdgeEndTimestamp,EdgeResponseBytes,EdgeResponseStatus,EdgeStartTimestamp,RayID",
"sample": 100,
"filter": "",
"destination_conf": "wss://logs.cloudflare.com/instant-logs/ws/sessions/<SESSION_ID>",
"kind": "instant-logs"
},
"success": true
}Websocat ↗ のような CLI ユーティリティで WebSocket に接続すると、すぐにログを受信できます。
websocat wss://logs.cloudflare.com/instant-logs/ws/sessions/<SESSION_ID>レスポンス:
WebSocket に接続すると、改行区切りの JSON メッセージを受信します。
Cloudflare の WebSocket に接続し、Cloudflare のグローバルネットワークからログを受信できたら、ログを切り分けて分析できます。便利なツールのひとつが Angle Grinder ↗ です。Angle Grinder は、stdin に対してフィルタリング、変換、集計を適用でき、JSON を第一級で扱えます。たとえば、国ごとの訪問者数を知るには、ClientCountry フィールドでイベント数を合計します。
websocat wss://logs.cloudflare.com/instant-logs/ws/sessions/<SESSION_ID> | agrind '* | json | sum(sampleInterval) by ClientCountry'レスポンス:
| ClientCountry | _sum |
|---|---|
| pt | 4 |
| fr | 3 |
| us | 3 |
| om | 2 |
| ar | 1 |
| au | 1 |
現時点でサポートしているデータセットは HTTP requests のみです。今後、ほかのデータセットにも拡大する予定です。
ダッシュボードに表示されるログの表は、Export ボタンから JSON 形式でダウンロードできます。
Instant Logs には、次の3つの制限があります。
- ゾーンあたり、同時に有効な Instant Logs セッションは1つだけです。
- セッションの最長時間は60分です。
- ソケットの受信を5分以上停止した場合。
いずれかの制限に達すると、ログストリームは自動的に停止します。
機能リクエストや不具合は、Cloudflare Developers の Discord コミュニティ ↗ で直接フィードバックできます。