ZabbixからKVMホストを通じて、仮想マシン(ゲストVM)が 起動中か停止中か(running / shut off) を自動で監視する手順を紹介します。
1. スクリプトの作成
以下の内容で、/etc/zabbix/scripts/monitor_vm_state.sh というスクリプトファイルを作成します。
#!/bin/bash
VM_NAME="$1"
# ロケールをCに強制して英語で状態を取得
STATE=$(LC_ALL=C virsh -c qemu:///system domstate "$VM_NAME" 2>/dev/null | tr -d '\r')
if [[ "$STATE" == "running" ]]; then
echo 1
else
echo 0
fi
実行権限を付与:
chmod +x /etc/zabbix/scripts/monitor_vm_state.sh
2. Zabbixエージェントの設定
/etc/zabbix/zabbix_agentd.conf に以下のUserParameterを追記します。
UserParameter=vm.state[*],/etc/zabbix/scripts/monitor_vm_state.sh $1
設定を反映するにはZabbixエージェントを再起動:
systemctl restart zabbix-agent
3. スクリプトの動作確認
コマンドラインから以下を実行します。
sudo -u zabbix /etc/zabbix/scripts/monitor_vm_state.sh 【仮想マシン名】
出力例:
1
→ 1: 起動中(running)、0: 停止中(shut off / paused など)
4. Zabbixアイテムの作成
- 名前: VM State for {#VMNAME}
- キー:
vm.state[{#VMNAME}] - タイプ: Zabbixエージェント
- データ型: 数値(整数)
- 単位: なし
- 更新間隔: 60s(推奨)
- 値のマッピング: 0 = Shut off / 1 = Running(任意)
5. トリガー例(VMが停止したら通知)
{Template_VM:vm.state[{#VMNAME}].last()}=0
補足
このスクリプトはZabbixエージェントを通じて、ゲストVMが動作中かどうかを非侵襲的に監視できます。
Low-Level Discoveryと組み合わせることで、すべてのVMを自動監視対象に追加することも可能です。

コメント