Anti-DDoS Pro は、Log Service のフルログページをログ分析とログレポートに埋め込んでいます。 特定の Web サイトに対して DDoS ログ保護機能を有効にすると、現行ページでリアルタイムに収集されたログデータを照会および分析し、ダッシュボードを表示または編集し、モニタリングアラームを設定できます。
手順
- Anti-DDoS Pro コンソールにログインし、左側のナビゲーションペインで を選択します。
- DDoS ログ収集保護を有効にする Web サイトを選択して、ステータスがオンになっていることを確認します。
- ログ分析をクリックします。
現行のページには Log Service のクエリ分析ページが埋め込まれており、システムは自動的に
matched_host:www.aliyun.com
などのクエリステートメントを入力して、選択した Web サイトに基づいてログデータを表示します。図 1. ログ分析 - クエリ分析ステートメントを入力し、ログ時間範囲を選択してクエリをクリックします。
注 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) | クエリ結果または全データ量を計算し、統計します。 |
クエリ構文
- フルテキストクエリ
フィールドを指定することなく、キーワードクエリを直接入力することができます。 キーワードを二重引用符( "")で囲み、スペースで区切るか、複数のキーワードの間に
and
を挿入します。例- 複数キーワードクエリ
www.aliyun.com
とerror
を含むログを検索します。 例: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
を使用して組み合わせることができます。 また、and
とor
の組み合わせを使用して、フルテキスト検索と組み合わせることもできます。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_host
、cc_blocks
、real_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: *
- 複数フィールドクエリ
分析構文
時間ベースのログクエリ分析
年-月-日-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
の最初の引数は、second
、miniute
、hour
、week
、month
、year
を含むその他の単位の配置を提供します。 関数の詳細は、日付と時間の関数をご参照ください。 - 時間ベースのグループ統計
より柔軟なグループ化時間ルールを使用するには、たとえば、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_parse
と date_format
を使用する必要があります。 詳細は、日付と時間の関数をご参照ください。
クライアント 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_to_provider
の取得、IP がインターネットかイントラネットの ip_to_domain
かの判断など、その他の IP ベースの構文解析機能については、IP 機能をご参照ください。