☎️

【PoC 用】HTTP リクエストログをリアルタイム確認できる Instant Logs

に公開

Instant Logs(インスタントログ)とは

Cloudflare のログをリアルタイムで確認したいケースに使える Instant Logs(インスタントログ)の紹介です。

  • 執筆時点(2025年9月)では HTTP リクエストログのみが対象なので、ゾーンごとに利用
  • ダッシュボードと CLI から利用可能

これだけの規模で運用されているプラットフォームにも関わらず、リアルタイムにログが出てくるので、PoC での動作確認などで非常に重宝します。

ダッシュボード(GUI)

分析とログ > インスタントログ にあります。

使い方は簡単で ストリーミングを開始する を押します。
ゾーンで HTTP リクエストを受信すると、リアルタイムに順次表示されてきます。

一つをクリックすると、各フィールドの情報が表示されます。

フィールドと値でマッチ条件を作り、表示にフィルターを掛けることができます。

フィルターされたものだけが表示されます。

CLI(API)

CLI(API) からも確認可能です。
POST リクエストでジョブを作成し、作成したジョブに Websocket でつなぎます。

ジョブの作成は下記を決めてから投入します。

  • 表示フィールドの指定 fields
  • フィルター条件の指定 filter
  • サンプリングレートの指定 sample
    • 1 が 100% とる、10 は 10% とる、など
      システム側の上限値を超えるログ数が発生した場合には、自動レートを適用
      ログ中のsampleIntervalで実効値を確認可能
fields の値
フィールド1,フィールド2,...
filter の値
{"where":{"and":[{"key":"フィールド","operator":"オペレータ","value":"値"}]}}
ジョブの作成
curl "https://api.cloudflare.com/client/v4/zones/$ZONE/logpush/edge/jobs" \
  --request POST \
  --header "Authorization: $TOKEN" \
  --json '{
    "fields": "ClientIP,ClientRequestHost,ClientRequestMethod,ClientRequestURI,EdgeEndTimestamp,EdgeResponseBytes,EdgeResponseStatus,EdgeStartTimestamp,RayID",
    "sample": 1,
    "filter": "{\"where\":{\"and\":[{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"rr.oymk.work\"}]}}",
    "kind": "instant-logs"
  }' -s | jq '.'
応答例
{
  "errors": [],
  "messages": [],
  "result": {
    "fields": "ClientIP,ClientRequestHost,ClientRequestMethod,ClientRequestURI,EdgeEndTimestamp,EdgeResponseBytes,EdgeResponseStatus,EdgeStartTimestamp,RayID",
    "sample": 1,
    "filter": "{\"where\":{\"and\":[{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"rr.oymk.work\"}]}}",
    "destination_conf": "wss://logs.cloudflare.com/instant-logs/ws/sessions/06ff7b64672740ec578391d934854f26",
    "kind": "instant-logs",
    "session_id": "06ff7b64672740ec578391d934854f26"
  },
  "success": true
}

destination_conf の URL に Websocket で接続すると、ログがストリームされ始めます。
websocat の例

リクエスト
websocat wss://logs.cloudflare.com/instant-logs/ws/sessions/06ff7b64672740ec578391d934854f26 | jq '.'
応答例
{
  "ClientIP": "104.28.162.101",
  "ClientRequestHost": "rr.oymk.work",
  "ClientRequestMethod": "GET",
  "ClientRequestURI": "/abcd",
  "EdgeEndTimestamp": "2025-09-30T00:27:31Z",
  "EdgeResponseBytes": 1761,
  "EdgeResponseStatus": 404,
  "EdgeStartTimestamp": "2025-09-30T00:27:31Z",
  "RayID": "986f984f9c59d768",
  "sampleInterval": 1
}

その他

dev docs には Angle Grinder を使った JSON 戻り値のパースや Instant Logs の LimitsAvailability なども書かれていますのでご確認ください。

Discussion