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

2021-08-04Azure,Log Analytics

Azure上のリソースのLogを収集、分析するサービスとしてLog Analyticsと言うサービスがあります。
初めてのLog Analyticsという事でVM insightsのデータをサンプルに色々実施してみました。

      • Azure Log Analyticsの概要
      • Log Analyticsワークスペース作成や設定
      • VM insightsのデータを例にKQL(Kusto Query Language)クエリを使ってデータの絞り込み、日本時間表示、並び替えなど

スポンサーリンク

Azure Log Analyticsの概要

Azure Log Analyticsとは何?

1言で言うとAzure上のリソースのLogを収集、分析する機能になります。

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のデータ収集の1つにエージェントによる収集があります。
Log Analyticsに関するエージェントは2022年9月現在では2種類あります。

またエージェントからの収集だけではなく、各Azure リソースの診断設定を通じてログを収集出来ます。

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

収集対象

Azureリソースのメトリックス、Azureリソースの操作ログ等、OSのログなど多種多様なログを収集する事が出来ます。
Azure ADのログやアクテビティログなども収集する事が出来ます。

      • Azure基盤やサーバ(Azure VMやオンプレ)からのデータ収集(ログ、リソース情報)が出来る
        • VMやオンプレサーバの場合エージェントを通じてリソース情報やログが収集される 
        • WindowsのイベントログやIISのログ、LinuxのSyslogなどの収集が出来る
        • WindowsやLinuxなどのメトリック(CPU使用率)を収集が出来る
      • 診断設定を使ってAzureサービスのログを収集出来る
        • PaaSを使ったアプリのログやリソース情報も収集出来る
        • Application GatewayのアクセスログやNSGフローログなどのネットワーク関連のログも収集出来る(Application Gatewayのアクセスログはこちらでやってます。)

※Azure SentinelやNetwork Watcherのトラフィック分析などもLogAnalyticsが使われています。
※エージェントからワークスペースへのデータ転送はHTTPSが使われます。NSGの許可設定が必要になります。

Log Analyticsで発生する課金は?

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

Log Analyticsで発生する課金はこちらになります。
EastUS2(2022年9月現在)の場合です

項目 料金(East US 2の場合) 備考
データ転送量 ¥377.279/GB 課金アカウントごとに 1か月あたり5 GB まで無料
データ保管 1 GB あたり ¥16.404/月 31日まで無料です。31日以降保管した
データ出力 ¥13.670/GB LogAnalyticsで収集したデータをエクスポートする場合

※アーカイブを利用する事でログ データの保管コストを抑える事が出来ます。
※データ出力に対して課金が発生します。但しLog AnalyticsでKQLクエリの実行結果をCSVなどにエクスポートする場合には発生しません。AzureStorageやEventHubなどの宛先へ継続的なストリーミングでエクスポートする場合に発生します。

Log Analyticsワークスペース作成

Log Analyticsのワークスペースを作成します。
設定内容はリソースグループ、リソース名、作成する地域(リージョン)だけです。
取得対象のAzureリソースと同じ場所(リージョン)に配置します。

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

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

基本の設定です。
リソースグループ、名前、地域(リージョン)を指定します。

地域は収集対象のリソースと同じ場所に作成します。別場所でも作成可能ですが推奨はされていません。

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

データ取り込み量や課金を確認

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

使用量と推定コスト

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

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

※想定より課金が多くなっている場合はこちらのサイト参考に原因調査を行います。
※1日100GB以上利用するような場合はリソース予約する事でコストを抑える事も可能です。

日次上限の設定

Log Analyticワークスペースへのデータ取り込み量上限を設定出来ます。
上限設定は日次の取り込み量になります。

上限に達するとログ取り込み自体が止まります。
取り込み停止後のデータは欠落するので利用にあたっては十分な考慮が必要です。

日次上限

使用量と推定コスト内に日次上限の設定項目があります。

日次上限はオン、オフとボリューム上限の設定になります。
ボリューム上限の設定はGB単位です。
小数点以下も有効なので、MB単位での設定も可能です。

※メッセージにもありますが、Azure Sentinel等のセキュリティ関連のデータは、この上限に達しても取り込みされます。

データ保有期間

Log Analyticワークスペースでのデータ保有期間を延長出来ます。
デフォルト設定は30日(保有期間31日)になります。
最大730日(保有期間731日)まで延長が可能です。
保有期間を延長した場合は別途課金が発生します。価格表はこちらを参照願います。

データ保有期間

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

デフォルトでは30日に設定されています。
最大730日までの延長する事が出来ます。

 

Log Analyticsワークスペースでログ検索

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

VM Insightsについて

VM Insightsで取得されるデータについてはこちらに纏めています。

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

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

Log Analyticsワークスペースのリソースメニューからログを選択すると検索が可能です。
ログ検索結果の表示は最大30000行になります。
出力結果がある項目(カラム)だけが表示されます。

クエリを実行

ログの出力内容を右クリックするとエディタで使用する事が出来ます。

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

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

 

InsightsMetrics

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

検索結果を絞るのはwhere演算子

必要な情報に絞り込みを行ってみます。

    • 絞り込み条件
      • Azure VMはtest-vm-01を対象とする
      • メトリックはディスク空き容量率(FreeSpacePercentage)を対象とする
      • ディスク領域はLinuxの”/”領域がマウントされているsda2を対象とする

絞り込みにはWhere演算子を使います。

Where句で絞り込みを行う

Azure VMを絞り込みます。
”==”を利用すると完全一致条件になります。

例:where 項目名 == ”絞り込む値”

項目名にはAzure VM名が含まれるComputerを使います。

クエリ実行結果を見るとtest-vm-01のみに絞りこめている事が確認出来ます。

//Azure VM名による絞り込みクエリ
InsightsMetrics
| where Computer == “test-vm-01"

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

検索結果を見るとand条件で絞り込み出来ている事が確認出来ます。

※Namespaceがメトリックというのは検索結果からも推測可能です。

 

//ディスク情報
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″を追加します。
containsは部分一致条件になります。

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

文字列の演算子

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

必要な列(項目)のみ出力する場合は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

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

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

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

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

Sort 演算子を利用しても同様の事が出来ます。

order演算子で並び替え

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

※descがデフォルトなので、つけなくても同じ結果になります。
※”order by 列名, 列名”と言うように複数列(項目)を組み合わせたソートも可能です。

//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

検索対象時間の範囲を指定

デフォルトの検索条件は過去24時間になっています。
検索時間の範囲を制限する事も可能です。
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(時間)”で現在時刻から指定した時間前までの指定になります。
ago日数、時間、分など様々な単位で指定可能です。
”where TimeGenerated > ago(5m) ”の場合は5分前よりTimeGeneratedが大きい値のデータを取得するという指定になります。

検索時間範囲を指定すると、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

表示件数を制限

検索結果の表示件数は指定する事が出来ます。

検索結果表示件数を制限

”limit 件数”で制限が可能です。
order演算子と組み合わせる事で上位何位まで取得と言った事も可能です。

//ディスク使用率(/)
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表記です。

日本時間で表示したい場合にはextend 演算子を使うと出来ます。

Azure Portalで現地時刻を選択する事でも日本時間表記が可能です。

日本時間で表示

extend演算子を利用してLocalTimeGenratedを定義します。
UTC+9時間が日本時間になるので、TimeGenerated + 9hと定義します。
project演算子でLocalTimeGenratedを指定します。

日本時間を検索結果に表示する事が出来ました。

//ディスク使用率(/)
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 グラフ形式”の指定になります。
timechartは線グラフになります。

グラフ形式についてはこちらを参照願います。

render 演算子(引数)

※サンプルでは時間範囲の指定をbetweenで指定しています。

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

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やPower BIへのエクスポートが表示されます。
CSVへのエクスポートはすべての列か表示している検索結果の列のみか選択が出来ます。

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

リソースIDからリソース名を抽出するKQLについてはこちらに纏めています。

定期的にクエリ実行してストレージアカウント(BLOBコンテナー)に保管する場合はLogic Apps(ロジックアプリ)を使うと出来ます。

IPでの絞り込み方法についてはこちらに纏めています。

最後に

初めてのLog Analyticsという事でLog Analyticsワークスペース作成や設定をやってみました。
KQL(Kusto Query Language)を使うとログの中から目的に沿ったデータ出力が出来る事が分かりました。

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

今後も引き続き色々試してみたいと思います。

ログの転送状況の監視についてはこちら。

スポンサーリンク