はじめに
Google Cloud (Compute Engine) でVMインスタンスを立てたとき、多くの人が直面する疑問があります。
「標準のモニタリングタブで CPU使用率は見えるのに、なぜメモリ使用率は『N/A』や『データなし』なんだ?」
解決策として「Ops Agentをインストールしましょう」という手順はよく出てきますが、この記事では 「なぜエージェントが必要なのか?」 という理由を、仮想化技術(ハイパーバイザー)のアーキテクチャという観点から深掘りして解説します。
結論:誰がその情報を見ているか
エージェントの有無による取得メトリクスの違いは、 「ハイパーバイザー(Google側の基盤)から見て、VMの中身が見えているか、見えていないか」 という境界線によって決まります。
図で表すと以下のようになります。
[ Google Cloud 基盤 (ハイパーバイザー) ] <-- ここから見えるのが「標準メトリクス」
↓
↓ (仮想化の壁)
↓
[ VM インスタンス (ゲストOS) ] <-- ここからしか見えないのが「エージェント必須メトリクス」
1. エージェントなしで取得できるもの
= ハイパーバイザーから見える「物理リソースの供給量」
Google Cloud の基盤にとって、あなたが作成したVMは「ひとつの巨大なブラックボックス」です。箱の中で何が起きているかは分かりませんが、「その箱にどれだけリソースを供給したか」 という物理的な入出力(I/O)は外側から計測可能です。
これらが、エージェントなしで取得できる標準メトリクスです。
- CPU使用率: ハイパーバイザーがそのVMに割り当てたCPUサイクル数
- ディスクI/O: 仮想ディスクに対して行われた読み書きの回数や転送量
- ネットワーク: 仮想NICを通過したパケット数
【イメージ】
電力会社(Google)は、あなたの家(VM)が「どれくらい電気を使ったか(CPU/Network)」は外のメーターで分かります。しかし、家の中で「ドライヤーを使っているのかテレビを見ているのか」までは分かりません。
2. エージェントがないと取得できないもの
= ゲストOSしか知らない「論理的な管理状況」
VM内部で動いている ゲストOS(LinuxやWindows)のカーネル が管理している情報は、ハイパーバイザーからは隠蔽(抽象化)されているため、外からは見えません。
これを知るためには、家の中にスパイ(エージェント)を送り込んで、内側からレポートを送ってもらう必要があります。
代表的なのが以下の2つです。
A. メモリ使用率 (Memory Utilization)
ここが最大のポイントです。なぜCPUは見えるのにメモリは見えないのでしょうか?
-
ハイパーバイザーの視点:
VMに「メモリ16GB」を割り当てると、物理メモリ上の領域を確保してVMに渡します。ハイパーバイザーからは、そのメモリ領域に「何かデータが入っている」ことまでは分かりますが、それが「重要なデータ」なのか「ただのキャッシュ」なのか「実はゴミデータ」なのか区別がつきません。 -
ゲストOSの視点:
確保された16GBの中で、「アプリが使用中」「キャッシュとして利用中」「空き(Free)」という論理的な管理を行っています。
「メモリの空き容量」という概念はOSが管理している帳簿上の話であり、物理的な電気信号だけを見ているハイパーバイザーには理解できないのです。
B. ディスク使用率 (Disk Space Usage)
-
ハイパーバイザーの視点:
「100GBのブロックデバイス(ハードウェア)」を提供しているだけです。 -
ゲストOSの視点:
その上にファイルシステム(ext4やNTFSなど)を作成し、ファイルを管理しています。
ディスクへの読み書き(I/O)自体は外から見えますが、「ファイルシステムの残り容量があと何%か」 という情報は、ファイルシステムの管理テーブル(iノードなど)を見なければならず、これはゲストOSの管轄です。
まとめ
違いを表に整理します。
| 分類 | 視点 | 仮想化の壁 | 取得できるもの (例) | 取得できないもの (例) |
|---|---|---|---|---|
|
標準 (エージェントなし) |
ハイパーバイザー (Google基盤) |
壁の外側 (ハードウェア層) |
・CPU使用率 ・ネットワーク通信量 ・ディスクI/O (速度) |
・メモリの中身や内訳 ・ディスクの残り容量 ・プロセス単位の情報 |
|
カスタム (エージェントあり) |
ゲストOS (VM内部) |
壁の内側 (OS/アプリ層) |
・メモリ使用率 ・ディスク使用率 ・スワップ使用量 ・アプリのログ |
(特になし) ※OSが見える情報は全て取得可能 |
おわりに
「なぜメモリ監視にエージェントが必要なのか?」という疑問は、クラウドを利用する上で非常に本質的な問いです。
それは単なるGoogle Cloudの仕様というだけでなく、「インフラ(ハイパーバイザー)は、OS内部の論理構造(メモリ管理やファイルシステム)には関与しない」 という仮想化技術のデカップリング(分離)の原則が働いているからです。
これからVMを立てる際は、「OSの中身(メモリやディスク容量)を知りたければ Ops Agent が必要」とセットで覚えておくと設計がスムーズになるはずです。