アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

cactiを使ったサーバ監視

こんにちは、牧野です。
今回はサーバ監視の話です。普段からサーバの状態を把握しておくと、いつの間にかハードディスクの残容量がなくなっていた、負荷が大きくなっていてサーバが落ちた、というようなトラブルを防げる確率が上がります。またサーバの異常がすぐにわかれば対応も早くでき、サービスの安定稼動につながります。
cactiはサーバやルータ等の機器監視を行うプログラムで、機器の様々な状態を調べて記録し、webページできれいなグラフを出してくれます。

…このテストサーバの画像だと多少寂しいですが、監視期間が長くていろんなグラフを追加していくともっときれいに見えます。。
また、監視対象の機器を追加するといった設定変更もwebから行うことができます。(監視対象機器の設定は、別途必要ですが。)
それでは、cactiの設定について紹介していきます。ちなみに、僕の環境はcolinuxのCentOS4.5です。

■インストール
cacti本体以外に、apachephprrdtoolなどが必要になります。

1.パッケージで必要なものをインストール
httpd
php
php-mysql
php-snmp
perl
mysql
mysql-server
net-snmp
net-snmp-utils
はパッケージで入れると楽です。

yum install パッケージ名

phpがソースで入っている場合はconfigureオプションを追加して再インストールすることになるかもしれません。
--enable-sockets
--with-snmp=(インストールディレクトリ)
--with-mysql=(インストールディレクトリ)
がオプションにあれば、多分大丈夫です。

2.rrdtoolのインストール
rrdtoolは保存しておいたデータからグラフを出力するプログラムで、cactiではrrdtoolを使ってグラフを出力します。
CentOSでは通常、パッケージが見つかりません。(パッケージもあります)

ソースからインストールする場合

rrdtoolのダウンロードページ
http://oss.oetiker.ch/rrdtool/download.en.html

ダウンロードしたrrdtool-1.2.xx.tar.gzを解凍、展開したディレクトリで
./configure --disable-tcl
make
して、rootで
make install
します。

なお、yumの設定を変更してレポジトリを追加すると、rrdtoolcactiCentOSでもパッケージでインストールできるようになります。
dagレポジトリの追加 http://www.aconus.com/~oyaji/centos/yum_centos.htm

3.cacti本体のインストール
http://cacti.loaded.jp/
等にインストール手順が載っています。
cacti最新版は記事を書いている時点で0.8.7aです。
http://www.cacti.net/

パッチがあるので
http://www.cacti.net/download_patches.php
からダウンロードしてcactiディレクトリに配置後、cactiディレクトリに移動して
patch -p1 -N < パッチファイル名
を実行します。

初めてウェブページにアクセスすると、rrdtoolphpsnmp関係のコマンドのパスを設定する画面が出てきます。
エラーになっている場合は正しいパスを入力して下さい。

これで完成です。最初からローカルホストのグラフは登録されていて、5分待てばcronが動いてグラフが表示されます。
…でも、ちょっとしたことでうまくいかないもしれません。今までにあったのは、

・cronは動いているのに、待っていても画像が表示されない
いろいろ調べたら、結局rrdtoolのバージョンデータが何故かcactiデータベースに入っていなかったのが原因でした。
INSERT INTO settings (name, value) VALUES ('rrdtool-version', 'rrd-1.2.x');
でデータを追加。
ちなみに、グラフ詳細画面で右上の工具アイコンをクリックするとグラフ表示の時に実行するrrdtoolコマンドが表示されるので、デバッグに使えます。


・devicesの詳細で見ると、pingのエラー
phpのenable-socketsオプションがあるか確認。



■監視対象サーバの追加
1.監視対象サーバのsnmpdの設定
監視対象サーバにsnmpdをインストールします。
yum install net-snmp
yum install net-snmp-utils

設定ファイル /etc/snmp/snmpd.conf についてですが



#com2sec で始まる行では、指定したネットワーク範囲(2つ目)にセキュリティ名(1つ目)をつけ、3つ目でコミュニティ名(パスワードのようなもの)を設定
com2sec localnet          localhost       local
com2sec securenet         192.168.1.0/24  secure

#group で始まる行では、com2sec行で設定したセキュリティ名をグループ化し、そのグループで使用できるsnmpのバージョンを指定する。
#1つ目がグループ名、2つ目がsnmpのバージョン(1ならv1 2ならv2c 3ならusm)、3つ目がそのグループに属するセキュリティ名。
group   local_group    usm           localnet
group   local_group    v2c           localnet
group   local_group    v1            localnet
group   local_group    usm           securenet
group   local_group    v2c           securenet
group   local_group    v1            securenet

#view で始まる行では、snmpで公開する情報の範囲を設定し、その設定に名前(ビュー名)をつける。
#1つ目がビュー名、3つ目が情報の範囲、2つ目は3つ目で指定した情報範囲の公開設定。
#includedだと3つ目で指定した範囲を公開する。.1にすると、全ての情報が指定されたことになる。
view view_all included .1

#access で始まる行では、グループごとに公開設定をする。上で設定したビューはここで使用。
access  local_group        ""      any       noauth    exact  view_all none none


view行最後の番号はMIBのオブジェクトIDで、この番号で機器の情報を指定できるようになっています。
http://www.atmarkit.co.jp/fnetwork/rensai/snmp03/01.html
に分かりやすい説明があります。

snmpdを起動したら、ちゃんと動くか確認します。監視対象サーバで
/usr/bin/snmpwalk -v 1 -c local localhost .1.3.6.1.2.1
のようなコマンドを実行して、いろんな情報が出てくれば成功です。
-vはsnmpのバージョンで1なら1、2なら2c、3なら3を、-cはコミュニティ名を指定します。
cactiサーバからも監視対象サーバを指定して実行しておくといいと思います。


2.cactiで監視対象サーバを追加
consoleメニューのDevicesで、右上のAddから追加します。
Host Templateは「udp/net SNMP Host」を、SNM POpionsはVersion 1を選択し、SNMP Communityに上記com2sec行で設定したコミュニティ名を入力します。

3.グラフの作成
引き続き上部の「Create Graphs for this Host」から作成できます。


cactiの機能追加
cactiプラグインをインストールすると機能追加できます。
http://www.sabakan.info/techinfo/cacti-0.8.7-3.html
がわかりやすくまとまっています。tholdプラグインを入れて設定すると、何かあった時にアラートメールを送るようにできるのでおすすめです。


■監視項目の追加
ホストテンプレートを追加し、サーバの設定を追加すると、簡単に監視項目を追加できます。
例えば
http://www.sabakan.info/techinfo/cacti-0.8.7-5.html
でダウンロードできるテンプレートを使うと、snmpd.confの変更等は必要ですが、プロセスやハードディスク容量の監視ができるようになります。
他にも様々ななテンプレートがcactiのフォーラムで公開されています。
フォーラムの検索ページ http://forums.cacti.net/search.php
サーバだけでなく、特定のネットワーク機器用のテンプレートもあったりします。


…長くなってしまいましたが、最初の設定さえできれば便利に使えます。
興味ある方は使ってみて下さい。

ちなみに、他に無料で使える監視ツールとして有名なものにnagiosがあります。これはcactiでいうtholdプラグインの機能に特化したツールで、より細やかな監視が可能です。
(例えば、webサーバにアクセスして何秒レスポンスがなかったらメールを出す、とか)
こちらについても、そのうちブログに書くかもしれません。