Web アプリケーションファイアウォール (WAF) コンソールのリアルタイムログ照会と分析サービスページは、ログ分析機能とログレポート機能に統合されています。 ドメインに対して WAF ログ収集機能を有効にしたら、リアルタイムログ照会と分析サービスページでリアルタイムの照会と分析を実行し、ダッシュボードを表示または編集し、モニタリングとアラームを設定します。
手順
- Web Application Firewall コンソールにログインし、 をクリックします。
- [リアルタイムログ照会と分析サービス] エリアをクリックして、[Log Service] ページを開きます。
- ドメインを選択し、右側の [ステータス] スイッチがオンになっていることを確認します。
- [ログ分析] をクリックします。
現在のページは [照会と分析] ページに統合されています。 クエリ文が自動的に挿入されます。 たとえば、
matched_host: "www.aliyun.com"
を使用して、文中のドメインに関連するログエントリをすべて照会します。 - クエリ文と分析文を入力し、ログ時間範囲を選択し、[検索と分析] をクリックします。
その他操作
- 照会と分析のカスタマイズ
Log Service は、さまざまな複雑なシナリオでログエントリを照会するためのリッチクエリおよび分析構文を提供します。 詳細は、本ページの「照会と分析のカスタマイズ」をご参照ください。
- 期間ごとのログエントリ分布の表示クエリボックスの下に、期間とクエリ文によってフィルターされたログエントリ分布を表示します。 ヒストグラムを使用して分布を示します。横軸は期間を示し、縦軸はログエントリ数を示します。 照会結果内のログエントリの総数も表示されます。注 マウスの左ボタンを押しながらヒストグラムをドラッグして、より短い期間を選択します。
time picker
は、期間を自動的に更新し、更新した期間に基づいて照会結果も更新されます。 - Raw ログエントリの表示
[Raw ログ] タブで、各ログエントリが単一ページで詳細に示され、ログエントリが生成された時刻、コンテンツ、およびログエントリ内のプロパティが含まれています。 [コンテンツ列の表示] をクリックして、コンテンツ列の長い文字列に対する表示モードを設定します。 (フルラインまたは 改行)。 [列の設定] をクリックして特定のフィールドを表示する、または [ログのダウンロード] ボタンをクリックして照会結果をダウンロードします。
また、値またはプロパティ名をクリックして、クエリボックスにクエリ条件を追加します。 たとえば、
request_method: GET
フィールドの値GET
をクリックすると、クエリボックス内のクエリ文は次のように更新されます。<The original query statement> and request_method: GET
- 分析グラフの表示
Log Service を使用して、分析結果をグラフで表示可能です。 グラフタブで必要に応じてグラフの種類を選択します。 詳細は、「分析グラフ」をご参照ください。
- クイック分析の実行
Raw ログタブのクイック分析機能では、ワンクリックの対話型エクスペリエンスが提供されます。指定期間内の単一のプロパティによってログエントリ分布へのすばやいアクセスが提供されます。 この機能により、キーデータのインデックス作成にかかる時間を短縮します。 詳細は、次のセクションの「クイック分析」をご参照ください。
照会と分析のカスタマイズ
ログクエリ文は、照会 (検索) と分析 (分析論) から構成されます。 これら 2 つの部分は縦線で区切られています (|
)。
$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
にはなり得ません。
- 複数キーワード照会
- フィールド検索
指定したフィールドに基づいてより正確な照会を実行します。
フィールド検索は、数値型のフィールドに対する比較クエリをサポートしています。 形式はfield name:value
またはfield name>=value
です。 また、and
またはor
を使用して組み合わせクエリを実行します。これは、フルテキストインデックスと組み合わせて使用されます。注 WAF Log Service のドメイン名に対するアクセス、操作、および攻撃を記録するログエントリの照会もフィールドで実行されます。 フィールドの意味、種類、形式、およびその他の情報の詳細については、「WAF ログエントリのフィールド」をご参照ください。例- 複数フィールド照会
次の文を使用して、
www.aliyun.com
ドメインに対する HTTP フラッド攻撃を記録し、WAF によって阻止されるすべてのログエントリを照会します。matched_host: www.aliyun.com and cc_blocks: 1
IP アドレスが
1.2.3.4
である特定のクライアントからwww.aliyun.com
へのアクセスを記録するすべてのログエントリを照会する場合で、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
フィールドは WAF ログに定義されているフィールドです。 - 数値フィールド照会
次の文は、応答時間が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 構文を使用します。
照会と分析の例
時間ベースのログ照会と分析
各 WAF ログエントリには time
フィールドがあり、ログエントリが生成された時刻を表すために使用されます。 このフィールドの値の形式は、 <year>-<month>-<day>T<hour>:<minute>:<second>+<time zone>
です。 たとえば、2018-05-31T20:11:58+08:00
は、2018 年 5 月 15 日 20:11:58 UTC+8
(北京時間) です。
__time __
という組み込みフィールドがあり、これはログエントリが生成された時刻を示すためにも使用されます。 このフィールドは、統計を実行するときに計算に使用されます。 このフィールドの形式は
UNIX タイムスタンプであり、このフィールドの値は 1970 年 1 月 1 日 00:00:00 世界標準時 (UTC) から経過した秒数を示します。 したがって、計算結果を表示する場合は、最初に形式を変換する必要があります。
- 時間の選択および表示
time
フィールドに基づいてログを照会します。 たとえば、www.aliyun.com
に対する HTTP フラッド攻撃を記録し、WAF によって阻止された最新の 10 件のログエントリを検索します。 そして、時間フィールド、送信元 IP フィールド、およびクライアントフィールドを表示します。matched_host: www.aliyun.com and cc_blocks: 1 | select time, real_client_ip, http_user_agent order by time desc limit 10
- 時刻を使った計算。
__time __
フィールドを使用して、時刻を使って計算します。 たとえば、ドメインが HTTP フラッド攻撃を受けてから経過した日数を計算します。matched_host: www.aliyun.com and cc_blocks: 1 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)
を使用して、ドメインが HTTP フラッド攻撃を受けてから経過した日数を計算します。 まず、now()
を使用して現在時刻を取得し、to_unixtime
を使用して現在時刻を UNIX タイムスタンプに変換します。 次に、変換した時刻を組み込みフィールド__time __
の値で減算して経過した秒数を取得します。 最後に、86400
(1 日の合計秒数) で割り算し、round(data, 1)
関数を適用して小数第 1 位とします。 結果は、各攻撃ログエントリが生成されてから経過した日数です。 - 特定の時間に基づくグループ統計の実行指定期間内のドメインに対する HTTP フラッド攻撃の傾向に基づいてログを照会します。
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
注 この例では、date_trunc('day', ..)
関数によって組み込みフィールド__time __
を使用して、エントリーの時間を日ごとに揃えます。 ログエントリが生成された日に基づいて、各ログエントリをグループに割り当てます。 count(1) を使用して各グループのログエントリの総数をカウントします。 その後、これらのエントリをグループごとに順序付けます。date_trunc
関数の最初のパラメーターに他の値を使用して、second
、minute
、hour
、week
、month
、year
など、他の時間単位に基づいてログエントリをグループ化します。 この関数の詳細については、「日付と時刻の関数」をご参照ください。注 折れ線グラフで結果を表示することも可能です。 - 時間に基づいたグループ統計の実行。より柔軟なグループ化を使用して時間に基づいてログを分析する場合は、複雑な計算が必要です。 たとえば、5 分以内ごとのドメインに対する HTTP フラッド攻撃の傾向に基づいてログを照会します。
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) を使用して各グループ内のログエントリの総数をカウントします。 最後に、照会結果はグループごとに順序付けされ、最初の 1,000 個の結果が返されます。これには、指定された期間以前の 83 時間以内に生成されたログエントリが含まれます。注 折れ線グラフで結果を表示することも可能です。
date_parse
と date_format
関数を使用して時間形式を変換します。 時間フィールドの解析に使用できる関数の詳細については、「日付と時刻の関数」をご参照ください。
クライアント IP アドレスベースのログ照会と分析
real_client_ip
が含まれ、実際のクライアント IP アドレスを示しています。 ユーザーがプロキシサーバーを介して Web サイトにアクセスする場合、またはリクエストヘッダーの IP
アドレスが間違っている場合は、ユーザーの実際の IP アドレスを取得できません。 ただし、remote_addr
フィールドは、クライアントへの直接接続を形成し、これを使用して実際の IP アドレスを取得します。
- 攻撃者の国別の分類HTTP フラッド攻撃者の国別分布に基づいてログを照会します。
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 アドレスから国情報を取得します。注 世界地図で結果を表示することも可能です。 - 都道府県別の訪問者の分布都道府県別の訪問者の分布を知るには、
ip_to_province
関数を使用して IP アドレスから都道府県情報を取得します。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_to_province
関数を使用して、クライアントの実際の IP アドレスから国の情報を取得します。 IP アドレスが中国本土にない場合、この関数は国フィールドに IP アドレスの都道府県を返します。 ただし、結果を中国の地図で表示することを選択した場合、中国本土にない IP アドレスは表示されません。注 中国地図で結果を表示することも可能です。 - 攻撃者の分布を示すヒートマップ
ip_to_geo
関数を使用して、クライアントの実際の IP アドレスから地理情報 (緯度と経度) を取得します。 この情報を使用して、攻撃の密度を示すためのヒートマップを生成します。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_to_geo
関数を使用して、クライアントの実際の IP アドレスから緯度と経度を取得します。 最初の 10,000 件の結果が返されます。[Amap] をクリックして [ヒートマップの表示] をクリックします。
ip_to_provider
関数を使用して IP プロバイダー名を取得し、ip_to_domain
関数を使用して IP がパブリック IP かプライベート IP かを判別します。 IP アドレスを解決するために使用できる関数の詳細については、「IP 関数」をご参照ください。