Home –  PostgreSQL
Tag Archives: PostgreSQL

pgwatchを試してみる

PostgreSQL用の統計情報(キャッシュヒット率やディスク利用量など)を見やすくしてくれるツールはないものかと思いなんとなく調べてみたらpgwatchというものをがあるというのをしりました。

http://www.cybertec.at/en/postgresql_products/pgwatch-cybertec-enterprise-postgresql-monitor

どうやらWeb上で統計情報がみれるみたい?ということで早速インストールしてみました。
なおこのソフトですがPostgreSQLのバージョンが9.0以降のものにしか対応していないようです。

1.事前準備

ドキュメントを覗くと

- Apache (webserver)
 - PHP 5 (scripting language)
 - pgsql extension for PHP (see http://www.php.net/manual/en/book.pgsql.php)
 - PostgreSQL 9 (to store the data we collect)
 - dblink (contribution module for PostgreSQL 9)

と書いてあります。
ハードルは高くないとは思いますが dblink をインストールしておかないと行けないというのがミソでしょうか。contribをそのまま入れてれば問題ないのかなと思っています。

2.インストール

http://www.cybertec.at/en/ressources/postgresql_downloads

上記URLのページからpgwatch(私が確認したときはVersion1.0)をダウンロードします。
ダウンロードしたファイルを解凍した上でWeb公開用のディレクトリに配置します。

今回私は/var/www/html/pgwatchに配置しました。

 

セットアップにいくつかの方法があるようです。

  • Webからのセットアップ(http://ホスト名/インストールディレクトリ/setup.php)
  • コンソールからのセットアップ(/var/www/html/pgwatch/setup.sh)

またpgwatch自身もDBが必要な為、予めアカウントとデータベースは作成しておきました。
(よく分かってないのですが、セットアップ中にアカウント、データベースの作成もしてくれる感じでもありました。)

 

今回、SSHで接続してコンソールからセットアップしています。

データベースサーバが192.168.1.240, pgwatchをインストールしたサーバは192.168.1.238という環境でのセットアップのログを下記に記載します。

cd /var/www/html/pcwatch
./setup.sh

[root@postgres01 pgwatch]# ./setup.sh
Please enter the host name of the application (localhost): 192.168.1.238
Host name will be "192.168.1.238"
Please enter the folder name inside the host this app is located in (pgwatch):
Folder name will be "pgwatch"

Application url: http://192.168.1.238/pgwatch
Path to PostgreSQL binaries (/usr/bin)?
Binaries will be used in "/usr/bin"
Database server host (localhost)? 192.168.1.240
Connection will go to host 192.168.1.240
Database server port (5432)?
Connection will work through port 5432
Please enter the database name to create (pgwatch):
Database name will be "pgwatch"
Please enter the database user's password: pgwatch
Database password will be "pgwatch"
Create new user to use pgwatch (Y/n)? n
Existing user will be used.
Please enter the database user to connect by (pgwatch):
Database user will be "pgwatch"
Creating database pgwatch with owner pgwatch...
Creating database content...

Remember to add the following row to cron of user www-data (or so):
0 * * * * cd /var/www/html/pgwatch && /usr/bin/php util/getraw_d.php

You can acces now the application on http://192.168.1.238/pgwatch

Ready.

激しく手抜きなのですがここまでrootユーザーでやってきてます(´・ω:;.:…

www-dataユーザーでcrontab設定しろとか言われてますが、このままrootユーザーでcrontab設定しました。
実行ユーザー等はインストール環境に応じて設定して下さい(ディレクトリのオーナー等)

上に書いてある通りcrontabを設定しました。が、ちょっとだけ変更をしました。

0 * * * * cd /var/www/html/pgwatch && /usr/bin/php util/getraw_d.php > /dev/null

といっても > /dev/null しているだけですが・・・。
cronの結果がメールで届くような形にしている場合、毎回やたら長い実行中の内容(?)が出力されるのでそれは必要ないと思った次第です。

3. 実行確認

ブラウザで http://インストールしたサーバ/インストールしたディレクトリ/へアクセスして下さい。
(今回私の場合はhttp://192.168.1.238/pgwatch/となります。)

そうすると監視先のデータベースサーバのアカウントなどの設定する画面が出てきますので、設定して下さい。
ポイントとしては接続するアカウントはスーパーユーザーが必要みたいです。一般ユーザーでアクセスしても統計情報が取得できませんでした。(当たり前のような気もしますが・・・)

ホントは画像入りで書こうと思ったのですが面倒で・・・・(;´Д`)

上手く設定できれば↓のようなページで色々と情報を見ることが可能です。

4. 感想など

個人的には結構手軽に設置出来てWebページでグラフィカルに見えるので非常にありがたいツールかなと思います。

またDBサーバに設置する必要もないのでそういった点もありがたいです。
監視先のサーバはpgwatch用のデータベースのあるサーバとは全く別のサーバも設置できますので、複数台DBサーバがあってもpgwatchはひとつだけインストールしておけば大丈夫です。

PostgreSQL9.0以降という制約がありますが簡単にインストール出来るので一度使ってみる価値はあるのではないかと思いました。

PacemakerとPostgreSQLの組み合わせがやっと出来ました。

最初わけがわからず挫折した、PacemakerとPostgreSQL 9.1の同期レプリケーションによるマスター・スレーブ構成の設定がなんとか完了しました。

未だに意味のわからない設定とか多々あるので、これから学習しなければ・・・と思います。

えと、使ったリソースエージョントは「PostgreSQL 9.1 ストリーミングレプリケーション対応 リソースエージェント」です。

さて設定についてですが基本的にPacemakerわかる人はすぐわかると思いますし、私がやった設定をここで書いても私自身解説できないのでなんの意味もないのでここでは書かない事とします(;´Д`)

個人的にハマったのは、nodeリストにうっかりホスト名を間違えて記載してしまって気がつかずに数時間・・・もしくは一日ぐらいはまってました(;´Д`)

あと、スレーブ側のPostgreSQLのpgsql-statusがHS:aloneのまま上手くいきませんでした。

これはどうやって直したのかよく覚えてないのですが、多分yumでインストールしたPostgreSQLではenable-nls設定されているためうまく動作せず、改めてソースから–enable-nlsオプションは付けずにコンパイルしたものを使いました。
たぶんそれで解決出来ると思います。

pg_controldataコマンドがローカライズされてしまって、うまく認識できないんじゃないかと推測しています。

まったくもって勘違いでした。もう一度やってみたら普通に動作しました。お騒がせいたしましたm(_ _)m

そうこうしてやった結果、なんとか動作しましたcrm_mon -fAをしてみるとこんな感じになりました。

============
Last updated: Sun Jan 8 18:40:50 2012
Stack: Heartbeat
Current DC: postgres02 (94f13cd6-969f-42e8-afb1-121484975bb3) - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, unknown expected votes
4 Resources configured.
============

Online: [ postgres02 postgres01 ]

vip-master (ocf::heartbeat:IPaddr2): Started postgres02
vip-slave (ocf::heartbeat:IPaddr2): Started postgres01
 Master/Slave Set: msPostgresql
 Masters: [ postgres02 ]
 Slaves: [ postgres01 ]
 Clone Set: clnPingCheck
 Started: [ postgres02 postgres01 ]

Node Attributes:
* Node postgres02:
 + default_ping_set : 100
 + master-postgresql:0 : 1000
 + master-postgresql:1 : -INFINITY
 + pgsql-data-status : LATEST
 + pgsql-master-baseline : 11:0000000011000078
 + pgsql-status : PRI
* Node postgres01:
 + default_ping_set : 100
 + master-postgresql:0 : -INFINITY
 + master-postgresql:1 : 100
 + pgsql-data-status : STREAMING|SYNC
 + pgsql-status : HS:sync

Migration summary:
* Node postgres02:
* Node postgres01:

構成がサンプルと微妙に違うせいかcrm_mon -fAの結果も結構違うのが気になっていますが、幾つかやってみた感じだ問題なく動いているように感じます。

 

あとは色々試してみて問題無いことを確認するのと障害発生時の対応HOW TO集を準備できればよい・・・と。