初めてのAzure Log AnalyticsとKQL クエリ

2021-08-04Azure,Log Analytics,Monitor

Azure上のリソースのログを収集・分析するサービスとして、Log Analyticsがあります。
今回は初めてLog Analyticsを利用する場合を想定して、VM insightsのデータをサンプルとしてさまざまな操作手順を確認しました。

    • Azure Log Analyticsの概要
    • Log Analytics ワークスペースの作成や設定方法
    • KQL(Kusto Query Language)クエリを使ったデータの絞り込み
    • KQLでの日本時間表示、並び替え手順

※本記事では、Kusto Query LanguageをKQLとして表記しています。

スポンサーリンク

Azure Log Analyticsの概要

Azure Log Analyticsとは何?

Azure Log Analyticsを一言で表すと、Azure上のリソースのログを収集・分析する機能です。

Azure Monitor の Log Analytics の概要

Log AnalyticsはAzure Monitorの一部として提供されており、Azure Monitorのリソースデータを保存・分析するための領域をLog Analytics ワークスペースと呼びます。

    • Log Analytics: Azure Monitor上のログ収集・分析機能
    • Log Analytics ワークスペース: Log Analyticsのデータを収集・管理するためのAzureリソース

Azure Portalでは、KQL(Kusto Query Language)を利用して収集されたログデータの表示や分析が可能です。
また、クエリの実行結果をグラフ化してダッシュボードに表示することもできます。

診断設定やAzure Monitorエージェントを使ってログ収集される

Log Analyticsのデータ収集方法のひとつに、エージェントによる収集があります。
2022年9月現在、Log Analyticsに関連するエージェントは2種類存在します。

Log Analytics agent overview
Azure Monitor エージェントの概要

また、エージェントによる収集だけでなく、各Azureリソースの診断設定を通じてログを収集することも可能です。

※2022年9月時点で、Azure Monitorエージェントが推奨されています。
※2024年8月31日をもって従来のLog Analyticsエージェントは廃止され、Azure Monitorエージェントへの移行が必要となります。
※エージェントからLog Analytics ワークスペースへのデータ転送にはHTTPSが使用されます。ネットワークのアクセス許可設定が必要となります。

収集対象

Azure Log Analyticsでは、Azureリソースのメトリック、操作ログ、OSログなど、多種多様なログを収集できます。
具体的には、Azure ADのログやアクティビティログ、Windowsのイベントログ、IISのログ、LinuxのSyslog、CPU使用率などのメトリック情報も収集可能です。

Azure基盤やサーバ(仮想マシンやオンプレミスサーバ)からは、エージェントを通じてリソース情報や各種ログを収集できます。
診断設定を活用することで、Azureサービス(PaaS)のログやリソース情報も取得可能です。
また、Application GatewayのアクセスログやNSGフローログなど、ネットワーク関連のログも収集できます。

※Azure SentinelやNetwork Watcherのトラフィック分析などにもLog Analyticsが活用されています。

Application Gatewayのアクセスログの確認方法については、こちらで紹介しています。

Log Analyticsで発生する課金は?

Log Analyticsは、データ転送量に応じて課金が発生します。
デフォルトでは、データ保管期間は31日間まで無償です。
保管期間を延長した場合は、延長分のデータ容量に応じて追加課金されます。

Azure Monitor の価格

East US 2リージョンの場合の価格は、以下の表のとおりです。(2022年9月現在)

項目 料金(East US 2の場合) 備考
データ転送量 ¥377.279/GB  
データ保管 1GB あたり ¥16.404/月 31日まで無料です
32日以上保管する場合に発生する課金ん
データ出力 ¥13.670/GB Log Analyticsで収集したデータをエクスポートする場合

※アーカイブ機能を利用することで、ログデータの保管コストを抑えることができます。
※データ出力に対して課金が発生する場合があります。
※Log AnalyticsでKQLクエリの実行結果をCSVなどのファイルとして手動でエクスポートする場合には課金は発生しません。
※Azure StorageやEvent Hubなどの宛先へ継続的にストリーミングでデータをエクスポートする場合には、エクスポートに対して課金が発生します。

Log Analytics ワークスペースのリソース作成手順

Log Analytics ワークスペースのリソース作成手順

Log Analytics ワークスペースのリソースを作成します。
設定項目は、リソースグループ、ワークスペース名、作成する地域(リージョン)です。
取得対象のAzureリソースと別のリージョンでも利用可能ですが、同じリージョンに配置することが推奨されます。
同じリージョンに配置することで、リージョン間のデータ転送コストや遅延を回避できます。

Log Analytics ワークスペースの作成手順

Log Analytics ワークスペースのメニューで作成を選択します。

基本設定画面が表示されます。
リソースグループ、ワークスペース名、地域(リージョン)を指定します

※地域(リージョン)は、収集対象のAzureリソースと同じリージョンに作成することが推奨されます。

確認画面が表示されます。
内容を確認した後、作成を選択します。
これでLog Analyticsワークスペースのリソース作成は完了です。

データ取り込み量や課金を確認する方法

Azure Portal上で、Log Analyticsワークスペースのデータ取り込み量や課金状況を確認できます。

使用量と推定コストを表示

使用量と推定コストの画面では、過去30日間のデータ取り込み量と料金が表示されます。

※今回は設定直後のため、1日分のみが表示されています。

※1日あたり100GB以上利用する場合は、リソース予約(予約容量プラン)を利用することでコストを抑えることが可能です。
※コスト計算方法については、以下のサイトに記述があります。

Azure Monitor ログのコストの計算とオプション

データ取り込み量の日次上限設定手順

Log Analyticsワークスペースでは、データ取り込み量の上限を設定することができます。
上限は1日あたりの取り込み量で指定します。

上限に達すると、その日のログ取り込みが停止します。
取り込み停止後に発生したデータはワークスペースに保存されず、欠落しますので、上限設定を利用する際は十分に注意が必要です。

日次上限の設定方法

使用量と推定コストのメニューには、日次上限の設定項目があります。

日次上限には、オン/オフの切り替えと、ボリューム上限の設定があります。
ボリューム上限はGB単位で指定でき、小数点以下も有効なため、MB単位での細かい設定も可能です。

※メッセージにも記載されている通り、Azure Sentinelなどのセキュリティ関連のデータは、日次上限に達しても取り込みが継続されます。課金には注意が必要となります。

データ保有期間の設定手順

Log Analyticsワークスペースでは、データの保有期間を延長することができます。
デフォルトの保有期間は30日(実際の保有期間は31日)です。
記事記載時点では、最大730日(保有期間731日)まで延長が可能です。

保有期間を延長した場合、追加のストレージ課金が発生しますので注意が必要です。

Azure Monitor の価格

データ保有期間

使用量と推定コストのメニューに、データ保有期間の設定項目があります。

デフォルトでは30日に設定されています。
最大730日まで延長することができます。

—広告—

Log Analytics ワークスペースでログ検索する方法

今回は、仮想マシンのVM insights(分析情報)で取得された値を例に、ログ検索を行っています。
利用するLog Analyticsワークスペースには、test-vm-01~03の仮想マシンのVM insights(分析情報)が収集されています。

VM Insightsについて

VM Insightsで取得されるデータについては、こちらで紹介しています。

Log Analytics ワークスペースでKQLクエリを実行

ログの検索にはKQL(Kusto Query Language)を使います。

Kusto 照会言語の概要
KQL quick reference

Log Analyticsワークスペースのリソースメニューからログを選択すると、検索を実行できます。
ログ検索結果の表示は最大30,000行までとなります。
また、出力結果には、クエリで取得した項目(カラム)のみが表示されます。

※画面上で表示されませんが、エクスポートやAPI経由で全件取得することも可能です。

クエリを実行

ログの出力内容はエディタで利用することができます。

InsightsMetricsとクエリ入力欄に表示されます。

実行ボタンを選択すると、クエリが実行され、クエリの実行結果が表示されます。
Log AnalyticsワークスペースにInsightsMetricsとして収集されている情報が、クエリの条件に一致するものすべて表示されます。

 

InsightsMetrics

検索結果でログを選択すると、ログの詳細を表示できます。

検索結果を絞り込みする場合はwhere演算子

必要な情報に絞り込みを行います。
絞り込みにはwhere演算子を使用します。

where 演算子

絞り込み条件は、以下の通りにしています。

    • 仮想マシンはtest-vm-01を対象とする
    • メトリックはディスク空き容量率(FreeSpacePercentage)を対象とする
    • ディスク領域はLinuxの"/"領域がマウントされているsda2を対象とする
Where句で絞り込みを行う

仮想マシン名で絞り込みを行います。
“=="を利用すると完全一致条件になります。

例:
where Computer == “絞り込む値"

項目名には仮想マシン名が含まれるComputerを使用します。
クエリ実行結果を確認すると、test-vm-01のみが絞り込まれていることがわかります。

//仮想マシン名による絞り込みクエリ
InsightsMetrics
| where Computer == “test-vm-01"

where演算子はand条件も利用可能です。
仮想マシン名が"test-vm-01″かつ取得メトリックが"LogicalDisk"であるという条件で検索します。

例:
where Computer == “test-vm-01" and Namespace == “LogicalDisk"

検索結果を確認すると、and条件で絞り込みができていることがわかります。

//ディスク情報
InsightsMetrics
| where Computer == “test-vm-01" and Namespace == “LogicalDisk"

ディスク空き容量に関する情報に絞り込むため、where Name == “FreeSpacePercentage"をand条件としてクエリに追加します。

//ディスク使用率
InsightsMetrics
| where Computer == “test-vm-01" and Namespace == “LogicalDisk" and Name == “FreeSpacePercentage"


sda2に絞り込みます。
Tagsという項目にディスクのデバイス名が含まれていることを利用します。
contains “sda2″を追加することで部分一致条件となります。

一致条件についてはこちらを参照願います。

文字列の演算子

//ディスク使用率
InsightsMetrics
| where Computer == “test-vm-01" and Namespace == “LogicalDisk" and Name == “FreeSpacePercentage"
| where Tags contains “sda2"

※Computer列は仮想マシンのホスト名を示します。Azureポータル上のVM名と一致しない場合があります。
※仮想マシン名で絞りこみを行う場合、Resource列を利用する方法もあります。
※カラム名は、記事記載時点のものとなります。変更になっている可能性もありますので、確認しながら進めます。

必要な列(項目)のみ出力する場合はproject演算子

検索結果のすべての列(項目)が必ずしも必要とは限りません。
project演算子を使うことで、必要な情報だけに絞り込んだ見やすい結果を得ることができます。

project 演算子

project演算子で出力項目を選択

選択した列(項目)のみを出力する場合は、project 列名(項目名)となります。
project演算子を使って、TimeGenerated、Computer、Name、Valに絞り込みます。
検索結果を見ると、表示項目が絞り込まれていることが確認できます。

//出力結果項目を選択
InsightsMetrics
| where Computer == “test-vm-01" and Namespace == “LogicalDisk" and Name == “FreeSpacePercentage"
| where Tags contains “sda2"
| project TimeGenerated, Computer,Name ,Val

並び替え(ソート)にはsort演算子を使う

検索結果時系列に並べたいなどの場合にはsort演算子を使います。

sort 演算子

ソート順の設定は以下のようになります。
デフォルトではdesc(降順)です。

    • asc : 昇順 (小さい値から大きい値へ、または過去から現在の時間へ)
    • desc:降順 (大きい値から小さい値へ、または現在から過去の時間へ)

※sort 演算子とorder演算子は同等です。サンプルは、order演算子を利用しています。

order演算子で並び替え

order by 並び替え項目で出力結果を並び替え(ソート)できます。TimeGeneratedで並び替えると、時間の降順で表示されていることが確認できます。

※descがデフォルトのため、order by TimeGeneratedだけでも降順で結果が表示されます。
※order by 列名1, 列名2のように、複数の列(項目)を組み合わせてソートすることも可能です。

//TimeGeneratedで並び替え(ソート)
InsightsMetrics
| where Computer == “test-vm-01" and Namespace == “LogicalDisk" and Name == “FreeSpacePercentage"
| where Tags contains “sda2"
| project TimeGenerated, Computer,Name ,Val
| order by TimeGenerated desc

検索対象時間の範囲を指定する場合はwhere演算子

デフォルトの検索条件は過去24時間です。
検索対象時間の範囲を制限するには、where演算子を使用します。

where 演算子

    • 検索時間制限の例
      • where TimeGenerated > ago(時間) 
      • where TimeGenerated between (datetime(YYYY-MM-HHT hh:mm:ss.0000000Z) .. datetime(YYYY-MM-HHT hh:mm:ss.0000000Z))
検索時間範囲を制限

where TimeGenerated >(または<等) ago(時間)で検索範囲を指定できます。
ago(時間)は現在時刻から指定した時間前までを意味し、日数、時間、分など様々な単位で指定可能です。
例えば、where TimeGenerated > ago(5m)の場合は、5分前より新しいTimeGeneratedのデータを取得します。

※ago関数は、d(日)、h(時間)、m(分)、s(秒)などの単位で指定できます。
※Azure Portal上で検索時間範囲を指定すると、クエリに設定しますと表示されます。

//検索時間範囲を制限
InsightsMetrics
| where TimeGenerated > ago(5m)
| where Computer == “test-vm-01" and Namespace == “LogicalDisk" and Name == “FreeSpacePercentage"
| where Tags contains “sda2"
| project TimeGenerated, Computer,Name ,Val
| order by TimeGenerated desc

検索結果の表示件数を指定する場合は

検索結果の表示件数は指定できます。

take 演算子

※take 演算子とlimit演算子は同等です。サンプルは、limit演算子を利用しています。

検索結果表示件数を制限

limit 件数で表示件数を制限できます。
order by演算子と組み合わせることで、例えば上位何件までを取得することも可能です。

//ディスク使用率(/)
InsightsMetrics
| where Computer == “test-vm-01" and Namespace == “LogicalDisk" and Name == “FreeSpacePercentage"
| where Tags contains “sda2"
| project TimeGenerated, Computer,Name ,Val
| order by TimeGenerated desc
| limit 5

TimeGeneratedを日本時間で表示する

検索結果で表示される時刻(TimeGenerated)は、デフォルトではUTC表記です。

TimeGenerated

日本時間で表示したい場合は、extend演算子を使って変換できます。

extend 演算子

Azure Portal上で現地時刻を選択することで、日本時間表記に切り替えることも可能です。

日本時間で表示

extend演算子を利用してLocalTimeGeneratedを定義します。
UTCに9時間を加算することで日本時間となるため、TimeGenerated + 9hと定義します。
project演算子でLocalTimeGeneratedを指定することで、日本時間を検索結果に表示できます。

//ディスク使用率(/)
InsightsMetrics
| extend LocalTimeGenrated = TimeGenerated + 9h
| where Computer == “test-vm-01" and Namespace == “LogicalDisk" and Name == “FreeSpacePercentage"
| where Tags contains “sda2"
| project LocalTimeGenrated, TimeGenerated, Computer,Name ,Val
| order by TimeGenerated desc

Azure Portalで現地時刻を選択すると、TimeGenerated(現地時刻)として表示されます。
検索結果も日本時間(現地時刻)で表示されていることを確認できます。

検索結果をグラフ表示する場合はrender 演算子

検索結果をグラフで表示する場合は、render演算子を使用します。
render演算子をクエリの最後に追加することで、検索結果をグラフやチャート形式で表示できます。

render 演算子

様々なグラフ形式を指定することができます。

ビジュアル化

検索結果をダウンロード

render演算子の後にグラフ形式を指定します。
timechartを指定すると、線グラフとして表示されます。

//ディスク使用率(/)

InsightsMetrics
| where Computer == “test-vm-01" and Namespace == “LogicalDisk" and Name == “FreeSpacePercentage"
| where Tags contains “sda2"
| project TimeGenerated, Val
| where TimeGenerated between (datetime(2022-09-03T 08:00:00.0000000Z) .. datetime(2022-09-03T 09:00:00.0000000Z))
| render timechart

検索結果をエクスポート(CSVでダウンロード)

Azure Portalでは、検索結果をCSV形式でダウンロードすることができます。
検索結果画面のエクスポート機能から、CSVファイルとして保存できます。

検索結果をダウンロード
エクスポートを選択すると、CSVやPower BIへのエクスポートオプションが表示されます。
CSVへのエクスポートでは、すべての列を含めるか、表示している検索結果の列のみを含めるかを選択できます。

リソースIDからリソース名を抽出する

リソースIDからリソース名を抽出するKQLについては、こちらで紹介しています。

Logic Appsを利用して定期的にストレージアカウント(BLOBコンテナー)にログ検索結果を保管する方法については、こちらで紹介しています。

IPアドレスでの絞り込みする場合のKQLについては、こちらで紹介しています。

—広告—

最後に

初めてのLog Analyticsということで、Log Analyticsワークスペースの作成や設定を行いました。
KQL(Kusto Query Language)を利用することで、ログデータから目的に応じた情報を抽出できることが確認できました。

    • 主に確認した実施内容
      • 対象の絞り込み
      • 必要な列(項目)のみを表示
      • 並び変え
      • 検索範囲の時間指定
      • グラフ表示
      • CSV出力

引き続き、いろいろ試してみたいと思います。

ログの転送状況の監視方法については、こちらで紹介しています。

スポンサーリンク