Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Instant Logs

最終更新 Markdown で表示Agent セットアップ

Instant Logs を使うと、Cloudflare のお客様は、ドメインのトラフィックを Cloudflare ダッシュボードまたはコマンドラインインターフェース(CLI)からライブで確認できます。リアルタイムにデータを見られるため、攻撃の調査、トラブルシューティング、デバッグ、ネットワーク変更の検証ができます。Instant Logs は軽量で使いやすく、追加のセットアップは不要です。

提供状況

Free Pro Business Enterprise
利用可否 いいえ いいえ はい はい

Cloudflare ダッシュボードで Instant Logs を使う

  1. Cloudflare ダッシュボードで、Instant Logs のページを開きます。

    Instant Logs を開く ↗
  2. Start streaming を選択します。

  3. (任意)Add filter を選択して、表示するイベントを絞り込みます。

フィルターを追加するときは、HTTP requests データセット でサポートされているフィールドを使えます。追加のサブスクリプションが必要な一部のフィールドはダッシュボードでは使えません。その場合は CLI を使います。

フィルターを選び、ストリームを開始すると、条件に一致するログ行だけが表示されます。すでにダッシュボードに出ているログには、フィルターは遡って適用されません。

CLI で Instant Logs を使う

1. Instant Logs ジョブを作成する

次のパラメーターを付けて 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
Create Instant Logs jobbash
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
}

2. WebSocket に接続する

Websocat のような CLI ユーティリティで WebSocket に接続すると、すぐにログを受信できます。

websocat wss://logs.cloudflare.com/instant-logs/ws/sessions/<SESSION_ID>

レスポンス:

WebSocket に接続すると、改行区切りの JSON メッセージを受信します。

Angle Grinder

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 コミュニティ で直接フィードバックできます。

役に立ちましたか?