システム管理者を悩ませる「毎朝8時」の悪夢
朝8時。オフィスに到着し、淹れたてのコーヒーに口をつける間もなく、あなたは画面に向き合うことになります。最初に行う作業は、ブラウザを立ち上げてvCenterにログインし、毎朝繰り返されるお決まりのクリック作業を始めることです。
各Clusterをクリックして警告(黄色)やエラー(赤色)を出しているESXiホストがないか確認し、各Datastoreの使用率が90%に達していないかチェックします。そして最も危険なのがスナップショットです。金曜日に開発者がパッチ適用のテスト用にスナップショットを作成したまま失念すると、週明け月曜日にはデルタファイルが200〜300GBまで肥大化し、LUN領域を食い尽くしてビジネスピーク時に周囲の仮想マシンごとフリーズさせてしまうこともあります。
これは例えるなら、倉庫の管理人が毎朝50部屋を歩き回り、一部屋ずつドアを開けて段ボールを開封し、台帳に記録していくようなものです。非常に疲れますし、時間がかかる上に、ヒューマンエラーによる見落としも発生しやすくなります。
Webインターフェースによる手動確認の限界
vSphere Clientは、ラボ環境のサーバー2〜3台を管理する程度であれば直感的で使いやすい画面です。しかし、インフラがESXiホスト15台、仮想マシン300台を超える規模に拡大すると、GUIは一転して運用の足かせとなります。
- 見落としのリスク: 数百ものグラフ、アラート、設定項目が常に並んでいます。無数のタブを行き来しているうちに、容量が逼迫しつつあるパーティションを簡単に見落としてしまいます。
- 作業時間の浪費: タブの切り替えやページの再読み込みに数秒から1分近く待たされることも珍しくありません。毎朝、画面をクリックし続けるだけで30分から45分もの時間を浪費してしまいます。
- チェック精度のばらつき: 月曜の朝は隅々まで慎重に確認する一方で、タスクに追われる金曜の朝は確認を急ぎ、スナップショットのチェックを飛ばしてしまうかもしれません。システムの障害は、往々にしてそうした油断の生じた日に発生します。
解決策:定型業務をVMware PowerCLIに任せる
この状況から抜け出すために、ZabbixやPRTGで監視を組んだり、REST APIを叩くスクリプトを作成したりする方法もあります。しかし、VMware運用者にとって最も手軽かつ無償で王道なアプローチはVMware PowerCLIの活用です。
PowerCLIは、PowerShellをベースにした数百種類の専用コマンドレットをパッケージ化したものです。最大の利点は、Get-VM、Get-Datastore、Restart-VMHostのように「動詞-名詞(Verb-Noun)」という直感的で覚えやすい構文にあります。Web上で50回もメニューをクリックする代わりに、たった1行のコマンドを実行するだけで必要な情報を数秒で取得できます。
ステップ1:VMware PowerCLIのインストール
現在のPowerCLIは、PowerShell 5.1およびPowerShell 7(Windows、macOS、Linux対応)でスムーズに動作します。管理者権限でPowerShellを開き、次の2つのコマンドを実行します。
# PowerShell GalleryからVMware.PowerCLIモジュールをインストール
Install-Module -Name VMware.PowerCLI -Scope CurrentUser -Repository PSGallery -Force
# vCenterが自己署名証明書を使用している場合のSSL警告を無視
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false
モジュールのダウンロードには、ネットワーク速度にもよりますが1〜3分程度かかります。
ステップ2:vCenter Serverへの接続
読み取り権限(ヘルスチェック用途であればRead-onlyで十分です)を持つアカウントでvCenterへ接続します。
Connect-VIServer -Server 192.168.1.50 -User [email protected] -Password "MatKhauCuaBan123!"
コマンドプロンプトにvCenterのバージョンやサーバー情報が表示されれば、接続成功です。
ステップ3:重要3項目を素早くチェックするスクリプトの作成
朝のチェック作業で押さえるべき急所は、「予期せず停止したVM」「3日以上放置されたスナップショット」「空き容量15%未満のDatastore」の3つに絞り込めます。
# 1. 停止状態(PoweredOff)の仮想マシンを確認
Write-Host "=== 停止中の仮想マシン一覧 ===" -ForegroundColor Yellow
Get-VM | Where-Object { $_.PowerState -eq "PoweredOff" } | Select-Object Name, NumCpu, MemoryGB
# 2. 3日以上経過した古いスナップショットをスキャン
Write-Host "`n=== 警告: 3日以上放置されたスナップショット ===" -ForegroundColor Red
Get-VM | Get-Snapshot | Where-Object { $_.Created -lt (Get-Date).AddDays(-3) } | Select-Object @{N="VM";E={$_.VM.Name}}, Name, Created, @{N="SizeGB";E={[math]::Round($_.SizeGB, 2)}}
# 3. 空き容量15%未満のDatastoreを警告
Write-Host "`n=== 警告: 空き容量が逼迫しているDatastore (空き < 15%) ===" -ForegroundColor Cyan
Get-Datastore | ForEach-Object {
$percentFree = [math]::Round(($_.FreeSpaceGB / $_.CapacityGB) * 100, 2)
if ($percentFree -lt 15) {
[PSCustomObject]@{
DatastoreName = $_.Name
CapacityGB = [math]::Round($_.CapacityGB, 2)
FreeSpaceGB = [math]::Round($_.FreeSpaceGB, 2)
PercentFree = "$percentFree %"
}
}
}
ステップ4:毎朝7:30の自動実行を設定する
毎日ターミナルを開いて手動実行する必要はありません。上記スクリプトをDailyHealthCheck.ps1として保存し、自動実行タスクを設定します。
- Windows環境: タスクスケジューラで毎朝7:30に実行するタスクを作成し、バックグラウンド処理してHTMLレポートの出力やメール送信を行います。
- Linux/Docker環境: crontabにPowerShell Core(
pwsh)を呼び出す1行を設定します。
# Windowsタスクスケジューラのアクション設定例:
# プログラム/スクリプト: pwsh.exe (または powershell.exe)
# 引数の追加: -ExecutionPolicy Bypass -File "C:\Scripts\DailyHealthCheck.ps1"
これで出社時には、インフラの点検結果がメールボックスやログファイルにすでに届いている状態になります。問題があれば即座に対応し、異常がなければクリック作業に追われることなく、ゆっくりとモーニングコーヒーを楽しめます。
