LoginSignup
5
1

More than 1 year has passed since last update.

Azure Log Analytics で Azure VM のパフォーマンスを分析する。

Last updated at Posted at 2022-12-23

駆け出しアーキテクトのやまぱんです。
この記事は Microsoft Azure Tech Advent Calendar 2022 の 24 日目の記事です。
今回は Azure Log Analytics で Azure VM (Windows/Linux) のパフォーマンス (CPU/メモリ/ディスク) 情報を取得し分析する方法についてお伝えします。
途中ハマりポイントがあったので記しておきます。

レガシーエージェントとモダンエージェント

まず、 Log Analytics で Azure VM のパフォーマンスを取得し分析するためには VM エージェントの拡張機能によって Azure VM のデータを収集します。
現在 拡張機能のエージェントとして、1.Log Analytics エージェント を用いる方法2.Azure Monitor エージェント を用いる方法の 2 種類の方法があります。
Log Analytics エージェント は Docs ではレガシエージェントとも記載されています。
Docs では " レガシ Log Analytics エージェントは、2024 年 8 月以降はサポートされません。" と記載されており、そのため、現在構築するのであればレガシーエージェントである Log Analytics エージェント ではなく、モダンなエージェント(モダンエージェント)である Azure Monitor エージェントを用いることをオススメします

Log Analytics エージェント:レガシーエージェント (2024 年 8 月以降はサポートされません。)
Azure Monitor エージェント:モダンエージェント

なお現在インストールされている VM エージェントの拡張機能は Azure Portal 下記のように確認することが可能です。
手順:"Azure Portal" → "仮想マシン" → 対象の Azure VM → ”拡張機能とアプリケーション”

Windows の場合

  • AzureMonitorWindowsAgent → Azure Monitor エージェント:モダンエージェント
  • MicrosoftMonitoringAgent → Log Analytics エージェント:レガシーエージェント
    2022-12-23_02h22_55.png

Linux の場合

  • AzureMonitorLinuxAgent → Azure Monitor エージェント:モダンエージェント
  • OmsAgentForLinux → Log Analytics エージェント:レガシーエージェント
    2022-12-23_02h28_40.png

環境構築

Log Analytics エージェント(レガシーエージェント)での設定

参考までにレガシーエージェントでの設定方法も記載しておきます。

上述した通り、こちらの設定方法はサポートが切れることが決定しています。

レガシーエージェントでの設定方法は Log Analytics ワークスペースから行うことが可能です。
"Azure Portal" → "Log Analytics ワークスペース" → "仮想マシン" より、 Azure VM の一覧が表示されるので分析対象としたい Azure VM を選択し、"接続" を押下することで設定完了です。数分で完了します。
また、他にも設定方法はあるので、気になるかたは後述の Docs を確認してください。

対象の Azure VM が稼働している場合は、数分で Log Analytics ワークスペースよりパフォーマンス情報を確認することが可能です。

2022-12-23_02h45_00.png

・Log Analytics エージェント(レガシーエージェント)の概要
https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/log-analytics-agent

Azure Monitor エージェント(モダンエージェント)での設定

つぎに Azure Monitor エージェントでの設定方法です。
手順:”Azure Portal” → ”モニター” → ""データ収集ルール"" → "[作成]をクリック"
2022-12-23_02h56_07.png

・Azure Monitor エージェント(モダンエージェント) の概要
https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/agents-overview

設定内容例 (Windows の場合)

下記のようにウィザードに従って設定を進めます。
2022-12-23_03h03_25.png

・Windowsの場合はイベントログ、Linux の場合は syslog も取得することが可能です。

[プラットフォームの種類] : [カスタム] について
後述の Docs (データ収集ルールを作成する) 内で下記のように記載がありますが、今回私が検証したところ、[カスタム]を利用した場合でも仕様上、Winodows と Linux を同一のデータ収集ルール内で設定している場合、デフォルトでは Winodws 用のパフォーマンスカウンターのみしか設定がされないため、Linux 用のパフォーマンスカウンターが欠損してしまい、一部のパフォーマンス情報が取得できませんでした。(メモリ使用率が取得できませんでした。)
今回の解決策としては、Windows / Linux 向けのデータ収集ルールをそれぞれ作成することで解決しました。

"[プラットフォームの種類] により、このルールを適用できるリソースの種類を指定します。 [カスタム] オプションにより、Windows と Linux の両方の種類が許可されます。"

なので、今回下記のように 2 つのデータ収集ルールを作成しました。(送信先の Log Analytics ワークスペースはどちらも同じ。)
2022-12-23_03h24_01.png

  • データ収集ルール の下記で送信先の Log Analytics ワークスペースを指定します。
    2022-12-23_03h49_54.png

公式詳細手順は下記にあります。
・データ収集ルールを作成する - Azure Monitor エージェントを使用して仮想マシンからデータを収集する
https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/data-collection-rule-azure-monitor-agent?tabs=portal#create-a-data-collection-rule
・インストール - Azure Monitor エージェントを管理する
https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/azure-monitor-agent-manage?tabs=azure-portal#install

収集対象の OS 種別 (Windows / Linux) によってデータ収集ルールを分ける。

Log Analytics ワークスペースで確認する

設定が完了すれば、拡張機能 (それぞれのエージェント) がインストールされ、 Log Analytics で性能情報が取得できるはずです。
"Log Analytics" → "ログ" からクエリを実行することができます
無事に Log Analytics でLinux も Winodws もログの収集ができていることが分かります。1分程度のラグがあるがほぼリアルタイム。(PowerShellの方はJSTでクエリの結果はUTCなので 9:00 の表記差を考慮するとほぼリアルタイム)
2022-12-23_03h34_35.png
画面ショットの通り、Linux と Windows では Object Name や InsatanceName が異なることがあります。
それを使ってLinux とWindows を分けて抽出することが可能です。

  • また、出力した結果は CSV やエクセルファイルとしてエクスポートすることが可能です。
    2022-12-23_03h42_47.png

参考クエリ

以下に参考クエリをメモしておきます。
要件に合わせてクエリを記述する際の参考になれば幸いです。

性能情報のテーブルは Perf です。

  • 性能情報のテーブルは Perf
    2022-12-23_04h41_58.png
    これをベースに目的別に抽出します。

  • 参考 Docs

1.合計 CPU 使用率 (30秒ごと)

ObjectName で分けます。

Windows
KQL
Perf  //cpu usage (Windows) per 30sec
| where CounterName == "% Processor Time" and ObjectName =="Processor Information"
| summarize CpuUsage=avg(CounterValue)by Computer,ObjectName,CounterName,InstanceName, bin(TimeGenerated, 30s)
|order by TimeGenerated desc 
Linux
KQL
Perf  //cpu usage (Linux) per 30sec
| where CounterName == "% Processor Time" and ObjectName =="Processor" and InstanceName =="total"
| summarize CpuUsage=avg(CounterValue)by Computer,ObjectName,CounterName,InstanceName, bin(TimeGenerated, 30s)
|order by TimeGenerated desc 
まとめて出す

Counter Name 共通、双方の対象 InsatanceName に "total" が入っていることを利用します。

KQL
Perf  //cpu usage (Windows and Linux) per 30sec
| where CounterName == "% Processor Time" and InstanceName contains "total"
| summarize CpuUsage=avg(CounterValue)by Computer,ObjectName,CounterName,InstanceName, bin(TimeGenerated, 30s)
|order by TimeGenerated desc 

2.メモリ利用率 (30秒ごと)

CounterName で分けます。

Windows
KQL
Perf  //Memory usage (Windows) per 30sec
| where CounterName == "% Committed Bytes In Use"
| summarize MemoryUsage=avg(CounterValue)by Computer,ObjectName,CounterName,InstanceName, bin(TimeGenerated, 30s)
|order by TimeGenerated desc 
Linux
KQL
Perf  //Memory usage (Linux) per 30sec
| where CounterName == "% Used Memory"
| summarize MemoryUsage=avg(CounterValue)by Computer,ObjectName,CounterName,InstanceName, bin(TimeGenerated, 30s)
|order by TimeGenerated desc 
まとめて出す

素直に or します。

KQL
Perf  //Memory usage (Windows and Linux) per 30sec
| where CounterName == "% Committed Bytes In Use" or CounterName == "% Used Memory"
| summarize MemoryUsage=avg(CounterValue)by Computer,ObjectName,CounterName,InstanceName, bin(TimeGenerated, 30s)
|order by TimeGenerated desc 

3.ディスク空き容量 (30秒ごと)

ObjectName で分けます。
ややこしいですが、"LogicalDisk""Logical Disk" です。

Windows
KQL
Perf //Disk Free Space (Windows) per 30sec
| where CounterName == "% Free Space"  and ObjectName =="LogicalDisk"
| summarize AggregatedValue=avg(CounterValue ) by Computer,ObjectName,CounterName,InstanceName, bin(TimeGenerated, 1m)
Linux

InstanceName =="/" でマウントポイントをルートディレクトリに指定してる。

KQL
Perf //Disk Free Space (Linux) per 30sec
| where CounterName == "% Free Space"  and ObjectName =="Logical Disk" and InstanceName =="/"
| summarize AggregatedValue=avg(CounterValue ) by Computer,ObjectName,CounterName,InstanceName, bin(TimeGenerated, 1m)
まとめて出す

Counter Name が 共通なので、or して上記 2 つを合わせて出す。

KQL
Perf //Disk Usage (Windows and Linux) per 30sec
| where CounterName == "% Free Space"
| where InstanceName =="/" or  InstanceName =="_Total"
| summarize AggregatedValue=avg(CounterValue ) by Computer,ObjectName,CounterName,InstanceName, bin(TimeGenerated, 1m)

perf 以外のテーブル(イベントログや syslog)

今回はさらっと流しますが、参考までにイベントログや Syslog 収集をした場合はそれぞれ下記のテーブルから取得できます。

  • イベントログ : Event
    2022-12-23_13h53_22.png

  • syslog : Syslog
    2022-12-23_13h54_11.png

その他クエリ参考 Docs

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1