コンテンツにスキップ

インスタントログ

インスタントログは、Cloudflareの顧客がCloudflareダッシュボードまたはコマンドラインインターフェース(CLI)から自分のドメインのトラフィックのライブストリームにアクセスできるようにします。リアルタイムでデータを見ることで、攻撃を調査したり、トラブルシューティングを行ったり、デバッグしたり、ネットワークに加えた変更をテストしたりできます。インスタントログは軽量で、使いやすく、追加の設定は必要ありません。

利用可能性

Free Pro Business Enterprise

Availability

No

No

Yes

Yes

Cloudflareダッシュボード経由のインスタントログ

  1. Cloudflareダッシュボードにログインし、インスタントログで使用したいゾーンを選択します。

  2. 分析 > インスタントログに移動します。

  3. ストリーミングを開始を選択します。

  4. (オプション)フィルターを追加を選択して、表示するイベントを絞り込みます。

フィルターを追加する際には、HTTPリクエストデータセットでサポートされているフィールドを使用できます。追加のサブスクリプションが必要なフィールドはダッシュボードではサポートされていないため、CLIを使用する必要があります。

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

CLI経由のインスタントログ

1. インスタントログジョブの作成

次のパラメータを使用して、インスタントログジョブエンドポイントにPOSTリクエストを送信してセッションを作成します。

  • Fields - HTTPリクエストデータセットで利用可能な任意のフィールドをリストします。

  • Sample - サンプルパラメータは、クライアントによって設定されたレコードのサンプルレートです:"sample": 1は100%のレコード、"sample": 10は10%などです。

  • Filters - 特定のイベントを絞り込むためにフィルターを使用します。フィルターは、キー、オペレーター、値の3つの部分で構成されます。

サポートされているすべてのオペレーターはフィルターページで見つけることができます。

以下にフィルターの3つの例を示します:

Terminal window
# クライアントIPの国がカナダでない場合のフィルター:
"filter":"{\"where\":{\"and\":[{\"key\":\"ClientCountry\",\"operator\":\"neq\",\"value\":\"ca\"}]}}"
Terminal window
# Cloudflareから返されたステータスコードが200または201の場合のフィルター:
"filter":"{\"where\":{\"and\":[{\"key\":\"EdgeResponseStatus\",\"operator\":\"in\",\"value\":\"200,201\"}]}}"
Terminal window
# リクエストパスに"/static"が含まれ、リクエストホスト名が"example.com"の場合のフィルター:
"filter":"{\"where\":{\"and\":[{\"key\":\"ClientRequestPath\",\"operator\":\"contains\",\"value\":\"/static\"}, {\"where\":{\"and\":[{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"example.com\"}]}}"

cURLを使用したリクエストの例:

Terminal window
curl -X POST 'https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/logpush/edge/jobs' \
-H 'X-Auth-Key: <KEY>' \
-H 'X-Auth-Email: <EMAIL>' \
-H 'Content-Type: application/json' \
-d '{
"fields": "ClientIP,ClientRequestHost,ClientRequestMethod,ClientRequestURI,EdgeEndTimestamp,EdgeResponseBytes,EdgeResponseStatus,EdgeStartTimestamp,RayID",
"sample": 1,
"filter": "",
"kind": "instant-logs"
}' | jq .

レスポンス:

レスポンスには、destination_confという新しいフィールドが含まれます。このフィールドの値は、Cloudflareのグローバルネットワークからメッセージを受信するためのユニークなWebSocketアドレスです。

Terminal window
{
"errors": [],
"messages": [],
"result": {
"id": 401,
"fields": "ClientIP,ClientRequestHost,ClientRequestMethod,ClientRequestURI,EdgeEndTimestamp,EdgeResponseBytes,EdgeResponseStatus,EdgeStartTimestamp,RayID",
"sample": 100,
"filter": "",
"destination_conf": "wss://logs.cloudflare.com/instant-logs/ws/sessions/99d471b1ca3c23cc8e30b6acec5db987",
"kind": "instant-logs"
},
"success": true
}

2. WebSocketに接続

WebsocatのようなCLIユーティリティを使用して、WebSocketに接続し、すぐにログを受信し始めることができます。

Terminal window
websocat wss://logs.cloudflare.com/instant-logs/ws/sessions/99d471b1ca3c23cc8e30b6acec5db987

レスポンス:

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

アングルグラインダー

CloudflareのWebSocketに接続し、Cloudflareのグローバルネットワークからログを受信しているので、ログを切り分けて分析を開始できます。これに便利なツールがアングルグラインダーです。アングルグラインダーを使用すると、stdinに対してフィルタリング、変換、集計を適用でき、JSONを第一級でサポートします。たとえば、各国からの訪問者数を取得するには、ClientCountryフィールドでイベントの数を合計できます。

Terminal window
awebsocat wss://logs.cloudflare.com/instant-logs/ws/sessions/99d471b1ca3c23cc8e30b6acec5db987 | agrind '* | json | sum(sampleInterval) by ClientCountry'

レスポンス:

ClientCountry_sum
pt4
fr3
us3
om2
ar1
au1

利用可能なデータセット

現時点では、HTTPリクエストが唯一サポートされているデータセットです。将来的には、他のデータセットにも拡張する予定です。

エクスポート

ダッシュボードに表示されるログのテーブルを、エクスポートボタンを介してJSON形式でダウンロードできます。

制限

インスタントログには、次の3つの制限があります:

  • ゾーンごとにアクティブなインスタントログセッションは1つのみ。
  • 最大セッション時間は60分。
  • ソケットのリスニングを5分以上停止した場合。

これらの制限のいずれかに達すると、ログストリームは自動的に停止します。

お問い合わせ

機能リクエストがある場合やバグを見つけた場合は、Cloudflare DevelopersコミュニティのDiscordに参加して直接フィードバックを共有してください。