VMware ESXiを9650SEコントローラを載せたマシンにインストールすると、vSphereからもSNMP trapを使っても状態監視が出来ません。唯一の手段として、LSIのサポートページからダウンロードできるtw_cliをインストールして、sshでログインしたコンソールで実行するという方法がありますが、いちいちそんな手間をかけるのはめんどくさい。といっても、sshでアクセスしてコマンド使って状態確認できる状況なら、あとはそれを自動化するだけだよねぇ。ということでやってみました。
;ESXiホストへのドライバのインストール
9650SEのドライバは標準ではインストールされていないので、LSIのサポートページに従ってドライバをインストールします。 )))
;sshdの有効化
9650SEのドライバをインストールしてESXiを再起動したら、次の手順でsshdを有効化します。
)))
;SSH公開鍵の作成とコピー
監視を自動化するためには、sshの認証を通過するような仕込みをする必要がありますが、スクリプトにrootの生パスワードを書いたり、パスワード無しのアカウントを利用するのはさすがに論外なので、パスフレーズ無しのSSH公開鍵を使った公開鍵認証を使うことにします。
% ssh-keygen -N "" -f id_vmware
上記コマンドを実行すると秘密鍵(id_vmware)と公開鍵(id_vmware.pub)が生成されます。
生成した公開鍵をとりあえずVM ホスト(vmhost)にコピーします。
% scp id_vmware.pub root@vmhost:
)))
;tw_cliのダウンロードとコピー
LSIのサポートページの下の方に、tw_cli.zipがあるのでダウンロードして解凍後、コピーします。
% unzip tw_cli.zip % scp tw_cli root@vmhost:
))) ;vmhost側の準備
vmhostにログイン
% ssh root@vmhost root@vmhost"s password: [パスワード入力] (ここに注意書きがずらずらと表示される) ~ # tw_cliを/sbinに移動 ~ # mv tw_cli /sbin/ SSH公開鍵を/.ssh/authorized_keysにリネーム ~ # mkdir /.ssh ~ # chmod 700 /.ssh ~ # mv id_vmware /.ssh/authorized_keys
;より安全な設定
ここまででいったんログアウトして、テストしてみます。
~ # exit
))) ;テスト
監視サーバからvmhostにid_vmwareを使ってパスフレーズ無しでtw_cliを実行できるかテストします。
% ssh -i id_vmware root@vmhost /sbin/tw_cli show The authenticity of host "vmhost (xxx.xxx.xxx.xxx)" cant be established. DSA key fingerprint is ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added "vmhost" (DSA) to the list of known hosts. Ctl Model (V)Ports Drives Units NotOpt RRate VRate BBU ------------------------------------------------------------------------ c6 9650SE-4LPML 4 2 1 0 5 1 - %
後ほどNagiosの設定で使うので、vmhostのホスト鍵を抜き出しておきます。
% grep vmhost ~/.ssh/known_hosts > /tmp/vmhost_key
))) ;Nagiosの準備
Nagiosを実行するユーザーのホームディレクトリを調べてSSHの秘密鍵とvmhostのホスト鍵をコピーします。
# grep nagios /etc/passwd nagios:*:181:181:Nagios pseudo-user:/var/spool/nagios:/sbin/nologin # mkdir /var/spool/nagios/.ssh # mv id_vmware /var/spool/nagios/.ssh/ # cp /tmp/vmhost_key /var/spool/nagios/.ssh/known_hosts
をダウンロードしてNagiosのプラグインディレクトリにコピーします。
# cp check_raid_vm9650 /usr/local/libexec/nagios/
コピーしたスクリプト30行目付近の以下の箇所を編集して、秘密鍵の場所とvmhostへの接続のための設定を行います。
IDF="/var/spool/nagios/.ssh/id_vmware" REMOTE_USER="root" REMOTE_HOST="vmhost" REMOTE_PORT="22"
編集したスクリプトをテストします。
# /usr/local/libexec/nagios/check_raid_vm9650 -c 6 -p 0 OK - disk 0 [u0] 931.51GB SN:XXXXXXXX
成功したら、SSH関連のファイルのオーナーとパーミッションを修正します。
# chown -R nagios:nagios /var/spool/nagios/.ssh # chmod -R 700 /var/spool/nagios/.ssh
))) ;Nagiosの設定
監視スクリプトのテストに成功したら、Nagiosの設定ファイルを編集して、RAIDコントローラの監視設定を行います。以下に設定サンプルを示します。 ;チェックコマンド
define command{ command_name check_raid_vm9650_unit command_line $USER1$/check_raid_vm9650 -c $ARG1$ -u $ARG2$ } define command{ command_name check_raid_vm9650_port command_line $USER1$/check_raid_vm9650 -c $ARG1$ -p $ARG2$ }
;ホスト
define host{ use generic-host host_name vmhost alias VMware Server address xxx.xxx.xxx.xxx notification_period 24x7 notification_options d,u,r }
;サービス
define service{ use generic-service host_name vmhost service_description 9650SE unit0 contact_groups admins check_command check_raid_vm9650_unit!6!0 } define service{ use generic-service host_name vmhost service_description 9650SE port0 contact_groups admins check_command check_raid_vm9650_port!6!0 } :
)))
Nagiosの監視画面で、以下のようにスクリプトのテスト結果と同じ内容がStatus Information欄に表示されれば設定完了です。
;oem.tgzへのファイル追加
これだけでは、VMwareを再起動したときに/sbin/tw_cliや/.ssh以下のファイルが消えてしまうので、最後にoem.tgzに対して今回コピーしたファイルを追加します。
~ # mkdir /tmp/oem ~ # cd /tmp/oem ~ # tar zxpf /bootbank/oem.tgz ~ # rm .emptytgz (oem.tgzの中身が.emptytgzだけの場合) ~ # cp -rp /.ssh . ~ # mkdir sbin ~ # cp -p /sbin/tw_cli sbin/ ~ # tar zcf /tmp/oem.tgz . ~ # cp /tmp/oem.tgz /bootbank/ ~ # cd /tmp ~ # rm -rf oem
)))