SNMPしゃべる機材が家にいくつかあるのですが、時間なくてMRTG使ってました。一方、過去にさかのぼれないと痛いので、前から気になっていたCactiを入れてみることにしました。

1. パッケージのチェック

まず、以下のパッケージを入れました。

パッケージ名実際に入れたバージョン
www/apache2 apache-2.2.6nb3
www/ap-php ap22-php-5.2.5nb1
database/rrdtool rrdtool-1.2.26
net/net-snmp net-snmp-5.4.1nb1
lang/php php-5.2.5
www/ap-php ap22-php5-5.2.5nb1
databases/mysql-client mysql-client-5.0.51nb1
databases/mysql-server mysql-server-5.0.51
databases/php-mysql php5-mysql-5.2.5
net/php-snmp php5-snmp-5.2.5
net/php-sockets php5-sockets-5.2.5 (pingで必要)

2. php.ini の修正

/usr/pkg/etc/php.ini に 必要に応じてextensionsを足します。上記で入れたパッケージでは、以下が必要。
extension=snmp.so
extension=mysql.so
extension=sockets.so

3. apache に 入れる

個人的な趣味で、MODULESというディレクトリを掘って、httpd.conf でincudeして、

Include etc/httpd/MODULES/php5.conf
etc/httpd/MODULES/php5.conf で、
LoadModule php5_module lib/httpd/mod_php5.so
AddType application/x-httpd-php .php
DirectoryIndex index.php
としている。(Cactiのマニュアルと、ちと違う)

4. MySQLを入れて動かす

MySQLは、すでに入っているので、省略。

5. Cactiを展開する

適当な場所で、

tar zxf cacti-{VERSION}.tar.gz   # ここでは、0.8.7a を展開している
cd cacti-{VERSION}

6. データベースを設定する

mysqladmin --user=root create cacti

mysql cacti < cacti.sql

mysql --user=root mysql
# 以下を実行
mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'somepassword';
mysql>   flush privileges;

7. inculde/config.php を編集する

設定したMySQLのパスワードを$database_passwordに設定

8. Unix的なユーザ、"cactiuser" を作る

使われるのはIDだけなので、ホームのパスなどは適当でよい。

9. cactiuser へのディレクトリパーミッション指定

cacti のディレクトリの中の、pollerが書き込むディレクトリを cactiuser にパーミッションを出す。

chown -R cactiuser rra log

10. cactiディレクトリをリンク

対象サーバの htdocs から cacti のディレクトリへリンクを張る。

注意: 一度 web 経由でアクセスすると初期化される。 このとき、様々な絶対パスが生成されてDBに入る設計なため 移動するなら、ここでやること。

11. cactiにアクセスする

http://{サーバ}/cacti
にアクセスすると、初期化操作が行われる。

ここで、rrdtool, php, snmpwalk, snmpget, snmpbulkwalk, snmpgetnext のバイナリのパスを聞かれるので、直す。

12. admin/admin でログイン

パスワードを設定しろと言われるので設定。

13. rrdtoolのバージョン設定

メニューで、"Settings" -> "General" に、 rrdtool のバージョン設定がある(Cacti Settingsに) ので設定をチェッ ク。

14. poller を cron から立ち上がるようにする。

デバッグの都合で、以下のようなスクリプトを作った: /usr/pkg/share/httpd/cacti の下にcactiのディストリビューションを置き、 /usr/pkg/share/httpd/cacti/cacti-current からシンボリックリンクを張り、 そこに、実行用のスクリプトをおいた。 実行時のログを run というディレクトリに書くように設定。

#!/bin/sh
cd /usr/pkg/share/httpd/cacti/cacti-current
date >> ../run/run.log
( date ; /usr/pkg/bin/php /usr/pkg/share/httpd/cacti/cacti-current/poller.php ; date) >../run/cacti-poller-run.log  2>&1

さらに、crontab に以下を設定 (cacti.crontab として保存しとく)

SHELL=/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
CRON_WITHIN=7200
*/5 * * * * /usr/pkg/share/httpd/cacti/cacti-run.sh >/dev/null 2>&1
設定する:
crontab -u cactiuser cacti.crontab

これで、5分毎に、pollerが動く。run/cacti-poller-run.logをチェックして、 なんかエラーが出ていないか確認する。

15. 設定は終わり..

後は、ログインページから作業

Tips.

  1. 上でも書いたけれど、絶対パスをデーターベーステーブルに書いていて、 RRDtool のデータファイルへのパスや、設定された外部Perlスクリプトの パスなぞが、書き込まれている。従って、ディレクトリを移動すると、動 かなくなる(この場合、pollerの実行時にエラーが出る)
  2. System Utilities -> View Cacti Log File で、ログを見られる。シュート に有効。また、Settings->General で、poller のエラー出力レベルを設定 できる
  3. net-snmp経由でメモリ量を監視するとき、net-snmpの configuration tool は swap パーティションのpolling設定を、デフォルトでは入れてくれない ので、snmpd.conf に、"swap" を足しておく。そうでないと、Cactiが、デー タとれないといって怒る。
  4. pollerが書くのは、cacti のディレクトリの rra と log ディレクトリ。 ここにpollerが書くので、実行時のパーミッションが出てないと、旨く動きません。

blog comments powered by Disqus