Azure Monitor パフォーマンスカウンターの算出ロジック

このエントリは2021/06/10現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。

先日以下のエントリを書いた。

Azure Monitor の パフォーマンスカウンターで得られるUsed Memory MBytesの値とfreeコマンドで得られるusedの値が異なる
https://logico-jp.io/2021/06/01/used-memory-mbytes-from-performance-counter-is-not-equal-to-used-by-free-command/

問い合わせ主に回答したところ、関連する以下の質問をもらった。

以下の数値算出方法は?

メモリー使用率(% Used Memory)
ディスク使用率(% Used Space)
ディスク使用量(Free Megabytes)
CPU使用率(% Processor Time)

どうやって収集しているのか?

エージェントはPAL(Platform Abstraction Layer)というコンポーネントを使って、ノードの種々のメトリックを収集、算出してAzure Monitorに送っている。PALのコードはGitHubに公開されている。

GitHub – microsoft/pal: Platform Abstraction Layer (both SCXCoreLib and SCXSystemLib)
https://github.com/microsoft/pal

メモリーやCPU、ディスクの情報はSCXSystemLibで集計していて、算出ロジックは*instance.cppというソースコードに記載されている。以下では算出方法を見ていく。

メモリー

コードは scxsystemlib/memory/memoryinstance.cpp を参照。コードを見ると、/proc/meminfo/proc/vmstatをデータソースとして使っていることがわかる。

メモリー使用量(Used Memory MBytes)

前回のエントリの通り、以下の式で計算できる。Linuxの場合、この行に記載がある。

Used Memory MBytes = MemTotal - MemAvailable

メモリー使用率(% Used Memory)

以下の式で計算できる。

% Used Memory = (MemTotal - MemAvailable) / MemTotal * 100

ディスク

コードのうち、instanceを含むファイルは5つあるが、パフォーマンスカウンターでは下図の通り論理ディスクの情報を収集しているので、scxsystemlib/disk/staticlogicaldiskinstance.cpp を参照。

ディスクの空き(Free Megabytes)

PALでstatvfs()を呼び出し、その結果から f_bfree * f_frsize (基本的なファイル・システムのブロック・サイズ×解放ブロックの合計数)で計算していることがわかる。

m_availableSpace  = f_bfree * f_frsize

ディスク使用率(% Used Space)

df -mで確認できるUse %と同じだが、計算式は以下の通り。

% Used Space = (m_sizeInBytes - m_availableSpace) / m_sizeInBytes * 100

CPU

コードは scxsystemlib/cpu/cpuinstance.cpp を参照。

CPU使用率(% Processor Time)

Tick数のデルタ値を使って算出していることがこの行で確認できる。これによると、計算式は以下のようである。

m_processorTime = (user_delta_tics + nice_delta_tics + system_delta_tics + irq_delta_tics + softirq_delta_tics) / 
total_delta_tics * 100

値としては、mpstatで確認できる値から算出したものに近い(近いと書いているのは、mpstatの出力情報は丸められており、完全に一致するわけではないから)。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中