為網站域名開啟WAF日志采集后,您可以使用日志查詢功能對采集到的日志數據進行實時查詢與分析,并基于查詢與分析結果生成統計圖表、創建告警等。

前提條件

已開通WAF日志服務。具體操作,請參見快速使用WAF日志服務

查詢和分析日志

  1. 登錄Web應用防火墻控制臺,在頂部菜單欄,選擇WAF實例的資源組和地域(中國內地非中國內地)。
  2. 在左側導航欄,選擇安全運營 > 日志服務
  3. 從域名下拉列表中選擇要開啟日志采集的網站域名,打開右側的狀態開關,開啟該網站域名的日志采集功能。開啟日志采集
    域名下拉列表(圖示①)僅包含已接入WAF防護的網站域名。如果您還未將網站域名接入WAF防護,請先完成網站接入。具體操作,請參見使用教程
  4. 日志查詢頁簽,通過查詢與分析語句,對WAF日志數據進行查詢與分析。日志查詢
    1. 在語句輸入框(圖示①),輸入查詢語句。
      查詢語句采用阿里云日志服務專用語法,關于該語法的詳細介紹,請參見查詢語法。查詢語句中使用WAF日志包含的字段作為查詢字段,關于支持使用的查詢字段,請參見WAF日志字段
      如果您不了解日志查詢語法,推薦您使用高級搜索。您只需在語句輸入框上方展開高級搜索,設置搜索條件并單擊搜索,語句輸入框即可自動生成與搜索條件匹配的日志查詢語句。下表描述了高級搜索支持設置的搜索條件。
      搜索條件 說明
      IP 發起請求的客戶端的IP地址。
      Trace ID WAF為客戶端請求生成的唯一標識。WAF向客戶端返回攔截頁面或者滑塊驗證響應時會提供該ID,用于問題分析與故障排查。
      Rule ID 請求命中的WAF防護規則ID。您可以在安全報表或者系統管理 > 防護規則組頁面,獲取規則ID信息。
      服務器響應狀態碼 源站服務器響應WAF回源請求的HTTP狀態碼。
      WAF返回客戶端響應碼 WAF響應客戶端請求的HTTP狀態碼。
      攔截規則 請求命中的WAF防護規則的類型。關于WAF防護模塊的介紹及不同模塊防護規則的配置方法,請參見概述
    2. 如果您需要對查詢結果進行計算和統計分析,可以在語句輸入框(圖示①)已輸入的查詢語句后,輸入分析語句。如果您只需要查詢滿足條件的日志數據,可跳過該步驟。
      分析語句和查詢語句間使用豎線(|)分隔。分析語句采用標準的SQL92語法,關于分析語句的更多介紹,請參見分析概述
    3. 通過時間選擇器(圖示②),修改日志查詢時間范圍。
    4. 單擊查詢/分析(圖示③)。
      查詢與分析結果(即命中查詢條件的WAF日志數據)將會顯示在頁面下方,包含日志分布直方圖、原始日志統計圖表。您可以基于查詢結果進行快速分析、生成統計圖表、設置告警等。具體操作,請參見操作查詢和分析結果創建告警
    更多關于日志查詢與分析的案例,請參見查詢與分析案例

操作查詢和分析結果

WAF日志服務為您提供日志分布直方圖、原始日志和統計圖表形式的展示查詢分析結果,并支持設置告警、快速查詢等操作。
  • 日志分布直方圖
    日志分布直方圖主要展示查詢到的日志在時間上的分布。 分布直方圖
    • 鼠標指向綠色數據塊時,可以查看該數據塊代表的時間范圍和日志命中次數。
    • 單擊綠色數據塊,可以查看更細時間粒度的日志分布,同時在原始日志頁簽中同步展示指定時間范圍內的查詢結果。
  • 原始日志
    您可以在原始日志頁簽中,查看日志查詢結果。 原始日志
    • 快速分析
      單擊別名圖標,選擇顯示KeyKey的別名,該別名可在創建索引時配置。例如host_name的別名為host,如果你選擇顯示別名,則在快速分析列表中顯示host
      說明 當某字段沒有別名時,您選擇顯示別名,在快速分析列表中仍顯示字段名(Key)。

      更多信息,請參見快速分析

    • 查看日志詳情
      • 單擊表格,查看表格形式的日志。
      • 單擊原始,查看原始形式的日志。
        • 單擊復制圖標,復制日志。
        • 單擊tag詳情圖標,查看tag詳情。
      • 單擊換行,關閉或開啟換行顯示日志。
      • 單擊時間,開啟按時間順序顯示日志。
      • 單擊下載日志圖標,可以將日志下載到本地計算機,支持直接下載、通過Cloud Shell下載、通過命令行工具下載等方式。更多信息,請參見下載日志
      • 單擊設置圖標,配置Tag設置列設置JSON設置事件配置
  • 統計圖表
    您可以在統計圖表頁簽,查看可視化的查詢分析結果。您必須在語句輸入框中輸入SQL92分析語句,才可以在統計圖表頁簽查看對應的統計圖表。
    • 切換圖表類型:選擇不同的圖表類型來查看分析結果。關于不同圖表類型的介紹,請參見圖表設置
    • 預覽圖表:切換圖表類型后,查看圖表預覽效果。

      單擊添加到儀表盤,可以將當前圖表添加到儀表盤。單擊下載日志,可以將日志下載到本地計算機,支持直接下載通過Cloud Shell下載通過命令行工具下載等方式。具體操作,請參見下載日志

    • 修改統計圖表配置
      操作 說明
      通用配置 對統計圖表進行全局配置。例如選擇顏色方案后,整個統計圖表的顏色都基于該顏色方案進行展示。
      字段配置 對單個查詢分析的結果或單個查詢分析結果中的單列數據進行個性化的可視化設置。例如選擇某個查詢分析后,再選擇顏色方案,則該查詢分析結果相關的圖形顏色基于該顏色方案進行展示。
      設置交互事件 對單個查詢分析的結果或單個查詢分析結果中的單列數據進行交互設置,加深數據分析的維度。
  • 日志聚類

    日志聚類頁簽,單擊開啟日志聚類,可實現在采集日志時將相似度高的日志聚合。更多信息,請參見日志聚類

創建告警

您可以基于當前查詢與分析語句創建告警。創建告警后,日志服務將定期檢查查詢與分析結果,并在檢查結果滿足預設條件時,向您發送告警通知,實現實時的服務狀態監控。

在查詢分析頁面上,選擇另存為告警 > 新版告警,可為查詢分析結果設置告警。更多信息,請參見設置告警

查詢與分析案例

  • 15分鐘為步長,分析在整點時刻由不同WAF防護模塊攔截的攻擊請求的數量,展示時間(time)、WAF規則防護引擎攔截請求數(wafmodule)、IP黑名單及自定義防護策略(ACL訪問控制)攔截請求數(aclmodule)、CC安全防護及自定義防護策略(CC攻擊防護)攔截請求數(httpfloodmodule)。
    * |
    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
  • 分析觸發了WAF最終防護動作的防護模塊類型(final_plugin)的分布情況,展示命中次數(times)、被請求域名(host)和最終防護模塊(final_plugin)。
    * |
    SELECT
      count(*) as times,
      host,
      final_plugin
    GROUP by
      host,
      final_plugin
    ORDER by
      times desc
  • 15分鐘為步長,分析整點時刻的QPS,展示時間(time)和QPS(QPS)。
    * |
    SELECT
      time_series(__time__, '15m', '%H:%i', '0') as time,
      count(*) / 900 as QPS
    GROUP by
      time
    ORDER by
      time
  • 分析受CC攻擊次數最多的域名,展示CC攻擊攔截次數(times)和被訪問域名(host)。
    *
    and acl_action :block |
    SELECT
      count(*) as times,
      host
    GROUP by
      host
    ORDER by
      times desc
  • 以秒為步長,分析網站請求日志的詳情,展示時間(time)、被訪問域名(host)、被訪問路徑(request_path)、請求方法(request_method)、WAF響應客戶端請求的HTTP狀態碼(status)、源站響應WAF回源請求的HTTP狀態碼(upstream_status)、查詢字符串(querystring)。
    * |
    SELECT
      date_format(date_trunc('second', __time__), '%H:%i:%s') as time,
      host,
      request_path,
      request_method,
      status,
      upstream_status,
      querystring
    LIMIT
      10
  • 查詢網站(your_domain_name)遭受的最近10條攻擊請求記錄,展示請求發起時間(time)、真實客戶端IP(real_client_ip)和客戶端類型(http_user_agent)。
    matched_host: your_domain_name
    and final_action: block |
    SELECT
      time,
      real_client_ip,
      http_user_agent
    ORDER by
      time desc
    LIMIT
      10
  • 分析網站(your_domain_name)遭受的攻擊請求被WAF攔截后經過的天數(days_passed,保留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
  • 分析網站(your_domain_name)遭受的攻擊請求次數按天的變化趨勢。
    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
    date_trunc函數用于對當前時間進行按天對齊分組。關于該函數的更多信息,請參見日期和時間函數
  • 分析網站(your_domain_name)遭受的攻擊請求的來源國家(country)分布。
    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 "攻擊次數"
    GROUP by
      country
    WAF日志中real_client_ip字段表示真實客戶端IP。如果由于用戶通過代理服務器訪問或請求頭中IP字段有誤等原因無法獲取真實客戶端IP(real_client_ip取值為-),也可以直接使用remote_addr字段(表示直連客戶端IP)作為真實客戶端IP。
  • 分析網站(your_domain_name)遭受的攻擊請求的來源省份(province)分布。
    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 "攻擊次數"
    GROUP by
      province
    ip_to_province函數用于獲取真實客戶端IP對應的省份信息。關于該函數的更多信息,請參見IP函數