KVMをsnmpで監視するパッケージ
# yum install libvirt-snmp
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> パッケージ libvirt-snmp.x86_64 0:0.0.3-5.el7 を インストール
–> 依存性解決を終了しました。
依存性を解決しました
================================================================================
Package アーキテクチャー
バージョン リポジトリー 容量
================================================================================
インストール中:
libvirt-snmp x86_64 0.0.3-5.el7 base 31 k
トランザクションの要約
================================================================================
インストール 1 パッケージ
総ダウンロード容量: 31 k
インストール容量: 70 k
Is this ok [y/d/N]: y
Downloading packages:
libvirt-snmp-0.0.3-5.el7.x86_64.rpm | 31 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : libvirt-snmp-0.0.3-5.el7.x86_64 1/1
検証中 : libvirt-snmp-0.0.3-5.el7.x86_64 1/1
インストール:
libvirt-snmp.x86_64 0:0.0.3-5.el7
完了しました!
#
ところが、パッケージの設定を自分でやらなくてはいけない。
- /etc/snmp/snmpd.conf に追記
- rwcommunity public
- master agentx
- trapcommunity public
- trap2sink localhost
- /etc/snmp/snmptrapd.conf に追記
- authCommunity log,execute,net public
- logOption f /var/log/snmptraps.log
- logOptionは無効らしい。
- messages:: /etc/snmp/snmptrapd.conf: line 10: Warning: Unknown token: logOption.
- /etc/sysconfig/snmptrapd に追記
- OPTIONS=”-m ALL -p /var/run/snmptrapd.pid”
さらに
# libvirtMib_subagent -f -L
NET-SNMP version 5.7.2 AgentX subagent connected
と起動しっぱなしにしてsnmpにlibvertの情報を繋ぐ。
root以外のユーザは
echo 'export LIBVIRT_DEFAULT_URI="qemu:///system"' >> ~/.bashrc
と環境変数の設定が必要になる。
# snmpwalk -m ALL -v 2c -c public -OX localhost libvirtMIBやっと使える様になる。
LIBVIRT-MIB::libvirtGuestName[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = STRING: "{ゲスト1名}"
LIBVIRT-MIB::libvirtGuestState[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = INTEGER: running(1)
LIBVIRT-MIB::libvirtGuestCpuCount[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = Gauge32: 1
LIBVIRT-MIB::libvirtGuestMemoryCurrent[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = Gauge32: 3072
LIBVIRT-MIB::libvirtGuestMemoryLimit[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = Gauge32: 3072
LIBVIRT-MIB::libvirtGuestCpuTime[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = Counter64: 235710000000
LIBVIRT-MIB::libvirtGuestRowStatus[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = INTEGER: active(1)
ゲストをもう1つ増やすと・・・
LIBVIRT-MIB::libvirtGuestName[STRING: 3d8299b5-2a93-4a97-a605-cdb991695112] = STRING: "{ゲスト2名}"
LIBVIRT-MIB::libvirtGuestName[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = STRING: "{ゲスト1名}"
LIBVIRT-MIB::libvirtGuestState[STRING: 3d8299b5-2a93-4a97-a605-cdb991695112] = INTEGER: running(1)
LIBVIRT-MIB::libvirtGuestState[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = INTEGER: running(1)
LIBVIRT-MIB::libvirtGuestCpuCount[STRING: 3d8299b5-2a93-4a97-a605-cdb991695112] = Gauge32: 2
LIBVIRT-MIB::libvirtGuestCpuCount[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = Gauge32: 1
LIBVIRT-MIB::libvirtGuestMemoryCurrent[STRING: 3d8299b5-2a93-4a97-a605-cdb991695112] = Gauge32: 3096
LIBVIRT-MIB::libvirtGuestMemoryCurrent[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = Gauge32: 3072
LIBVIRT-MIB::libvirtGuestMemoryLimit[STRING: 3d8299b5-2a93-4a97-a605-cdb991695112] = Gauge32: 3096
LIBVIRT-MIB::libvirtGuestMemoryLimit[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = Gauge32: 3072
LIBVIRT-MIB::libvirtGuestCpuTime[STRING: 3d8299b5-2a93-4a97-a605-cdb991695112] = Counter64: 9080000000
LIBVIRT-MIB::libvirtGuestCpuTime[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = Counter64: 184290000000
LIBVIRT-MIB::libvirtGuestRowStatus[STRING: 3d8299b5-2a93-4a97-a605-cdb991695112] = INTEGER: active(1)
LIBVIRT-MIB::libvirtGuestRowStatus[STRING: 784f4b04-c048-47d5-97d8-78e34d65313] = INTEGER: active(1)
な感じなので、挙動が心配なKVMゲストを監視するMRTGのグラフを作るなら、やはりゲストごとに作った方が良さそうだ。
# libvirtMib_subagent
でフォークしとけばターミナルを落としても止まらないので一見便利だが
再起動したあとにまた実行しないといけないのでうっかりしやすい気がする。
動作中かどうかは
# ps -el | grep libvirtMib_sub
で確認できる。
面白いのはゲストのUUIDが判っていれば・・・
起動したり
snmpset -m ALL -v 2c -c public localhost libvirtGuestRowStatus.\'{ゲストのUUID}\' = createAndGo
停止したり
snmpset -m ALL -v 2c -c public localhost libvirtGuestRowStatus.\'{ゲストのUUID}\' =destroy
して遊べること。
snmptrapdサービスを起動し
# systemctl start snmptrapd
# systemctl enable snmptrapd
ゲストを起動すると
messages:: snmptrapd[19739]: localhost [UDP: [127.0.0.1]:60559->[127.0.0.1]:162]: Trap , DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (3478350) 9:39:43.50, SNMPv2-MIB::snmpTrapOID.0 = OID: LIBVIRT-MIB::libvirtGuestNotif, LIBVIRT-MIB::libvirtGuestName.0 = STRING: “{ゲスト名}“, LIBVIRT-MIB::libvirtGuestUUID.1 = STRING:{ゲストのUUID}, LIBVIRT-MIB::libvirtGuestState.2 = INTEGER: running(1), LIBVIRT-MIB::libvirtGuestRowStatus.3 = INTEGER: active(1)
と出るのでこれは使えるかも。
ゲストのCPUが80%を越えたらアラートを飛ばす方法ってあるのかな?