Security Centerコンソールの [ログ分析] ページで、複数の複雑なシナリオでカスタムログクエリと分析を実行できます。 このトピックでは、クエリおよび分析ステートメントの構文について説明します。
概要
Security Centerコンソールで、[検索と分析] にSQL文を入力して、カスタムログクエリと分析を実行します。 ログクエリステートメントは、検索構文と分析構文の2つの部分で構成され、縦棒 (|) で区切られています。
を選択し、検索構文や分析構文を指定しなくても、カスタムログクエリと分析を実行できます。 次のリストに、検索構文と分析構文を示します。
- 検索: キーワード、あいまい一致条件、数値、範囲、または組み合わせを使用して検索条件を生成できます。 Search部分の値がアスタリスク (*) または空の場合、指定された期間のデータはフィルタリングされません。 この場合、指定された期間のすべてのデータが分析に使用されます。
- 分析: 検索結果または完全なデータに関する統計を計算および収集します。 Analytics部分の値が空の場合、クエリの結果は返されますが、統計は計算されません。
検索構文
Log Serviceの検索構文は、フルテキストクエリとフィールドクエリの両方をサポートしています。 クエリボックスは、複数行の検索や構文の強調表示などの機能をサポートしています。
- フルテキストクエリ
フィールドを指定しなくても、キーワードを入力してログを検索できます。 複数のキーワードを使用するには、各キーワードを引用符 (
"
) のペアで囲み、スペースまたは演算子と
で区切ります。 例:- 複数のキーワードを指定したクエリ
www.aliyundoc.com
と404
を含むログを検索します。 例:www.aliyundoc.com 404
または:
www.aliyundoc.comと404
- 条件付きクエリ
www.aliyundoc.com
とエラー
を含むログ、またはn www.aliyundoc.comと404
を含むログを検索します。 例:www.aliyundoc.comと (エラーまたは404)
- サフィックスベースのクエリ
www.aliyundoc.com
を含むログを検索し、failed_
で開始します。 例:www.aliyundoc.comと失敗_*
注 フルテキストクエリは、アスタリスク (*
) の付いたサフィックスのみをサポートします。 アスタリスク (*
) の付いたプレフィックスはサポートされていません。
- 複数のキーワードを指定したクエリ
- フィールドクエリ
数値フィールドのデータは、
Field:Value
またはField ≧ Value
を使用してフィルタリングできます。と
またはまたは
を使用して、2つの形式を組み合わせることができます。and
およびまたは
で指定された組み合わせを使用して、フルテキストクエリで使用することもできます。Log Serviceは、フィールドに基づいたより正確なクエリをサポートします。
- マルチフィールドクエリ
重大度レベルが深刻なアラートログを検索します。 例:
__topic__ : sas-security-log and level: serious
IPアドレスが1.2.XX.XXのクライアントですべてのSSHログオンを検索します。 例:
__topic __: aegis-log-loginとip:1.2.XX.XXとwarn_type:SSHLOGIN
注 各ログには、ログトピックを示す__topic__
フィールドが含まれます。 ログはこのフィールドによって区別されます。 これらの例では、level
、warn_type
、ip
などのフィールドは、特定の種類のログのフィールドです。 - 数値フィールドクエリ
応答時間が1秒を超えるすべての内部DNSクエリログを検索します。 例:
__topic __: local-dns and time_usecond > 1000000
範囲ベースのクエリもサポートされています。 たとえば、範囲ベースのクエリを使用して、応答時間が1秒を超え10秒以下の内部DNSログを検索できます。 例:
__topic __: local-[1000000,10000000] のdnsとtime_usecond
構文の詳細については、「概要」をご参照ください。
- マルチフィールドクエリ
Analyticsの構文
SQL-92文を使用して、ログの統計を分析および収集できます。 Log Service でサポートされている構文と機能の詳細は、「分析文法」を参照してください。
標準SQL構文のFROM
tablename句は、analyticsステートメントから省略できます。 これは、FROM LOG
句を省略できることを意味します。
デフォルトでは、Log Serviceは最初の100ログエントリを返します。 LIMIT構文を使用して、返すログエントリの数を変更できます。 詳細については、「LIMIT 構文」をご参照ください。
時間ベースのログ照会と分析
各ログエントリには、このログが生成された時刻を示す組み込みフィールド __time__
があります。 このフィールドは、時間ベースの統計分析を容易にする。 このフィールドの値は、1970年1月1日00:00:00 UTCのエポック時刻から経過した秒数を表すUNIXタイムスタンプです。
したがって、タイムスタンプを表示する前に、サポートされている形式に変換する必要があります。
- 時間を選択して表示
この例では、特定の時間範囲内で、IPアドレスが
1.2.XX.XX
の最後の10のログオンログを照会します。 戻り値には、時刻、送信元IPアドレス、およびログオンタイプが含まれます。 例:__topic __: aegis-log-loginとip: 1.2.XX.XX | select date_format(__time __, '% Y-% m-% d % H:% i:% s') as time, warn_ip, warn_type __time__ descによる注文 制限10
- 時間の計算
__time__
を使用して、ログイン後の日数を計算します。 例:__topic __: aegis-log-loginとip: 1.2.XX.XX | select date_format(__time __, '% Y-% m-% d % H:% i:% s') as time, warn_ip, warn_type, ラウンド (((to_unixtime(now())) - __time__)/86400,1) を "days_passed" として __time__ descによる注文 制限10
この例では、
round((to_unixtime(now()) - __time__)/86400, 1)
を使用して計算を実行します。 まず、関数はto_unixtime
を使用して、now()
によって返された時刻をUNIXタイムスタンプに変換します。 次に、計算値から組み込みの__time__
フィールドを減算して、経過した秒数を取得します。 次に、計算された値を1日の合計秒数である86400で除算します。 最後に、round(data, 1)
関数は、得られた値を小数点以下1桁に丸めて、各攻撃ログが生成されてから経過した日数を計算します。 - 特定の時間に基づくグループ統計特定の時間範囲内のデバイスのログオン傾向を知りたい場合は、次のSQL文を実行します。
__topic __: aegis-log-loginとip: 1.2.XX.XX | date_trunc('day', __time__) をdtとして選択し、PVとしてカウント (1) dtによるグループ dtによる注文
組み込みの
__time__
フィールドは、date_trunc('day', ..)
関数に渡され、時刻を日ごとに揃えます。 各ログエントリは、総数(count(1))
の計算を容易にするために、それが属する日のパーティションにグループ化される。 ログエントリは、パーティションタイムブロックによってソートされます。date_trunc
関数の最初のパラメーターに他の値を使用して、second
、minute
、hour
、week
、month
、year
などの他の時間単位に基づいてログエントリをグループ化できます。 関数の詳細については、「日付と時間の関数」をご参照ください。 - グループ統計に基づく柔軟な時間アカウントのデバイスの5分あたりのログオン傾向など、時間グループ化のより柔軟なルールを知りたい場合は、次のSQLステートメントを実行します。
__topic __: aegis-log-login | dtとしてfrom_unixtime(__time__ - __time __% 300) を選択し、PVとしてカウント (1) dtによるグループ dtによる注文 制限1000
この例では、組み込みの時間フィールドを使用して
__time__ - __time __% 300
を計算し、フォーマットにfrom_unixtime
関数を使用します。 各ログエントリは5分 (300秒) のパーティションにグループ化され、総数(count(1))
の計算を容易にします。 ログエントリは、最初の1,000ログエントリを取得するためにパーティション時間ブロックごとにソートされます。これは、最初の83時間のデータを選択することに相当します。時間に関連する関数の詳細は、「日付と時間の関数」をご参照ください。 たとえば、
date_parse
およびdate_format
関数は、時間の形式を別の形式に変換することができます。
クライアント IP アドレスベースのログクエリと分析
ログオンログエントリのwarn_ip
フィールドは、ログオンの送信元ipアドレスを示します。
- ログオンのソース国分布
ユーザーがサーバーにログオンする元の国の分布を照会します。 例:
__topic __: aegis-log-loginおよびuuid: 12344567 | SELECT ip_to_country(warn_ip) を国として、「ログオン数」としてカウント (1) 国別グループ
この例では、
ip_to_country
関数を使用して、ログオンの送信元ipアドレスを指定するwarn_ip
に対応する国を取得します。 - ログオンのアイデンティティ分布
ip_to_province
関数を使用して、州に基づくログオンの詳細な分布を取得します。 例:__topic __: aegis-log-loginおよびuuid: 12344567 | SELECT ip_to_province(warn_ip) as province, 「ログオン数」としてカウント (1) group by province
この例では、
ip_to_province
関数を使用して、IPアドレスが属するソース州を取得します。 IPアドレスが中国からのものでない場合、システムはIPアドレスの国の位置に基づいて、それを州または州に変換しようとします。 ただし、中国マップを選択した場合、州または州は表示されません。 - ログオンの地熱分布
ログオンの地熱分布を取得するには、
ip_to_geo
関数を使用します。__topic __: aegis-log-loginおよびuuid: 12344567 | SELECT ip_to_geo(warn_ip) としてgeo、 「ログオン数」としてカウント (1) group by geo limit 10000
この例では、
ip_to_geo
関数を使用して、IPアドレスの緯度と経度を取得します。 最初の10,000ログエントリを取得するには、LIMITを10000に設定します。注 IPアドレスベースの機能の詳細については、「IP 機能」をご参照ください。 たとえば、ip_to_provider
関数を使用してIPアドレスのプロバイダを取得し、ip_to_domain
関数を使用してIPアドレスがパブリックかプライベートかを判断できます。