Log Analytics クエリを構成する
管理者は、Log Analytics ワークスペースの専用テーブルの格納データから Log Analytics クエリを構築します。 一般的な専用テーブルには、Event、Syslog、Heartbeat、Alert などがあります。 Kusto 照会言語 (KQL) クエリを構築する場合は、まず探しているデータが Azure Monitor Logs リポジトリのどのテーブルにあるかを判断します。
次の図は、KQL クエリが監視対象のサービスとリソースの専用テーブルのデータをどのように使うかを示しています。
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 週間で氷点下になった日数を確認するとします。 結果がある場合は、それらを降順で (日付の古いものから) 表示するとします。
where
と summarize
という複数の演算子をつなげて 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 |