pg_reporter 2.0.0


  1. pg_reporterとは?
  2. 機能概要
  3. pg_reporter 1.0.1からの機能の変更点
  4. インストール
    1. 動作環境
    2. pg_reporterのインストール
    3. CGIモードで動かす場合の設定
  5. 各モードの使い方
    1. 前提条件
    2. コマンドラインモード
    3. CGIモード
    4. 簡易httpdモード
  6. アンインストール
  7. コマンドリファレンス
    1. 形式
    2. オプション
    3. ディレクトリ構成
    4. データベース接続情報設定ファイル
  8. 使用上の注意と制約
  9. 添付のテンプレートで指定できるパラメータ
  10. よくあるQ&A
  11. 関連項目
  12. 謝辞

pg_reporter とは?

PostgreSQL に格納した任意のデータを使って 汎用的な HTML レポートを作成します。 pg_statsinfo-2.2 と併用することで、pg_statsinfoで取得したサーバの利用統計情報のグラフィカルな出力が可能になります。
pg_statsinfo で取得した利用統計情報を用いたレポート例はこちらをご覧ください。また、レポート出力結果の見方についてはこちらをご覧ください

機能概要

pg_reporter は、テンプレートを使って PostgreSQL に格納したデータからレポートを作成します。
ユーザは自由にテンプレートを作成でき、そのテンプレートを元にレポートを出力することができます。(オリジナルのレポートを作成するには SQL と HTML の知識が必要です。)

pg_repoter には、以下の動作モードがあります。

pg_reporter を簡易的に試されたい方は、まずはコマンドラインモードで実行することをお勧めします。
CGI モードと簡易 httpd モードでは、スナップショットの一覧からのナビゲーションもサポートしており、マウスを数クリックするだけでグラフィカルな性能レポートを閲覧できます。

pg_reporter 1.0.1からの機能の変更点

pg_repoter 2.0 へのバージョンアップに伴う機能の変更点は以下の通りです。

インストール

pg_reporter のインストールについて説明します。各インストールパッケージはこちらからダウンロードして下さい。

動作環境

PostgreSQL
バージョン 8.3, 8.4, 9.0, 9.1 
動作確認済みOS
RHEL 5.x, 6.x, CentOS 5.x, 6.x 
動作確認済みブラウザ
Firefox
動作確認済みHTTP Server
Apache HTTP Server

pg_reporterのインストール

RPM

以下は PostgreSQL8.4 の RHEL5 のx86_64用の rpm をインストールする例です。
$ su
# rpm -ivh pg_reporter-1.0.1-1.pg84.rhel5.x86_64.rpm

source

pg_reporter のsourceからのインストールは、標準の contrib モジュールと同様ですが、PostgreSQL が --with-libxml 付きでビルドされている必要があります。(RPM はデフォルトで --with-libxml が付いています)
pgxs を使ってビルドできます。

$ cd pg_reporter
$ make USE_PGXS=1
$ make USE_PGXS=1 install

注意:
PostgreSQL9.0 の RPM では、各種ファイルのインストールディレクトリが変更されているため、 pg_reporter の RPM もそれと同じディレクトリへ各ファイルをインストールするようになっています。
例えば、実行ファイルは従来"/usr/bin"配下に配置されていましたが、PostgreSQL9.0 用の RPM では "/usr/pgsql-9.0/bin" になっています。

CGIモードで動かす場合の設定

Apache HTTP Server のインストール

pg_reporter を CGI モードで使用する場合、Apache HTTP Server のインストールを行います。
以下はx86_64用の rpm をインストールする例です。

# rpm -ivh httpd-2.2.11-1.x86_64.rpm

Apache HTTP Server の CGI 格納ディレクトリに pg_reporter を格納します。
以下はPostgreSQL8.4 の rpm をインストールした場合の格納の例です。
※  pg_reporterはPostgreSQL のインストール先ディレクトリに含まれる bin ディレクトリ配下に格納されています。

# cp /usr/bin/pg_reporter /var/www/cgi-bin

Apache HTTP Server の起動

Apache HTTP Server を起動します。

# service httpd start

各モードの使い方

前提条件

pg_reporter に付属するレポート・テンプレートは pg_statsinfo のリポジトリを表示させるためのものです。
前もって pg_statsinfo のリポジトリを初期化してください。
スキーマ情報表示のみであれば、特にデータベースへの登録作業は必要ありません。

コマンドラインモード

コマンドラインモードで、レポートを作成する手順を説明します。

初期化

レポートを作成するためのディレクトリを作成します。下記の例ではユーザのホームディレクトリ配下にstatsinfoというレポート用ディレクトリを作成しています。指定したディレクトリがすでに存在する場合は、エラーとなりますので注意してください。

$ pg_reporter -i ~/statsinfo

レポート作成

statsinfo にディレクトリを移動し、レポートを作成します。
この時、他のほとんどの PostgreSQL ユーティリティと同様、libpq でサポートされる環境変数を使用できます。詳細については、PostgreSQL文書の環境変数の項目を参照してください。
下記の例では、localhost のポート5432で稼動している PostgreSQL の postgres というデータベースに postgres というユーザで接続し、添付のテンプレート details.xml を使い、さらにスナップショット ID が1から10の情報を用いた出力結果を、レポートとして report.html に作成しています。 

$ cd statsinfo
$ pg_reporter -h localhost -p 5432 -U postgres -d postgres -t template/details.xml -o files/report.html -a "begin=1&end=10"

また、下記の例では、localhost のポート5432で稼動している PostgreSQL の postgres というデータベースに postgres というユーザで接続し、添付のテンプレート details_date.xml を使い、さらに2011/12/21のスナップショットの情報を用いた出力結果を、レポートとしてreport.htmlに作成しています。-a オプションのm_hostには監視対象データベースが起動しているホスト名を、m_portには監視対象データベースの接続に使用しているポート名を指定します。

$ cd statsinfo
$ pg_reporter -h localhost -p 5432 -U postgres -d postgres -t template/details_date.xml -o files/report.html 
              -a "m_host=localhost.localdomain&m_port=5432&begin=2011-12-21 00:00:00&end=2011-12-21 24:00:00"

完成したレポートは、ブラウザで見ることができます。

CGI モード

CGIモードで、レポートを作成するための手順を説明します。

初期化

レポート用ディレクトリをドキュメントルートに作成します。
下記の例は、Apache を RPM でインストールした場合の標準のドキュメントルートをレポート用ディレクトリとして初期化しています。標準のドキュメントルートを使用する場合はルートユーザで初期化を行う必要があります。また、ドキュメントルートのディレクトリが既に存在する場合は、エラーとなりますので注意してください。

# pg_reporter -i /var/www/html

データベース接続情報設定

データベース接続情報設定ファイル (pg_reporter.conf) にデータベース接続情報を記述します。
下記の例は、localhost のリポジトリデータベースへの接続情報をDB001として記述しています。また、/var/www/htmlをレポート用ディレクトリに指定しています。なお、レポート用ディレクトリには絶対パスを指定してください。

# vi /var/www/html/pg_reporter.conf
DB001	/var/www/html	localhost	5432		postgres	postgres	postgres

pg_reporter.conf は pg_reporter の実行ファイルと同じディレクトリ内に存在する必要があるため、pg_reporter.conf を /var/www/cgi-bin 配下に移動します。

# mv /var/www/html/pg_reporter.conf /var/www/cgi-bin

また、下記の内容のシェルスクリプト pg_reporter を cgi-bin 配下に用意することで、pg_reporter.conf を 任意の場所に配置して、pg_reporter を起動することができます。

# vi /var/www/cgi-bin/pg_reporter
#!/bin/sh
/usr/bin/pg_reporter -c <データベース接続情報設定ファイル>

レポート作成

リポジトリ DB 選択画面を表示します。ブラウザのアドレスバーに以下の URL を入力してください。URL の記述形式の詳細はこちらを参照してください。

http://localhost/cgi-bin/pg_reporter?id=DB001&template=dbnames

各画面における操作方法の説明はこちらを参照してください。

簡易httpdモード

簡易 httpd モードで、レポートを作成する手順を説明します。

初期化

レポートを作成するディレクトリを作成します。指定したディレクトリがすでに存在する場合は、エラーとなりますので注意してください。
下記の例は、ユーザのホームディレクトリに statsinfo を、レポート用ディレクトリとして初期化しています。

$ pg_reporter -i ~/statsinfo

データベース接続情報設定

データベース接続情報設定ファイル (pg_reporter.conf)  にデータベース接続情報を記述します。
下記の例は、localhost のリポジトリデータベースへの接続情報を DB001 として記述しています。また、ユーザのホームディレクトリ配下の statsinfo をレポート用ディレクトリに指定しています。なお、レポート用ディレクトリには絶対パスを指定してください。

$ vi ~/statsinfo/pg_reporter.conf
DB001  <ユーザのホームディレクトリ>/statsinfo	localhost	5432		postgres	postgres	postgres

レポート作成

簡易 httpdモードで pg_reporter を起動します。
下記の例は、接続ポートを8080で、ローカルホストからのみ接続可能な状態で起動します。
(注) -c オプションによるデータベース接続情報設定ファイルのパスの指定は省略することができます。詳細はこちらを参照してください。

$ pg_reporter --httpd -c ~/statsinfo/pg_reporter.conf

ブラウザからローカルホストの8080番ポートにアクセスし、リポジトリDB選択画面を表示します。
下記の例で接続した場合、スナップショットの一覧からのナビゲーションを利用したレポートの閲覧が利用できます。
このとき、css や js ファイルの参照のために、データベース接続情報設定ファイルの1行目の report_dir が参照されることに注意してください。

http://localhost:8080/

また、ブラウザのアドレスバーに下記の URL を指定してもリポジトリDB選択画面を表示することができます。

http://localhost:8080/cgi-bin/pg_reporter?id=DB001&template=dbnames

各画面における操作方法の説明はこちらを参照してください。

アンインストール

初期化モードで作成したレポート用ディレクトリは残りますので、別途手動で削除してください。また、CGI モードで使用するために pg_reporter を CGI 格納ディレクトリに格納した場合も同様に手動で削除してください。

RPM

rpm からインストールした場合は rpm コマンドでアンインストールします。

$ su
# rpm -e pg_reporter-1.0.1-1.pg84.rhel5

source

ビルドした環境でアンインストールします。

$ cd pg_reporter
$ make USE_PGXS=1 uninstall

レポート用ディレクトリの削除

レポート用ディレクトリを削除します。下記の例では簡易 httpd モード使用時にユーザのホームディレクトリに作成した statsinfo を削除しようとしています。

$ rm -r ~/statsinfo

コマンドリファレンス

形式

コマンド記述形式を下記に示します。

pg_reporter TEMPLATE [OUTPUT]

オプション

レポートオプション

-t TEMPLATE
--template=TEMPLATE
レポート作成やスナップショット一覧表示に使用するテンプレートファイルのパスを指定します。
-o OUTPUT
--output=OUTPUT
作成したレポートの出力先を指定します。デフォルトは標準出力です。
-s XSLT
--stylesheet=XSLT
レポート作成に使用するXSLTファイルのパスを指定します
-a "key1=value1&key2=value2&..."
--arg="key1=value1&key2=value2&..."
テンプレート内のSQLへ渡されるパラメータを指定します。

Httpdオプション

--httpd
簡易 httpd モードで pg_reporter を起動します。
-P PORT
--httpd-port=PORT
接続ポート (デフォルト: 8080) を指定します。
-L ADDRESS
--httpd-listen=ADDRESS
接続監視アドレス (デフォルト: localhost)を指定します。制限をかけない場合は '*' を指定を指定します。
-c CONFIG
--config=CONFIG
データベース接続情報設定ファイルのパスを指定します。本オプションが省略された場合は実行時のカレントディレクトリ内にある pg_reporter.conf をデータベース接続情報設定ファイルとして参照します。

初期化オプション

-i DIR
--init=DIR
初期化したときに作成されるレポート用ディレクトリのパスを指定します。

接続オプション

-d DBNAME
--dbname=DBNAME
接続するリポジトリデータベース名を指定します。
データベース名が指定されていない場合、データベース名はPGDATABASE環境変数から読み取られます。この変数も設定されていない場合は、接続時に指定したユーザ名が使用されます。
-h HOSTNAME
--host=HOSTNAME
サーバが稼働しているマシンのホスト名を指定します。ホスト名がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。
-p PORT
--port=PORT
サーバが接続を監視するTCPポートもしくはUnixドメインソケットファイルの拡張子を指定します。
-U USERNAME
--username=USERNAME
接続するユーザ名を指定します。
-w
--no-passward
データベースに接続する前に、パスワード入力を促しません。
-W
--password
データベースに接続する前に、強制的にパスワード入力を促します。
サーバがパスワード認証を要求する場合自動的にパスワード入力を促しますので、これが重要になることはありません。しかし、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。こうした余計な接続試行を防ぐために-W の入力が有意となる場合もあります。

共通オプション

-e
--echo
サーバに送信するSQLを表示します。
-E LEVEL
--elevel=LEVEL
ログ出力レベルを設定します。 DEBUG, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, PANIC から選択します。デフォルトは INFO です。
--help
使用方法について表示します。
--version
バージョン情報を表示します。

ディレクトリ構成

初期化実行時に作成されるレポート用ディレクトリの構成を以下に示します。

 DIR
  +- css/
  +- files/
  +- js/
  +- pg_reporter.conf
  +- template/
  +- xsl/

データベース接続情報設定ファイル

データベース接続情報はデータベース接続情報設定ファイル (pg_reporter.conf) に設定します。


記述できるURL

下記の書式1は CGI モードと簡易 httpd モードの両方で指定が可能です。書式2は簡易 httpd モードのみで指定することが可能です。

使用上の注意と制約

pg_reporter を使用する際には、以下の使用上の注意と制約があります。

簡易 httpd モードは簡易的な実装であり、十分にテストされていません。
高い負荷には耐えられず、セキュリティの面でも LAN での利用に限ってください。
CGIモードでは、レポート用ディレクトリと HTTP Server の DOCUMENT_ROOT の一致が必要です。
サブディレクトリには配置することができません。レポート用ディレクトリと HTTP Server の DOCUMENT_ROOT が一致していない場合は正常に動作しません。
SQLインジェクションへの対策が十分にとられていません。

添付のテンプレートで指定できるパラメータ

pg_reporter のパッケージに含まれるテンプレートに指定できるパラメータを以下に示します。コマンドラインモードでレポートを作成する場合は、-a オプションに使用していテンプレートとパラメータを指定してください。CGI モードおよび簡易 httpd モードでレポートを作成する場合は、http://host[:port]/cgi-bin/pg_reporter?id=&template=& の後に使用したいテンプレートとパラメータを指定してください。 IDTEMPLATEについては以下の通りです。

id
データベース接続情報設定ファイルで定義したリポジトリデータベースへの接続情報の識別 ID
template
レポート作成に使用したい添付のテンプレート

daily_snapshot.xml

instid
レポート作成やスナップショット情報を表示したい監視対象データベースのインスタンス ID

details.xml

 
instid
レポート作成の対象としたい監視対象データベースのインスタンス ID
begin
レポート対象範囲の開始位置とするスナップショットのスナップショット ID
end
レポート対象範囲の終了位置とするスナップショットのスナップショット ID

details_date.xml

m_host
レポート作成の対象としたい監視対象データベースのホスト名
m_port
レポート作成の対象としたい監視対象データベースへの接続に使用しているポート番号
begin
レポート対象範囲の開始位置とする日時 (例 begin=2011-12-20 00:00:00)
end
レポート対象範囲の終了位置とする日時 (例 end=2011-12-20 24:00:00)

details_date2.xml

instid
レポート作成の対象としたい監視対象データベースのインスタンス ID
begin
レポート対象範囲の開始位置とする日時 (例 begin=2011-12-20 00:00:00)
end
レポート対象範囲の終了位置とする日時 (例 end=2011-12-20 24:00:00)

details_recent.xml

instid
レポート作成の対象としたい監視対象データベースのインスタンス ID
count
レポート対象範囲に指定したい最新のスナップショット件数

oneday_snapshot.xml

instid
スナップショット一覧を表示したい監視対象データベースのインスタンス ID
day
スナップショット一覧を表示したいスナップショットの日付

recent_snapshot.xml

instid
スナップショット一覧を表示したい監視対象データベースのインスタンス ID
count
スナップショット一覧に表示したい最新のスナップショット件数

refine_snapshot.xml

instid
スナップショット一覧を表示したい監視対象データベースのインスタンス ID
begin
スナップショット一覧表示の開始位置とするスナップショットのスナップショット ID
end
スナップショット一覧表示の終了位置とするスナップショットのスナップショット ID

schema.xml

database
情報を表示したいリポジトリデータベースのデータベース名

snapshot.xml

instid
スナップショット一覧を表示したい監視対象データベースのインスタンス ID
begin
スナップショット一覧表示の開始位置とするスナップショットのスナップショット ID
end
スナップショット一覧表示の終了位置とするスナップショットのスナップショット ID

statistics.xml

指定パラメータなし

table.xml

database
情報を表示したいリポジトリデータベースのデータベース名
name
情報を表示したいテーブルの名称

よくあるQ&A

Q1. CGI モードまたは簡易 httpd モードを使用して、件数指定または日時指定でレポートを作成したところ、空のレポートが表示されました。

指定した条件に該当するスナップショット件数が2件未満の可能性があります。スナップショット件数が2件以上該当するように条件を変更してください。

Q2. ブラウザにIEを使用してレポートを作成したところ、グラフが一部表示されません。

ブラウザにIEを使用してレポートを作成した場合、グラフの描画に時間がかかります。 また、描画に時間がかかった場合、全てのグラフが表示されない場合があります。ブラウザは Firefox を使用することを推奨します。

関連項目

pg_statsinfo

謝辞

pg_reporterでは、Report の作成に「HTML5.JP - 次世代HTML標準 HTML5情報サイト(http://www.html5.jp/)」のJavaScriptライブラリを活用させていただいております。感謝いたします。