2011年11月3日木曜日

PostgreSQL をバックエンドにして Zabbix を動かす

お疲れ様です、サイオス 那賀です。

Zabbix は、広く利用されている、オープンソースの統合監視ツールです。単純な監視ツールである NagiosMunin などと比べて、より詳細な監視が可能なエージェント型の構成をとり、プロキシやノードによる分散も考慮するなど、これ一つでとりあえず必要充分と言えるのではないでしょうか。

関連リンク:

さて、Zabbix はそのデータ保持に使用する RDBMS として PostgreSQL, MySQL, Oracle, SQLite をサポートしています。ところが世の Zabbix の書籍やインストール手順は、ほとんどが MySQL 用なので、せっかくですから PostgreSQL 用を書いてみようと思います。開発も含めて MySQL が Zabbix のプライマリ DB 扱いなので分は悪いのですが、それほど複雑なクエリは発行していないようですので、問題はないでしょう。

今回は CentOS 5 上に、日本のユーザ会配布の YUM レポジトリから Zabbix 1.8 を導入して構築をしてみます。各バイナリのバージョン等は、適宜現状のものに読み替えてください。また、同じ PostgreSQL でも、今回は米 EnterpriseDB 社Postgres Plus を使用してみます。

YUM によるインストールについてはこちらに案内があります。

[root@co5v ~]# rpm -Uvh http://www.zabbix.jp/binaries/relatedpkgs/rhel5/x86_64/zabbix-jp-release-5-3.noarch.rpm
(中略)
[root@co5v ~]# alternatives --display zabbix-jp-release
zabbix-jp-release -ステータスは自動です。
リンクは現在 /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo を指しています。
/usr/share/zabbix-jp-release/zabbix-jp-1.1.repo - 優先項目 10
/usr/share/zabbix-jp-release/zabbix-jp-1.4.repo - 優先項目 20
/usr/share/zabbix-jp-release/zabbix-jp-1.6.repo - 優先項目 40
/usr/share/zabbix-jp-release/zabbix-jp-1.8.repo - 優先項目 30
現在の「最適」バージョンは /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo です 。
[root@co5v ~]# alternatives --config zabbix-jp-release
 
4 プログラムがあり 'zabbix-jp-release' を提供します。

  選択       コマンド
-----------------------------------------------
   1           /usr/share/zabbix-jp-release/zabbix-jp-1.1.repo
   2           /usr/share/zabbix-jp-release/zabbix-jp-1.4.repo
*+ 3           /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo
   4           /usr/share/zabbix-jp-release/zabbix-jp-1.8.repo

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:4
[root@co5v ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning up Everything
Cleaning up list of fastest mirrors
[root@co5v ~]# yum install -y zabbix-agent zabbix-server-pgsql zabbix-web-pgsql
(中略)
[root@co5v ~]# chkconfig iptables off
[root@co5v ~]# service iptables stop
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
[root@co5v ~]# chkconfig httpd on
[root@co5v ~]# service httpd start
httpd を起動中:                                            [  OK  ]
[root@co5v ~]# chkconfig zabbix-server on
[root@co5v ~]# service zabbix-server start
Starting zabbix server:                                    [  OK  ]
[root@co5v ~]# chkconfig zabbix-agent on
[root@co5v ~]# service zabbix-agent start
Starting zabbix agent:                                     [  OK  ]
[root@co5v ~]# 

次に Postgres Plus です。上記 URL から辿れる Postgres Plus のユーザーサイトへログインし、「ダウンロード」から "Postgres Plus Standard Server 9.0 for Linux 64 ビット" を入手します。

次に、CentOS 上に root でログインします。Postgres Plus にはウィザード形式の GUI インストーラもついているのですが、慣れてくると面倒なので、今回はコマンドラインから必要な情報を全て与えて、自動的にインストールをしてみます。オプションの詳細については、"--help" を参照してください。

[root@co5v ~]# chmod 755 postgresplus-9.0.2-1-linux-x64.bin
[root@co5v ~]# ./postgresplus-9.0.2-1-linux-x64.bin \
 --mode unattended \
 --superpassword edb \
 --enable-components dbserver \
 --disable-components \
  slony,pgJdbc,postgis,psqlOdbc,npgsql,pgbouncer,pgmemcache,pgagent \
 --dbInstallTune 0 \
 --updateNotification 0 \
 --existingEmail dummy@example.com \
 --existingpassword dummypass \
 --locale ja_JP.utf8
[root@co5v ~]# chkconfig --list postgresql-9.0
postgresql-9.0  0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@co5v ~]# service postgresql-9.0 status
pg_ctl: server is running (PID: 13099)
/opt/PostgresPlus/9.0SS/bin/postgres "-D" "/opt/PostgresPlus/9.0SS/data"
[root@co5v ~]#

もし ident しかないようでしたら、password なり md5 なりでパスワード認証をするようにしておきます。Postgres Plus では、デフォルトで local への all のアクセスを MD5 認証について許可するようになっているので不要ですが、一応以下のように明示的に設定し、サービスを再スタートさせて反映させておきます。標準的な RPM ベースの PostgreSQL ですと、ident 認証のみになっていると思います。

[root@co5v ~]# cp /opt/PostgresPlus/9.0SS/data/pg_hba.conf /opt/PostgresPlus/9.0SS/data/pg_hba.conf.orig
[root@co5v ~]# vi /opt/PostgresPlus/9.0SS/data/pg_hba.conf
[root@co5v ~]# diff -uNr /opt/PostgresPlus/9.0SS/data/pg_hba.conf.orig \
 /opt/PostgresPlus/9.0SS/data/pg_hba.conf
--- /opt/PostgresPlus/9.0SS/data/pg_hba.conf.orig
+++ /opt/PostgresPlus/9.0SS/data/pg_hba.conf
@@ -73,6 +73,7 @@
 # TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

 # "local" is for Unix domain socket connections only
+local   zabbix          zabbix                                  md5
 local   all             all                                     md5
 # IPv4 local connections:
 host    all             all             127.0.0.1/32            md5
[root@co5v ~]# service postgresql-9.0 restart
Restarting PostgreSQL 9.0:
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
PostgreSQL 9.0 restarted successfully
[root@co5v ~]#[root@co5v ~]#

次に、Zabbix 用のアカウントとデータベースを作成します。MySQL だとスキーマでネームスペースを作るところですが、そこは PostgreSQL ですので、データベース "zabbix" を作り、そこへデータを格納するようにします。ロールも "zabbix" とします。createuser の "-P" オプションで、新しいロールのためのパスワードを設定するようにします。うっかりクセで "-W" を指定しないように――"-W" は接続のためのパスワードであり、新ユーザのパスワードではありません。

[root@co5v ~]# echo localhost:5432:postgres:postgres:edb > ~/.pgpass
[root@co5v ~]# chmod 600 ~/.pgpass
[root@co5v ~]# . /opt/PostgresPlus/9.0SS/pg_env.sh
[root@co5v ~]# createdb -U postgres zabbix
[root@co5v ~]# createuser -U postgres --pwprompt --no-superuser --no-createrole --no-createdb zabbix
Enter password for new role: zabbix
Enter it again: zabbix
[root@co5v ~]# psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE zabbix TO zabbix"
GRANT
[root@co5v ~]# echo localhost:5432:zabbix:zabbix:zabbix >> ~/.pgpass
[root@co5v ~]# psql -x -U zabbix zabbix -c "SELECT now()" # 試しに
-[ RECORD 1 ]----------------------
now | 2011-XX-XX 10:52:13.482851+09

[root@co5v ~]#

Zabbix の初期データを流しこんで、前準備は終了です。

[root@co5v ~]# psql -U zabbix zabbix < /usr/share/doc/zabbix-server-1.8.*/schema/postgresql.sql
(中略)
[root@co5v ~]# psql -U zabbix zabbix < /usr/share/doc/zabbix-server-1.8.*/data/data.sql
(中略)
[root@co5v ~]# psql -U zabbix zabbix < /usr/share/doc/zabbix-server-1.8.*/data/images_pgsql.sql
(中略)
[root@co5v ~]# 

後は、http://~/zabbix/ に接続して、設定を行います。今回は、第 4 ステップ "Configure DB connection" での設定は以下のようになりました。"Test connection" をクリックして、接続が "Ok" となれば次へ進みます。

Type:PostgreSQL
Host:localhost
Port:0 ("0" でデフォルトの 5432 を利用)
Name:zabbix
User:zabbix
Password:zabbix

それ以降の設定、使い方は、他の DB と同様です。web コンソールの初期パスワードは "Admin/zabbix" です。

同じ Zabbix でも、バックエンドを PostgreSQL にすることで、PostgreSQL ならではのオンライン物理バックアップや、ストリーミング・レプリケーションによる代替機の用意など、他 DB とは違った運用が考えられるのではないかと思います。

0 件のコメント:

コメントを投稿