Log Service の [検索と分析] ページは、新しい Anti-DDoS Pro コンソールの Full Log ページに埋め込まれています。 [ログ全体][ログレポート] ページを切り替えることができます。 Anti-DDoS Pro のログ分析機能を有効にすると、収集したログのリアルタイムでのクエリおよび分析、ダッシュボードの表示および編集、アラートルールの設定ができるようになります。

手順

  1. 新しい Anti-DDoS Pro コンソールにログインします。 左側のナビゲーションペインで、[統計] > [ログ全体] を選択します。
  2. ログレポートを表示する Web サイトドメインを選択し、[状態] がオンになっていることを確認します。
  3. [ログ全体] をクリックします。

    Log Service の Search & Analysis ページは、[ログ全体] ページに埋め込まれています。 matched_host: "0523.yuanya.aliyun.com" のようなデフォルトのフィルタリング条件に基づいて、ターゲット Web サイトのログが表示されます。

    図 1. Full log
  4. 検索ステートメントを入力し、時間間隔を選択して、[検索と分析] をクリックします。
    Anti-DDoS Pro のログは 180 日間保存されます。 デフォルトでは、過去 180 日間のログデータのみをクエリできます。
    図 2. ログのクエリ
検索と分析ページでは、クエリと分析をカスタマイズできます。
  • 組み込み構文を使用したログ検索および処理

    Log Service は、複雑なシナリオのログクエリのクエリ構文と分析構文をサポートしています。 詳細は、 本ページの「組み込み構文を使用したログ検索および処理」をご参照ください。

  • 期間ごとのログエントリ分布の表示
    検索ボックス下のヒストグラムには、ステートメントと時間範囲の両方に一致するログエントリの分布が表示されます。 横軸は時間、縦軸はログエントリ数を示します。 クエリされたログエントリの総数がヒストグラムの下に表示されます。
    ヒストグラム上でマウスポインターをドラッグして、時間範囲を絞り込むことができます。 タイムピッカー が時間範囲を自動的に更新し、クエリ結果も自動的に更新されます。
    図 3. 時間ごとのログエントリ分布
  • 生ログの表示

    [生ログ] タブページでは、各ログエントリの詳細が個別のページに表示され、ログが生成された時刻とログの内容を確認することができます。 ログには、フィールドとその値が含まれています。 ログエントリを並べ替え、ログをダウンロードして、 [列の設定] をクリックして表示する列項目を選択します。

    ログコンテンツのフィールド値またはフィールド値の一部をクリックすると、対応する条件が検索ボックスに自動的に明示されます。 たとえば、request_method: GETGET をクリックすると、次のステートメントが自動的に検索ボックスに追加されます。

    <The original search statement> and request_method: GET
    図 4. Raw logs
  • 分析グラフの表示

    Log Serviceは、分析結果をグラフで表示することができます。 グラフタブで必要に応じてグラフの種類を選択します。 詳細は、「グラフの種類」をご参照ください.

    図 5. 分析グラフ
  • クイック分析

    クイック分析機能には、使いやすいインタラクティブなエクスペリエンスがあります。 これは、指定した時間範囲でのフィールド分布を分析します。 この機能により、キーデータのインデックス作成にかかる時間が短縮されます。 詳細は「クイック分析 (Quick analysis)」をご参照ください。

    図 6. クイック解析

組み込み構文を使用したログ検索および処理

ステートメントは、クエリ節(Search) と分析節 (Analytics) で構成され、縦棒 ( | ) で区切られます。

$Search | $Analytics
説明
Query クエリ節には、キーワード、文字列、数値、値の範囲、またはそれらの組み合わせを含めることができます。 節が指定されていなかったり、アスタリスク (*) しか含まれていなかったりした場合、検索結果はすべてのログエントリを含みます。
Analysis 分析節を使用してクエリ結果を処理できます。
クエリ節と分析節はどちらもオプションです。 クエリ節が指定されていない場合、クエリ結果には指定された時間範囲のすべてのログエントリが含まれ、すべてのログエントリは分析節に基づいて処理されます。 分析節が指定されていない場合、クエリ結果は処理されずに返されます。

クエリ構文

Log Service のクエリ機能には、 全文検索フィールドで検索 があります。 検索ボックス内のステートメントは、複数行に分けての表示や強調表示が可能です。
  • 全文検索

    キーワードを入力して、フィールド名を指定せずにすべてのログエントリを検索できます。 複数のキーワードを使用するには、各キーワードを引用符 (") で囲み、スペースまたは and で区切ります。

    例:
    • 複数キーワード検索

      以下のステートメントを使用して、www.aliyun.com および error を含むログエントリを検索できます。 例:

      www.aliyun.com error

      または

      www.aliyun.com and error
    • 条件付き検索

      次のステートメントを使用して、www.aliyun.com および error を含むログエントリ、または www.aliyun.com および 404 を含むログエントリを検索できます。 例:

      www.aliyun.com and (error or 404)
    • 前方一致検索

      次のステートメントを使用して、www.aliyun.com および failed_ で始まるキーワードの両方を含むログエントリを検索できます。 例:

      www.aliyun.com and failed_*
      アスタリスク (*) は末尾に使用できますが、アスタリスク (*) を先頭には使用できません。 たとえば、 *_error はステートメントとして使用できません。
  • フィールドで検索

    Log Service は、フィールドに基づくより正確なクエリをサポートしています。

    数値フィールドの比較は、field: value または field>=value、および別のフィルタリング条件である andor の形式で使用できます。 この機能は、全文検索と andおよび or などの個別のフィルタリング条件と一緒に使用できます。

    Anti-DDoS Pro の Web サイトアクセスログと攻撃ログもフィールド検索をサポートしています。 各ログフィールドの説明、タイプ、および形式の詳細については、「ログフィールド」をご参照ください 。

    例:
    • 複数のフィールドを指定して検索

      次のステートメントを使用して、 www.aliyun.com に CC攻撃を記録するすべてのログエントリを検索できます。

      matched_host: www.aliyun.com and cc_blocks: 1

      特定のクライアントから www.aliyun.com の 404 エラーへの訪問を記録するすべてのログエントリを検索できます。 次の例では、クライアントの IP アドレスは 10.2.3.4 です。

      real_client_ip: 10.2.3.4 and matched_host: www.aliyun.com and status: 404
      上記の例では、matched_hostcc_blocksreal_client_ipstatus は Anti-DDoS Pro のアクセスおよび攻撃ログで定義されたフィールドです。 ログフィールドの詳細は、「ログフィールド」をご参照ください。
    • 数字を指定して検索

      以下のステートメントを使用して、応答時間が 5 秒を超えるログエントリを検索できます。

      request_time_msec > 5000

      値の範囲を指定して、ログエントリを検索できます。 次の例では、応答時間は 5 秒以上 10 秒以下です。

      request_time_msec in (5000 10000]

      以下のステートメントも使用できます。

      request_time_msec > 5000 and request_time_msec <= 10000
    • 特定のフィールドが存在するかどうかを確認します

      以下のステートメントを使用して、特定のフィールドが存在するかどうかを確認できます。

      • ua_browserフィールドを含むログエントリを検索する:ua_browser: *
      • ua_browserフィールドを含まないログエントリを検索する:not ua_browser: *
クエリ構文の詳細は、「インデックスとクエリ」をご参照ください。

分析構文

ログデータの分析と統計には SQL-92 構文を使用します。 Log Service でサポートされている構文と機能の詳細は、「分析文法」を参照してください。
  • 分析節では、from log 部分は、標準SQLステートメントの from <table name> 部分に似ているので、省略可能です。
  • デフォルトでは、最初の 100 のログエントリが返されます。 「LIMIT 構文」を使用して、返されるログエントリの数を変更できます。

時間ベースのログクエリと分析

Anti-DDoS Pro の各ログエントリには、yyyy-MM-ddTHH:mm:ss+<time zone> 形式で time フィールドがあります。 たとえば、2018-05-31T20:11:58+08:00 の中のタイムゾーンは UTC+8 です。 各ログエントリには組み込みフィールドがあります。__time__ はログエントリが生成された時間を示し、時間ベースの計算を実行できます。 このフィールドの形式は「Unix タイムスタンプ (Unix timestamp)」で、このフィールドの値は 1970 年 1 月 1 日 00:00:00 世界標準時 (UTC) から経過した秒数を示します。 したがって、タイムスタンプの計算後、表示する前にフォーマットする必要があります。
  • 時間の選択および表示
    次の例は、ある特定期間における www.aliyun.com の CC 攻撃を記録する直近の 10 のログエントリを検索する方法です。 クエリ結果には、time、real_client_ip、および http_user_agent フィールドが含まれており、ログエントリは time フィールドに基づいて並び替えることができます。
    matched_host: www.aliyun.com and cc_blocks: 1 
    |  select time, real_client_ip, http_user_agent
        order by time desc
        limit 10
    図 7. 時間の選択および表示
  • 時間の計算
    CC 攻撃からの日数を計算するには、 __time__ フィールドを使用できます。 例:
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | select time, 
              round((to_unixtime(now()) - __time__)/86400, 1) as "days_passed",             real_client_ip, http_user_agent
          order by time desc
          limit 10
    前術の例では、round((to_unixtime(now()) - __time__)/86400, 1) を計算に使用しています。 now() が取得した時間を Unix timestamp に変更するためには to_unixtime 関数を使用します。 計算値から差し引いた組み込みの __time__ フィールドは、経過した秒数です。 各 CC 攻撃からの日数は、秒数を 86,400 で割り、 round(data, 1) 関数を使用して小数点以下を四捨五入した数です。 86,400 は 1 日の合計秒数です。
    図 8. クエリの結果
  • 組み込み時間を使用してログエントリをグループ化
    次の SQL ステートメントを使用して、Web サイトの CC 攻撃を特定の時間範囲で毎日クエリすることができます。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | select date_trunc('day', __time__) as dt, 
             count(1) as PV 
          group by dt 
          order by dt
    前の例では、組み込みの __time__ フィールドはログエントリの時間範囲を日として指定する date_trunc('day', ...) 関数として使用されています。 ログエントリが生成された日に基づいて、各ログエントリをグループに割り当てます。 各グループのログエントリの総数のカウントには、count(1) を使用します。 これらのログエントリはグループ化され、dt フィールドを使用して並べ替えられます。 date_trunc 関数の最初のパラメーターに他の値を使用して、secondminutehourweekmonthyear など、他の時間単位に基づいてログエントリをグループ化することができます。 時間に関連する関数の詳細は、「日付と時間の関数」をご参照ください。
    図 9. 分析結果
    分析結果は折れ線グラフで表示できます。
    図 10. 折れ線グラフ
  • 自己定義の時刻でログエントリをグループ化
    自己定義の時刻でログエントリをグループ化する場合は、複雑な計算が必要です。 次のSQL ステートメントを使用すると、Web サイトに対する CC 攻撃のログエントリを 5 分以内ごとに クエリできます。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | select from_unixtime(__time__ - __time__% 300) as dt, 
             count(1) as PV 
          group by dt 
          order by dt 
          limit 1000
    前術の例では、__time__ - __time__% 300 に組み込みの時間フィールドが含まれ、その結果は from_unixtime 関数を使用してフォーマットされます。 各ログエントリは、5 分 ( 300 秒) の時間範囲を示すグループに割り当てられます。 各グループのログエントリの総数のカウントには、count(1) を使用します。 これらのログエントリはグループ化され、dt フィールドを使用して並べ替えられます。 最初の 1,000のログエントリは、選択した時間範囲のログエントリの最初の 83 時間に相当します。
    図 11. 分析結果
    分析結果は折れ線グラフで表示できます。
    図 12. 折れ線グラフ
時間に関連する関数の詳細は、「日付と時間の関数」をご参照ください。 たとえば、date_parse および date_format 関数は、時間の形式を別の形式に変換することができます。

クライアント IP アドレスベースのログクエリと分析

Anti-DDoS Pro のログエントリでは、 real_client_ip フィールドは、実際のクライアント IP アドレスを表します。 ただし、ユーザーがプロキシを使用していなかったり、ヘッダーのIPアドレスが正しくなかったりするために実際の IP アドレスを取得できない場合は、remote_addr フィールドの使用が可能です。
  • 攻撃者の国別分布
    次のステートメントを使用して、Web サイトでの CC 攻撃の発信元の国を分析できます。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | SELECT ip_to_country(if(real_client_ip='-', remote_addr, real_client_ip)) as country, 
             count(1) as "number of attacks" 
             group by country
    前の例では、if(condition, option1, option2) 関数は実際のクライアントの IP アドレスを返します。 real_client_ip- の場合、この関数は remote_addr の値を返します。 それ以外の場合、この関数は real_client_ip を返します。 ip_to_country 関数は、クライアント IP アドレスに対応する国情報を取得するために使用します。
    分析結果を世界地図に表示できます。
    図 13. 世界地図
  • 訪問者の省別分布
    次の例は、 省ごとの訪問者分布を取得するための、ip_to_provinceの使い方を示しています。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | SELECT ip_to_province(if(real_client_ip='-', remote_addr, real_client_ip)) as province, 
             count(1) as "number of attacks" 
             group by province
    前の例では、IP アドレスの発信元 (省) を取得するために ip_to_province 関数を使用しています。 IP アドレスが中国にない場合、システムはこの IP アドレスがある省や州を取得しようとします。
  • ヒートマップでの攻撃者分布
    次の例は、攻撃者の分布を示すヒートマップを取得する ip_to_geo 関数の使い方です。
    matched_host: www.aliyun.com  and cc_blocks: 1 
    | SELECT ip_to_geo(if(real_client_ip='-', remote_addr, real_client_ip)) as geo, 
             count(1) as "number of attacks" 
             group by geo
             limit 10000
    前の例では、IP アドレスの緯度と経度を取得するために ip_to_geo 関数を使用しています。 最初の 10,000 レコードを取得するために、制限は 10,000 に設定されています。
    図 14. 分析結果:ヒートマップでの攻撃者分布
    分析結果は Amap に表示することができます。
    図 15. Amap
サポートされている IP ベースの関数の詳細は、「IP 機能」をご参照ください。 たとえば、IP アドレスのプロバイダーを取得する ip_to_provider 関数は使用可能です。 IP アドレスがパブリックかプライベートかを判別する ip_to_domain 関数も使用することができます。