インスタントログ
インスタントログは、Cloudflareの顧客がCloudflareダッシュボードまたはコマンドラインインターフェース(CLI)から自分のドメインのトラフィックのライブストリームにアクセスできるようにします。リアルタイムでデータを見ることで、攻撃を調査したり、トラブルシューティングを行ったり、デバッグしたり、ネットワークに加えた変更をテストしたりできます。インスタントログは軽量で、使いやすく、追加の設定は必要ありません。
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
Availability | No | No | Yes | Yes |
-
Cloudflareダッシュボード ↗にログインし、インスタントログで使用したいゾーンを選択します。
-
分析 > インスタントログに移動します。
-
ストリーミングを開始を選択します。
-
(オプション)フィルターを追加を選択して、表示するイベントを絞り込みます。
フィルターを追加する際には、HTTPリクエストデータセットでサポートされているフィールドを使用できます。追加のサブスクリプションが必要なフィールドはダッシュボードではサポートされていないため、CLIを使用する必要があります。
フィルターが選択され、ストリームが開始されると、フィルター条件に一致するログ行のみが表示されます。フィルターは、すでにダッシュボードに表示されているログには遡って適用されません。
次のパラメータを使用して、インスタントログジョブエンドポイントにPOSTリクエストを送信してセッションを作成します。
-
Fields - HTTPリクエストデータセットで利用可能な任意のフィールドをリストします。
-
Sample - サンプルパラメータは、クライアントによって設定されたレコードのサンプルレートです:
"sample": 1は100%のレコード、"sample": 10は10%などです。
- Filters - 特定のイベントを絞り込むためにフィルターを使用します。フィルターは、キー、オペレーター、値の3つの部分で構成されます。
サポートされているすべてのオペレーターはフィルターページで見つけることができます。
以下にフィルターの3つの例を示します:
# クライアントIPの国がカナダでない場合のフィルター:"filter":"{\"where\":{\"and\":[{\"key\":\"ClientCountry\",\"operator\":\"neq\",\"value\":\"ca\"}]}}"# Cloudflareから返されたステータスコードが200または201の場合のフィルター:"filter":"{\"where\":{\"and\":[{\"key\":\"EdgeResponseStatus\",\"operator\":\"in\",\"value\":\"200,201\"}]}}"# リクエストパスに"/static"が含まれ、リクエストホスト名が"example.com"の場合のフィルター:"filter":"{\"where\":{\"and\":[{\"key\":\"ClientRequestPath\",\"operator\":\"contains\",\"value\":\"/static\"}, {\"where\":{\"and\":[{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"example.com\"}]}}"cURLを使用したリクエストの例:
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アドレスです。
{ "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}Websocat ↗のようなCLIユーティリティを使用して、WebSocketに接続し、すぐにログを受信し始めることができます。
websocat wss://logs.cloudflare.com/instant-logs/ws/sessions/99d471b1ca3c23cc8e30b6acec5db987レスポンス:
WebSocketに接続されると、行区切りのJSONメッセージを受信します。
CloudflareのWebSocketに接続し、Cloudflareのグローバルネットワークからログを受信しているので、ログを切り分けて分析を開始できます。これに便利なツールがアングルグラインダー ↗です。アングルグラインダーを使用すると、stdinに対してフィルタリング、変換、集計を適用でき、JSONを第一級でサポートします。たとえば、各国からの訪問者数を取得するには、ClientCountryフィールドでイベントの数を合計できます。
awebsocat wss://logs.cloudflare.com/instant-logs/ws/sessions/99d471b1ca3c23cc8e30b6acec5db987 | agrind '* | json | sum(sampleInterval) by ClientCountry'レスポンス:
| ClientCountry | _sum |
|---|---|
| pt | 4 |
| fr | 3 |
| us | 3 |
| om | 2 |
| ar | 1 |
| au | 1 |
現時点では、HTTPリクエストが唯一サポートされているデータセットです。将来的には、他のデータセットにも拡張する予定です。
ダッシュボードに表示されるログのテーブルを、エクスポートボタンを介してJSON形式でダウンロードできます。
インスタントログには、次の3つの制限があります:
- ゾーンごとにアクティブなインスタントログセッションは1つのみ。
- 最大セッション時間は60分。
- ソケットのリスニングを5分以上停止した場合。
これらの制限のいずれかに達すると、ログストリームは自動的に停止します。
機能リクエストがある場合やバグを見つけた場合は、Cloudflare DevelopersコミュニティのDiscord ↗に参加して直接フィードバックを共有してください。