すべてのプロダクト
Search
ドキュメントセンター

Web Application Firewall:クエリログ

最終更新日:Apr 01, 2026

Log Service for WAF を使用して、WAF トラフィックログをリアルタイムで検索・フィルター・分析します。クエリ結果には、ブロックされたリクエスト、攻撃元、トリガーされた保護ルールが表示されるため、コンソールから離れることなくインシデントを調査し、ルールを調整し、対応措置を実行できます。

前提条件

作業を開始する前に、以下の条件を満たしていることを確認してください。

ログのクエリと分析

  1. WAF コンソールにログインします。上部ナビゲーションバーで、ご利用の WAF インスタンスがデプロイされているリソースグループとリージョン(中国本土または中国本土以外)を選択します。

  2. 左側ナビゲーションウィンドウで、セキュリティ運用 > Log Service を選択します。

  3. ドロップダウンリストからドメイン名を選択し、ステータスをオンにして、そのドメイン名のログ収集を有効にします。ドロップダウンリスト(図中のラベル 1)には、WAF によって保護されているドメイン名のみが表示されます。必要なドメイン名がリストにない場合は、事前に WAF に追加してください。「チュートリアル」をご参照ください。

    enable log collection

  4. ログ検索タブで、クエリを作成して実行します。

    1. 検索ボックス(図中のラベル 1)にクエリ文を入力します。クエリ文は Log Service の検索構文を使用します。構文の詳細については、「検索構文」をご参照ください。クエリ条件として使用可能な WAF ログフィールドの完全な一覧については、「WAF でサポートされるログフィールド」をご参照ください。ガイド付きの操作を希望する場合は、検索ボックス上部の高度な検索を展開し、条件を入力して検索をクリックします。これにより、コンソールが自動的にクエリ文を生成します。利用可能な条件は以下のとおりです。

      検索条件

      説明

      IP

      リクエストを送信したクライアントの IP アドレス

      リクエスト ID

      WAF が各リクエストに割り当てる一意の ID。WAF はこの ID をエラーページおよびスライダー CAPTCHA ページに含めるため、トラブルシューティング時に特定のリクエストをトレースできます。

      ルール ID

      リクエストに一致した WAF 保護ルールの ID。セキュリティレポートページ、またはシステム管理 > 保護ルールグループでルール ID を確認できます。

      サーバーのレスポンスコード

      オリジンサーバーが WAF に返した HTTP ステータスコード

      WAF が返したステータスコード

      WAF がクライアントに返した HTTP ステータスコード

      保護機能

      リクエストに一致した WAF 保護ルールのタイプ。ルールタイプと構成の詳細については、「概要」をご参照ください。

    2. (オプション)結果を集計または計算する場合は、縦棒(|)の後に分析文を追加します。分析文は標準 SQL-92 構文を使用します。詳細については、「ログのクエリと分析の概要」をご参照ください。単に一致するログエントリを表示するだけの場合は、このステップをスキップしてください。

    3. タイムセレクター(図中のラベル 2)を使用して時間範囲を設定します。

    4. 検索と分析(図中のラベル 3)をクリックします。

    Query logs

結果はログヒストグラムおよび下部の生ログタブとグラフタブに表示されます。実用的なクエリ例については、「クエリと分析の例」をご参照ください。

クエリ結果の管理

ログヒストグラム

ログヒストグラムは、クエリされたログが時間軸上でどのように分布しているかを示します。

Log histogram
  • 緑色の長方形にカーソルを合わせると、その範囲が表す時間帯とその時間帯内のログ数が表示されます。

  • 緑色の長方形をクリックすると、より細かい時間分解能でドリルダウンし、生ログタブで一致するエントリを表示できます。

生ログ

生ログタブには、個別のログエントリが表示されます。

Raw logs

クイック分析

aliasアイコンをクリックして、フィールド名とフィールドエイリアスの表示を切り替えます。エイリアスはインデックスを構成する際に設定されます。たとえば、host_nameのエイリアスをhostに設定した場合、エイリアス表示が有効な状態ではクイック分析リストにhostが表示されます。

フィールドにエイリアスが設定されていない場合、エイリアス表示設定に関係なく常にフィールド名が表示されます。

詳細については、「クイック分析」をご参照ください。

ログの表示とダウンロード

操作方法
テーブルビューと生データビューの切り替えテーブルまたは生データ
ログエントリのコピーcopyアイコンをクリックします
タグ詳細の表示detailsアイコンをクリックします
複数行表示の切り替え[新規行]
時間順での並べ替え時間
ログのダウンロードdownloadsアイコンをクリックします。オプション:現在のページのログをダウンロードCloud Shell で全ログをダウンロードコマンドラインツールで全ログをダウンロード。「ログのダウンロード」をご参照ください。
表示設定の構成settingアイコンをクリックします。オプション:タグ設定カラム設定JSON 設定イベント設定

グラフ

グラフタブは、分析結果を視覚化します。この機能を使用するには、クエリに分析文(SQL-92)が必要です。

操作方法
チャートタイプの変更チャートピッカーからチャートタイプを選択します。利用可能なタイプについては、「チャート設定」をご参照ください。
チャートのプレビューチャートタイプを変更した後、チャートをプレビューします
ダッシュボードへの追加新規ダッシュボードに追加
ログのダウンロードログをダウンロードをクリックします。オプション:現在のページのログをダウンロードCloud Shell で全ログをダウンロードコマンドラインツールで全ログをダウンロード。「ログのダウンロード」をご参照ください。

チャートを微調整するには、以下の設定項目を使用します。

設定項目説明
一般設定すべてのクエリ文の結果に適用される配色など、チャート全体のグローバル設定
フィールド設定個別のクエリ結果またはカラムごとの表示設定(例:単一のクエリ結果に対するカスタム配色)
対話発生の設定クエリ結果またはデータカラムのドリルダウン動作を設定し、詳細な分析を可能にします

LogReduce

LogReduceタブで、LogReduce を有効にするをクリックすると、類似したログエントリをクラスター化してパターンを抽出できます。詳細については、「LogReduce」をご参照ください。

クエリ結果に基づく対応

ログから必要な情報を得た後、コンソールから離れることなく以下の操作を実行できます。

操作方法
アラートの作成アラートとして保存 > 新規アラートを選択します。Log Service はスケジュールに従ってルールを評価し、トリガー条件が満たされるたびに通知を送信します。構成の詳細については、「アラートルールの構成」をご参照ください。
チャートのダッシュボードへの追加グラフタブで、新規ダッシュボードに追加をクリックします。
オフライン分析用のログダウンロード生ログタブのダウンロードアイコン、またはグラフタブのログをダウンロードをクリックします。「ログのダウンロード」をご参照ください。

重要なログフィールド

以下のフィールドは、WAF ログクエリで頻繁に使用されます。フィールドの完全なリファレンスについては、「WAF でサポートされるログフィールド」をご参照ください。

フィールド説明有効値
final_pluginリクエストに対して動作した保護機能waf(保護ルールエンジン)、acl(IP アドレスブラックリストおよびカスタム保護ポリシー)、cc(HTTP フラッド攻撃対策およびカスタム保護ポリシー)
final_actionリクエストに対して実行された操作block、およびルール構成に応じたその他の値
real_client_ipクライアントの送信元 IP アドレス。プロキシが利用中または IP ヘッダーが無効な場合、値は-になります。その場合は、remote_addrを使用してください。IP アドレスまたは-
remote_addrWAF に接続した IP アドレスIP アドレス
matched_hostリクエストと一致したドメイン名ドメイン名文字列
hostリクエストされたドメイン名ドメイン名文字列
request_pathリクエストパスパス文字列
request_methodHTTP リクエストメソッドGETPOSTPUTDELETE など
statusWAF がクライアントに返した HTTP ステータスコードHTTP ステータスコード
upstream_statusオリジンサーバーが WAF に返した HTTP ステータスコードHTTP ステータスコード
querystringリクエストのクエリ文字列URL エンコードされた文字列
http_user_agentクライアントのユーザーエージェントユーザーエージェント文字列

クエリと分析の例

以下の例では、一般的なセキュリティ調査シナリオをカバーしています。各例では、検索文(| の前)および分析文(| の後)を使用します。

15 分間隔での保護機能別ブロックリクエスト数

15 分間隔で、各保護機能によってブロックされたリクエスト数を表示します。

* |
SELECT
  time_series(__time__, '15m', '%H:%i', '0') as time,
  COUNT_if(final_plugin = 'waf') as "wafmodule",
  COUNT_if(final_plugin = 'acl') as "aclmodule",
  COUNT_if(final_plugin = 'cc') as "httpfloodmodule"
GROUP by
  time
ORDER by
  time

ドメイン別の保護機能内訳

ドメイン名ごとに、各保護機能がトリガーされた回数を表示します。

* |
SELECT
  count(*) as times,
  host,
  final_plugin
GROUP by
  host,
  final_plugin
ORDER by
  times desc

15 分間隔での秒間クエリ数 (QPS)

* |
SELECT
  time_series(__time__, '15m', '%H:%i', '0') as time,
  count(*) / 900 as QPS
GROUP by
  time
ORDER by
  time

HTTP フラッド攻撃の標的となった上位ドメイン

and acl_action :block |
SELECT
  count(*) as times,
  host
GROUP by
  host
ORDER by
  times desc

最新 10 件の秒間リクエスト詳細

最新のリクエストについて、時刻、ドメイン、パス、メソッド、WAF ステータスコード、オリジンサーバーステータスコード、クエリ文字列を返します。

* |
SELECT
  date_format(date_trunc('second', __time__), '%H:%i:%s') as time,
  host,
  request_path,
  request_method,
  status,
  upstream_status,
  querystring
LIMIT
  10

特定ドメインに対する最新 10 件のブロック攻撃

your_domain_nameを実際のドメイン名に置き換えてください。

matched_host: your_domain_name
and final_action: block |
SELECT
  time,
  real_client_ip,
  http_user_agent
ORDER by
  time desc
LIMIT
  10

特定ドメインに対する最後のブロック攻撃からの経過日数

結果は小数点以下 1 桁に四捨五入されます。

matched_host: your_domain_name
and final_action: block |
SELECT
  time,
  round((to_unixtime(now())-__time__) / 86400, 1) as "days_passed",
  real_client_ip,
  http_user_agent
ORDER by
  time desc
LIMIT
  10

日次の攻撃傾向

date_trunc関数を使用して、攻撃のタイムスタンプを日単位でグループ化します。この関数の詳細については、「日時関数」をご参照ください。

matched_host: your_domain_name
and final_action: block |
SELECT
  date_trunc('day', __time__) as dt,
  count(1) as PV
GROUP by
  dt
ORDER by
  dt

国別の攻撃内訳

ip_to_country関数を使用して、クライアントの IP アドレスを国にマッピングします。real_client_ip-(プロキシ利用中または IP ヘッダーが無効)の場合、クエリはremote_addrを使用します。

matched_host: your_domain_name
and final_action: block |
SELECT
  ip_to_country(
    if(real_client_ip = '-', remote_addr, real_client_ip)
  ) as country,
  count(1) as "Number of attacks"
GROUP by
  country

都道府県別の攻撃内訳

ip_to_province関数を使用して、クライアントの IP アドレスを都道府県にマッピングします。この関数の詳細については、「IP 関数」をご参照ください。

matched_host: your_domain_name
and final_action: block |
SELECT
  ip_to_province(
    if(real_client_ip = '-', remote_addr, real_client_ip)
  ) as province,
  count(1) as "Number of attacks"
GROUP by
  province

次のステップ