Log Analytics クエリを構成する

完了

管理者は、Log Analytics ワークスペースの専用テーブルの格納データから Log Analytics クエリを構築します。 一般的な専用テーブルには、Event、Syslog、Heartbeat、Alert などがあります。 Kusto 照会言語 (KQL) クエリを構築する場合は、まず探しているデータが Azure Monitor Logs リポジトリのどのテーブルにあるかを判断します。

次の図は、KQL クエリが監視対象のサービスとリソースの専用テーブルのデータをどのように使うかを示しています。

Illustration that shows how to build Log Analytics queries from data in dedicated tables in a Log Analytics workspace.

KQL クエリの構造について知っておくべきこと

専用テーブルのデータと、KQL ログ クエリの構築方法について詳しく見てみましょう。

  • 選んだデータ ソースとソリューションのそれぞれが、Log Analytics ワークスペースの専用テーブルにデータを格納します。

  • それぞれのデータ ソースとソリューションのドキュメントには、作成されたデータ型の名前と、各プロパティの説明が含まれています。

  • クエリは、ソース テーブルの後に一連のコマンド ("演算子" と呼ばれます) が続くという基本構造です。

  • 1 のクエリに演算子のチェーンを複数含めてデータを絞り込み、高度な機能を実行することができます。

  • クエリ チェーンの各演算子はパイプ文字 | で始めます。

  • 多くのクエリは、1 つのテーブルのデータのみが必要ですが、クエリにさまざまなオプションを使って複数のテーブルのデータを含めることもできます。

KQL ログ クエリの例

一般的な KQL ログ クエリ演算子と構文例を確認しましょう。

5 つのエントリを持つ StormEvent テーブルのデータを検索するクエリを構築できます。

event severity start duration region
Water Freezing rain 1 6:00 AM 01-27-2023 3 hours 1, 2
Wind High winds 1 8:00 AM 01-27-2023 12 hours 1, 2, 4, 5
Temperature Below freezing 2 11:00 PM 01-26-2023 10 hours 1, 2, 4, 5
Water Snow 3 4:00 PM 01-26-2023 10 hours 1, 2, 4, 5
Water Flood warning 2 9:00 AM 01-26-2023 10 hours 3

他の演算子と例については、Azure Monitor ログ クエリに関する記事を参照してください。

項目数をカウントする

count 演算子を使って、入力レコード セット内のレコードの数を検出します。

次の例の場合、StormEvent テーブルのレコード数が返されます。 このクエリの結果、StormEvent テーブルには 5 つのエントリがあることがわかります。

StormEvent | count

クエリの結果:

count
5

項目の先頭の何個かを返す

top 演算子を使うと、入力レコード セットの最初の N 個のレコードを、指定した列で並べ替えて表示できます。 これらの列は、専用テーブルで定義されたデータのプロパティに対応しています。

次の例の場合、StormEvent の先頭 3 個のデータ レコードが返されます。 結果テーブルには、荒天の event の名前、重大度、予想される期間が表示されます。

StormEvent | top 3 by event severity duration

クエリの結果:

event severity duration
Freezing rain 1 3 hours
High winds 1 12 hours
Below freezing 2 10 hours

一致する項目を検索する

where 演算子を使って、テーブルを指定した述語値に一致する行のサブセットに絞り込みます。 述語値は、where=="find-this" のように、テーブルの何を検索するかを示します。

次の例では、StormEvent のデータ レコードをフィルター処理して、"snow" に一致するレコードのみを使います。

StormEvent | where event=="snow"

このクエリを実行すると、StormEvent テーブルの 1 行に絞り込むことができます。

event severity start duration region
Water Snow 3 4:00 PM 01-26-2023 10 hours 1, 2, 4, 5

内容を集計する

summarize 演算子を使って、指定に基づいて入力レコード セットの内容を集計するテーブルを作成します。

次の例の場合、StormEvent の集計テーブルが返されます。 結果テーブルには、専用テーブルのすべての (count) データ レコードの各 region について、荒天の種類ごとの平均 (avg) 重大度レベルが表示されます。

StormEvent | summarize count(), avg(severity) by type, region

クエリの結果:

avg(severity) region
Water 2 1, 2, 3
Water 3 4, 5
Wind 1 1, 2, 4, 5
Temperature 2 1, 2, 4, 5

複数の演算子をつなげる

どのクエリにも演算子チェーンを含めることができます。

たとえば、StormEvent テーブルを検索して、過去 2 週間で氷点下になった日数を確認するとします。 結果がある場合は、それらを降順で (日付の古いものから) 表示するとします。

wheresummarize という複数の演算子をつなげて 1 つのクエリを作成できます。 このクエリを実行すると、過去 ago(14days) に収集されたテーブル データを検索できます。 荒天の種類が Temperature のエントリ テキスト Below freezing の一部である文字列 Below に一致するものを探します。

結果テーブルでは、専用テーブルのすべての項目 (count) を集計し (summarize)、返された項目を降順 (desc) で表示します。

StormEvent
| where (EventLevelName == "Below")
| where (TimeGenerated > ago(14days))
| summarize StormEvent = count(), desc

クエリの結果:

event start
Temperature Below freezing 11:00 PM 01-13-2023
Temperature Below freezing 12:00 AM 01-14-2023
Temperature Below freezing 3:00 AM 01-16-2023
Temperature Below freezing 12:00 AM 01-17-2023
Temperature Below freezing 11:00 PM 01-26-2023