変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

2015年7月19日

【KVM】 libvirt-snmp

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
完了しました!
#
ところが、パッケージの設定を自分でやらなくてはいけない。

  1. /etc/snmp/snmpd.conf に追記
    • rwcommunity public
    • master agentx
    • trapcommunity public
    • trap2sink localhost
  2. /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.
  3. /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%を越えたらアラートを飛ばす方法ってあるのかな?



Hyper-V と VMware と KVM

どれも仮想マシンを作る時に使うものだけど
実際ドレがいいかと云えば、たいして変わらない。

  • Linux入れた後に仮想マシンを作りたいならKVM。
  • WindowsServerやWindows8ProならHyper-V。
  • WindowsのHome版ならVMware。

な感じで使っている。
使いやすさやパフォーマンスについては、

  • XPならVM Player。
  • Linux系ならKVM。
  • Windows系ならHyper-V。
    • Toolを入れるとコピペが楽。
    • ホスト側のドライブが繋げられる。
  • ゲストとホストで系列を混ぜると色々面倒。
    • ネットワークやファイル共有とか設定が面倒すぎる。
  • 自動シャットダウンは何かと不安。
    • KVMホストをシャットダウンする時にゲストをサスペンドさせると・・・
      • 時々ファイルが壊れるので、綿密なバックアップが必須。
    • Hyper-VやKVMのshutdownは、ゲストの電源ボタンを押してくれるので便利。
    • Windowsゲストを入れている場合はシャットダウンをトリガに長~いWindowsUpdateの処理が始まることがある。
    •  Hyper-Vのゲストシャットダウン完了の待ち時間はデフォルトは120分だったらしい。
    • KVMのゲストシャットダウン完了の待ち時間はデフォルトは3分らしい。
      •  /etc/sysconfig/libvirt-guests
        • # SHUTDOWN_TIMEOUT=300
    • Hyper-Vの自動停止アクションの「仮想マシンを停止する」がshutdown なのが強制電源OFFなのか不明。
    • Hyper-V(WindowsServer2012,Windows8.1)のホストを再起動した時にゲストが自動シャットダウンしない場合あった。

な感じ。
仮想マシンは、OSの中にOSを入れる訳で、ホストもゲストも性能が悪くなりやすいから、CPUの仮想マシン用の命令を使う事が多く、今では、仮想マシンの中に仮想マシンを入れて、更に仮想マシンを・・・と云う入れ子は眼中には無いようだ。
社員に1台づつPCを配布しているなら、好きな様にいくつも仮想マシンを作れて便利。
しかし、データセンターの仮想マシンに手元のPCからリモートデスクトップで接続してる場合は、一人につき仮想マシンは1個か2個な感じになるだろう。
そうなると、インストーラーのテストするなら、手元にインストーラーのテストPCを置いて仮想マシンをガンガン壊しまくった方が便利だ。
それに仮想マシンを好き勝手に変えると接続できなくなってしまうこともあるので、 一般ユーザでの利用が無難。でも管理者モードが使えずアプリのインストールもままならないかもしれない。
な訳で、仮想化は、何でもデータセンターに統括すれば良しという訳では無い。

  • 仮想マシンをガンガン壊しまくるなら、手元のPC。
  • デモやプレゼンのためにWEBサービスを立ち上げるなら、クラウドの仮想マシン。
  • 沢山の社員が定型業務で特定のアプリだけ使うならインストールやメンテが楽(?)なプライベート・データセンターの仮想マシン。

な感じかな?
ただ、外部とネットワークが遮断された環境では、
手元のPCにWindowsのプレビューを試しに入れてみるということすら難しい。
色々な更新がやってくるが、全てネット経由なのだ。
つまり、
あれやこれやと制限すると、ちゃんと使える様に管理したり運用するのは、とても大変で、
また一方では、何でも自由に変えられると、トラブルが絶えない。
この按配がなかなか難しい。(大笑
そして、仮想マシンを使うメリットが発生するそもそもの元凶は
『インストールがメンドクサイから、嘘だと思うなら10回やってみな!終電の方が先にやってくるよ!』
の一言に尽きる。
もちろんよくあるWindowsにMS-OfficeとVisualStudioを加えたインストールなんだけどね。



Virtual Machine Viewer 2.0256

https://virt-manager.org/download/
virt-viewer 2.0 Win x86 MSI (gpg) か Win x64 MSI (gpg) から
ダウンロードできる。

VirtView
とてもシンプルなUI

前は
HOSTに{IPアドレス}
PORTに{ポート番号}
を入れて【Connect】を押したけど、
これは書いてある説明通りに spice:// {IPアドレス} : {ポート番号} の形式で入力する。
一度接続に成功すれば、下のRecent Connections にリストアップしてくれるので便利。
但し右上の【×】で閉じると保存しないらしい。




top