{ 2010.9.10 }

CentOSでEucalyptusを構築してNagiosとGangliaで監視する(2)

  • eucalyptus
はてなブックマーク - CentOSでEucalyptusを構築してNagiosとGangliaで監視する(2)
このエントリーをはてなブックマークに追加

はじめまして或いはこんにちは。Fusic 仁井です。

タイトルからもわかりますように、今回は連続記事2回目となっております。
前回の記事ではCentOSにEucalyptusをインストールするところまで行きました。
続きまして今回はNagiosのインストールと設定、そしてEucalyptusの監視までとなります。

Nagiosで監視する

dagからYumでインストールできます。

# yum --enablerepo=dag -y install nagios nagios-plugins
# vim /etc/nagios/nagios.cfg
cfg_dir=/etc/nagios/servers # コメント解除
 
# mkdir /etc/nagios/servers
 
# chown nagios. /etc/nagios/servers
 
# vim /etc/nagios/objects/contacts.cfg
email hoge@hoge.hoge #ここで指定したメールアドレスに警告メール等が飛んできます
 
# htpasswd -c /etc/nagios/htpasswd.users nagiosadmin # ユーザ名とパスワードを設定する
New password: 
Re-type new password: 
Adding password for user nagiosadmin
# /etc/init.d/nagios start
# chkconfig nagios on
# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

というわけで、これでNagiosインストール完了です。

ホストのIPアドレス/nagios/にアクセスすると、ユーザ名とパスワードを聞かれますので、先程設定したユーザ名とパスワードを入力します。ホラー映画のタイトルに使われそうなフォントでNagiosと書いてある画面がでたらOKです。

ここでちょっと監視設定のために画面を操作します。

Services画面を見ると、メガホンだかベルだかのマークが付いているものがありますので、そちらをクリックします。


「Enable notifications for this service」をクリックします。


「Commit」ボタンをクリックします。


「Done」をクリックします。


マークが消えます。これで通知設定が有効になりました。
この状態で、例えばSSHを止めると、コンフィグで設定したメールアドレスに異常通知のメールが飛んできます。

ちなみに、/var/www/html/にindex.htmlが存在しない場合、HTTPがWarningを吐き続けてそれはもう欝陶しい事になりますのでご注意下さい。

NagiosでEucalyptus

今回の目的はEucalyptusの状況を監視することですので、さらに続きが。

eucalyptus.linux4u.jp/wiki/index.php?EucalyptusMonitoring_v1.6

を読むと、

>NagiosとGanglia用のサンプルスクリプトを用意しています。Nagiosでサンプルスクリプトを使うことによって、Eucalyptusのコンポーネントおよび、そのコンポーネントが動作するマシンの状態を監視することができます。Gangliaでは各種リソースの使用状況を監視することができます。
>サンプルスクリプトの動作にはNagiosとGangliaが必要です。Debian/Ubuntuでは、まずNagiosをインストールしWebブラウザからモニタページを確認できるまでにします。その後、サンプルスクリプトを実行します(README.Monitoringファイルの内容に従って実行します)。Eucalyptus監視のためのルールが追加されます。その後Nagiosを再起動することでEucalyptusの基本的な監視ができるようになります。

とありますので、まずはREADME.Monitoringを読たいところです。が、これを読むためにはEucalyptusのソースファイルを落としてこなければなりません。こちらのページの下の方からダウンロードしましょう。
ファイル自体は、解凍したEucalyptusディレクトリ中の/extraディレクトリにあります(./eucalyptus-1.6.2/extras/)。中をみてみると、nagiosでEucalyptusを監視するためにはnagios.shを使用しろ、となっています。
このnagios.sh(と、今後使うganglia.sh)も、README.Monitoringと同じディレクトリの中に入っています。

スクリプトを使う前に少し修正を加えます。

# vim nagios.sh
# NAGIOS_PIPE="/var/lib/nagios3/rw/nagios.cmd"   #コメントアウト
NAGIOS_PIPE="/var/nagios/rw/nagios.cmd"

修正後、実際にシェルスクリプトを実行します。
引数one two three four にはホスト名を入れてください。

# ./nagios.sh -setup -nodes "two three four" -cc "one" -cloud one -walrus "one" > eucalyptus.cfg
# cp eucalyptus.cfg /etc/nagios/objects/
# vim /etc/nagios/nagios.cfg
34行目に追記
cfg_file=/etc/nagios/objects/eucalyptus.cfg
# /etc/init.d/nagios restart

実行後、生成されたファイルをeucalyptusのインストールディレクトリの指定の場所にコピーし、nagios.cfgにファイルの指定を追記します。
そしてnagiosを再起動させると、動きませんでした。ログ(/var/log/nagios/nagios.log )を見ると必要なものが入っていないと怒られてます。

プラグインその他まとめてすべてインストール

# yum --enablerepo=dag install nagios*

そして再びNagiosを再起動をかけると動きません。今度はコマンドがないと怒られます。
コマンドを定義する必要があるので、エラーログを見ながらコマンドを追加していきます。

以下、Errorログの例。

Error: Service check command 'check_load' specified in service 'eucalyptus-nc' for host 'four' not defined anywhere!
Error: Service check command 'check_load' specified in service 'eucalyptus-nc' for host 'four' not defined anywhere!
Error: Service check command 'check_load' specified in service 'eucalyptus-cc' for host 'one' not defined anywhere!
Error: Service check command 'check_load' specified in service 'eucalyptus-cloud' for host 'one' not defined anywhere!
Error: Service check command 'check_load' specified in service 'eucalyptus-walrus' for host 'one' not defined anywhere!
Error: Service check command 'check_load' specified in service 'eucalyptus-nc' for host 'three' not defined anywhere!
Error: Service check command 'check_load' specified in service 'eucalyptus-nc' for host 'two' not defined anywhere!

というわけで、エラーを解決するためにコマンドを追加します。
コマンドの追加はcommands.cfgファイルに追記することで可能です。

詳細なエラーを見る
# nagios -v /etc/nagios/nagios.cfg
 
# vim /etc/nagios/objects/commands.cfg
define command{
command_name    check_local_load
command_line    /usr/lib/nagios/plugins/check_load -w $ARG1$ -c $ARG2$
}
 
define command{
command_name    check_local_users
command_line    /usr/lib/nagios/plugins/check_users -w $ARG1$ -c $ARG2$
}
 
define command{
command_name    check_local_procs
command_line    /usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
}
 
# 'check_ssh' command definition
define command{
command_name    check_ssh
command_line    /usr/lib/nagios/plugins/check_ssh -t $ARG1$ $HOSTADDRESS$
}
 
# 'check_local_swap' command definition
define command{
command_name    check_local_swap
command_line    /usr/lib/nagios/plugins/check_swap -w $ARG1$ -c $ARG2$
}
 
 
# vim /etc/nagios/objects/eucalyptus.cfg
#check_command           check_load
check_command           check_load!1,1,1!2,2,2
 
nagiosを再起動
# /etc/init.d/nagios start
nagios は停止しています
nagios を起動中:                                           [  OK  ]

ということで起動しました。

ここまで終わると、Services画面に情報が追加されているかと思います。
基本的にログの情報を見て、コマンドが足りていなかったり引数が足りていなかったりという情報を読取り、対応をする、の繰り返しで対処することになるかと。
また、[nagios -v /etc/nagios/nagios.cfg]を使うと、いちいちログを開かなくて良いので楽です。

ということでここまでで今回の内容は終わりです。
次回はGangliaのインストールとEucalyptusの監視……ですが、まあ、README.Monitoringを読めば解決しちゃいます。
それでは。

おまけ

Nagiosがエラーを検出した祭、異常通知を複数に送りたい場合は、contact.cfgファイルを編集します。

# vim /etc/nagios/objects/contacts.cfg
define contact{
        contact_name                    newcontact
        use                             generic-contact
        alias                           New Contact 
 
        email                           hogehoge@hogehogel.com
        }
 
 
define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 nagiosadmin, newcontact    #membersに追加したcontactのcontact_nameを追加
        }

defineでcontactを新たに定義し、contactgroupのmembersに加えていくだけです。

comments

  1. sandy より:

    I’d like to know how to monitor eucalyptus instances through nagios and ganglia. Now my CC,CLC and SC are on a single system (172.16.6.55) and what ip should i give for monitoring. I’m unclear about the concepts! could you please help me out.

    Thanks in advance.