ある企業のクラウドオペレーターが、Log Analytics ワークスペースに収集された Heartbeat ログを使用して、過去 1 時間内に応答がなくなった VM を特定するための KQL クエリを記述しようとしている。最も適切なクエリはどれか。
- A. Heartbeat | where TimeGenerated < ago(1h) | distinct Computer
- B. Heartbeat | summarize LastHeartbeat = max(TimeGenerated) by Computer | where LastHeartbeat < ago(1h)
- C. Heartbeat | where TimeGenerated > ago(1h) | summarize count() by Computer | where count_ == 0
- D. Heartbeat | where Computer !in (Heartbeat | where TimeGenerated > ago(1h) | distinct Computer)
解答と解説を見る
正解: B
このクエリは各 Computer(VM)ごとに最後の Heartbeat の時刻(LastHeartbeat)を集計し、その時刻が 1 時間以上前であるものを抽出する。これにより「過去 1 時間内にハートビートが届いていない VM」を正確に特定できる。選択肢Cは「過去 1 時間内に存在した Heartbeat のカウントが 0 の VM」を探そうとしているが、WHERE 句でフィルタした結果には元からカウント 0 の行が含まれないため、この論理では応答なし VM を検出できない。選択肢Aは 1 時間以上前の古いハートビートが存在するコンピュータを取得するだけであり、その後に新しいハートビートが届いている可能性を除外していない。選択肢Dも同様の意図に近いが、選択肢Bの方が集計ベースで明確かつシンプルに同一の結果を得られる標準的な書き方である。