Anti-DDoS Pro は、Log Service のフルログページをログ分析ログレポートに埋め込んでいます。 特定の Web サイトに対して DDoS ログ保護機能を有効にすると、現行ページでリアルタイムに収集されたログデータを照会および分析し、ダッシュボードを表示または編集し、モニタリングアラームを設定できます。

手順

  1. Anti-DDoS Pro コンソールにログインし、左側のナビゲーションペインで Log > Full logを選択します。
  2. DDoS ログ収集保護を有効にする Web サイトを選択して、ステータスがオンになっていることを確認します。
  3. ログ分析をクリックします。

    現行のページには Log Service のクエリ分析ページが埋め込まれており、システムは自動的に matched_host:www.aliyun.com などのクエリステートメントを入力して、選択した Web サイトに基づいてログデータを表示します。

    図 1. ログ分析


  4. クエリ分析ステートメントを入力し、ログ時間範囲を選択してクエリをクリックします。
    DDoS ログのデフォルトの保存期間は3日です。 3 日後、ログデータは削除されます。 デフォルトでは、過去 3 日間のログデータのみをクエリできます。 ログ保存時間を変更するには、ログ保存時間の変更をご参照ください。
    図 2. ログクエリ


[クエリと分析]ページでは、以下の操作も実行できます。
  • カスタムクエリと分析

    Log Service は、多様な複雑なシナリオでログクエリをサポートするために、さまざまなクエリおよび分析構文を提供します。 詳細は、カスタムクエリと分析をご参照ください。

  • ログ時間分布を表示する
    検索ボックスの下には、クエリ時刻とクエリステートメントに一致するログの時間分布が表示されます。 時間分布は、横軸と縦軸のヒストグラム形式で表示されます。 クエリされたログの総数が表示されます。
    ヒストグラムをスライドさせて、より絞り込んだ範囲のタイムゾーンを選択すると、タイムピッカーが選択した時間範囲を自動的に更新して結果を更新します。
    図 3. ログ時間分布を表示する


  • Raw ログを表示する

    Raw ログでは、各ログの詳細がページ区切りで表示されます。時間、内容、及びそのうちの各フィールドも含まれます。 列の並べ替え、現行のクエリ結果のダウンロード、歯車アイコンをクリックして特定のフィールドを選択して表示することなどができます。

    ページ内の対応するフィールドの値または一部をクリックすると、検索ボックスに適切な検索条件が自動的に入力されます。 たとえば、request_method:GET で値 GET をクリックすると、次のステートメントが自動的に検索ボックスに追加されます。

    Raw search statement and request_method: GET
    図 4. Raw ログ


  • 分析グラフの表示

    Log Service は分析結果のグラフィック表示をサポートしています。統計グラフページでさまざまなグラフタイプを選択できます。 詳細は、分析グラフを参照してください。

    図 5. 統計グラフ


  • クイック分析

    クイック分析機能は、ワンクリックの対話式クエリを提供します。これにより、一定期間にわたるフィールドの分布を迅速に分析し、重要なデータのインデックス付けにかかる時間コストを削減できます。 詳細は、クイック分析をご参照ください。

    図 6. クイック分析


カスタムクエリ分析

ログクエリステートメントは、クエリ構文(Search)と分析構文(Analytics)の 2 つの部分で構成され、 | で区切られています。

$Search | $Analytics
タイプ 説明
クエリ(Search) クエリ条件は、キーワード、ファジー、数値、間隔範囲、および組み合わせ条件によって生成できます。 空白のまま、または * にすると、すべてのデータが表示されます。
分析 (Analytics) クエリ結果または全データ量を計算し、統計します。
検索と分析は両方オプションです。 Search が空の場合、指定した期間内のすべてのデータはフィルター処理されず、結果は直接統計されます。 Analytics が空の場合、クエリ結果が返され、統計は収集されません。

クエリ構文

Log Service のクエリ構文は、フルテキストクエリフィールドクエリをサポートしています。 クエリボックスは、改行表示、構文の強調表示、及びその他の機能をサポートしています。
  • フルテキストクエリ

    フィールドを指定することなく、キーワードクエリを直接入力することができます。 キーワードを二重引用符( "")で囲み、スペースで区切るか、複数のキーワードの間に and を挿入します。

    • 複数キーワードクエリ

      www.aliyun.comerror を含むログを検索します。 例:

      www.aliyun.com error

      または

      www.aliyun.com and error
    • 条件付きクエリ

      www.aliyun.com を含み、 error または 404 を含むログを検索します。 例:

      www.aliyun.com and (error or 404)
    • プレフィックスクエリ

      www.aliyun.com を含み、failed_ で始まるすべてのキーワードを検索します。 例:

      www.aliyun.com and failed_*
      クエリはプレフィックス + * をサポートしますが、*_error のようなプレフィックスが* になる形式をサポートしません。
  • フィールドクエリ

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

    数値型フィールドの比較は、 field:value または field>=value のような形式で実装でき、and または or を使用して組み合わせることができます。 また、andor の組み合わせを使用して、フルテキスト検索と組み合わせることもできます。

    DDoS Web サイトのアクセスログと攻撃ログもフィールドクエリに基づくことが可能です。 各フィールドの意味、種類、形式、およびその他の情報については、DDoS ログフィールドをご参照ください。

    • 複数フィールドクエリ

      CC に攻撃された www.aliyun.com を含むログを検索します。

      matched_host: www.aliyun.com and cc_blocks: 1

      Web サイト www.aliyun.com でクライアント 1.2.3.4 のエラー 404 を含むアクセスログを検索します。

      real_client_ip: 1.2.3.4 and matched_host: www.aliyun.com and status: 404
      matched_hostcc_blocksreal_client_ip、および status で使用されているフィールドは、DDoS アクセスおよび攻撃ログのフィールドです。 フィールドに関する詳細情報は、 DDoS ログフィールドを参照してください。
    • 数値フィールドクエリ

      応答時間が 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 でサポートされている構文と機能の詳細は、分析文法を参照してください。
  • 解析ステートメントでは、標準 SQL 構文の from table name ステートメント、つまり from logを省略できます。
  • ログデータはデフォルトで最初の 100 のエントリを返します。戻り値の範囲はLIMIT構文を参照して変更できます。

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

各 DDoS ログには、年-月-日-T時:分:秒 + タイムゾーンの形式の time フィールドがあります。 たとえば、 2018-05-31T20:11:58+08:00 の場合、タイムゾーンは UTC+8、つまり北京の時間です。 同時に、各ログには組み込みフィールド:__time__ があります。これは、このログの時刻も示しているため、時間ベースの計算を統計で実行できます。 形式:Unix タイムスタンプ。 その本質は、1970 年 1 月 1 日 0 時 0 分 0 秒からの累積秒数です。 そのため、実際の使用では、時刻を表示する前に、まず計算とフォーマットが必要となります。
  • 時間の選択及び表示
    特定の期間にわたって、CC に攻撃されたウェブサイト www.aliyun.com の最新の 10 のログを選択し、直接 time フィールドを使用して、時間、送信元 IP およびアクセスクライアントを表示します。
    matched_host: www.aliyun.com and cc_blocks: 1 
    | select time, real_client_ip, http_user_agent
        order by time desc
        limit 10
  • 時間の計算
    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) を使用しています。まず to_unixtime を使用して now() より取得した時刻を Unix タイムスタンプに変換します、そして組込みの時刻フィールド __time__と減算して経過した秒数を取得します。 最後に、1 日の合計秒数である 86400 で割り、それから関数 round(data, 1) を使用して 10 進数に丸めます。 1桁の値は、各攻撃ログが何日かを過ぎたことを示します。
  • 特定の時間に基づくグループ統計
    Web サイトが CC に攻撃されている毎日の様子を知りたい場合は、次の SQL を使用します。
    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))ごとに所属する日付のパーティションにまとめられ、パーティションの時間ブロックでソートされます。 関数 date_trunc の最初の引数は、 secondminiutehourweekmonthyear を含むその他の単位の配置を提供します。 関数の詳細は、日付と時間の関数をご参照ください。
  • 時間ベースのグループ統計
    より柔軟なグループ化時間ルールを使用するには、たとえば、5 分ごとにCCに攻撃されている Web サイトの傾向を把握するには、数学計算が必要です。 次の SQL を実行します:
    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))、そしてパーティションの時間ブロックでソートされ、最初の 1000 のログを取得します(選択した時間内の最初の 83 時間のデータに相当します)。
時間形式の変換など、その他の時間分析関数では、date_parsedate_format を使用する必要があります。 詳細は、日付と時間の関数をご参照ください。

クライアント IP ベースのクエリ分析

DDoS ログにはクライアントの実 IP を取得するための real_client_ip というフィールドがあります。 ただし、ユーザーがプロキシによって実際の IP を取得できず、ヘッダー内の IP アドレスが正しくない場合は、remote_addr フィールドを使用してクライアント IP に直接接続できます。
  • アタッカーの国分布
    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
    real_client_ip フィールドまたは real_client_ip フィールド( real_client_ip- の場合)を選択するには、関数 if(condition, option1, option2) を使用します。 取得した IP を関数 ip_to_country に渡して、この IP に対応する国情報を取得します。
  • アクセス分布
    より詳細な省ベースの分布情報を取得するには、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 の緯度と経度を取得して最初の 10,000 を取得するには、もう一つの IP 関数 ip_to_geo を使用します。
IP演算子 ip_to_provider の取得、IP がインターネットかイントラネットの ip_to_domain かの判断など、その他の IP ベースの構文解析機能については、IP 機能をご参照ください。