統合監視ソフトウェア Zabbix で PostgreSQL を監視しよう (2)

統合監視ソフトウェア Zabbix で PostgreSQL を監視しよう (2)

(5) インストール・設定方法

ここでは、Zabbix で PostgreSQLの監視を行うためのテンプレートである pg_monzを使って、 Zabbix による PostgreSQL の監視を設定する方法を説明します。 なお、Zabbix サーバのインストール、設定、および監視対象ホストに Zabbix エージェントが既にインストールされており、 監視対象の PostgreSQL が起動していることを前提とします。

Zabbix 自体のインストール、セットアップについては次を参照ください。

Zabbix 社:Zabbix 2.0 のマニュアル(rpm からのインストール)
https://www.zabbix.com/documentation/jp/2.0/manual/installation/install_from_packages

SRA OSS, Inc. 日本支社: Zabbix 2.0 (ソースからのインストール、データベースは PostgreSQL を利用)
http://www.sraoss.co.jp/technology/zabbix/introduction/01-firststep.php

1. pg_monz 入手ファイルの紹介

GitHub から pg_monz 一式が入った pg_monz-1.0.zip がダウンロードできます。 展開すると次の 4 つのファイルが確認できます。ファイル名と役割は次の通りです。

find_dbname.sh
監視対象のホストに配置するスクリプト
監視対象の PostgreSQL に接続を行ってデータベース名をディスカバリするスクリプト
fine_dbname_table.sh
監視対象のホストに配置するスクリプト
監視対象の PostgreSQL に接続を行ってデータベース名と データベース内のテーブル名をディスバリするスクリプト
userparameter_pgsql.conf
監視対象のホストに配置する設定ファイル
監視対象の PostgreSQL に接続を行って具体的な監視項目が記載されているスクリプト
pg_monz_template.xml
ブラウザを利用して Zabbix の管理画面からインポートするテンプレート

2. 設定ファイル、スクリプトのインストール

ここでは監視を行いたい PostgreSQL が稼働しているホストに設定ファイルとスクリプトを配置します。

Zabbix エージェントが /usr/local/zabbix にインストールされている場合は、 以下の場所に userparameter_pgsql.conf ファイルをコピーします。

/usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_pgsql.conf

上記ファイルが Zabbix エージェント起動時に読み込まれるように設定ファイル
/usr/local/zabbix/etc/zabbix_agentd.confにinclude設定を追記します。

Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/

次にディスカバリで使用するスクリプトをコピーし、実行権限を付加します。 Zabbix エージェントから実行されるので、Zabbix エージェントを起動させたユーザが スクリプトを実行できる権限が必要です。 デフォルトでは /usr/local/bin 以下にインストールされることを想定しています。

cp find_dbname.sh find_dbname_table.sh /usr/local/bin
chmod +x /usr/local/bin/find_dbname.sh
chmod +x /usr/local/bin/find_dbname_table.sh

3. テンプレートのインポート

最初にテンプレート (pg_monz_template.xml) をブラウザを開く端末にコピーします。

ブラウザより Zabbix の Web 管理画面にログインして、次の手順にてテンプレート (pg_monz_template.xml)をインポートします。

タブの「設定」 - 「テンプレート」を選択し、テンプレート一覧を表示します。(図2)


図2 テンプレート一覧

右上の「インポート」をクリックして表示される画面で、「インポートするファイル」に pg_monz_template.xml を選択して「インポート」をクリックします。(図3)


図3 インポート画面

インポートに成功すると、テンプレート一覧に「PostgreSQL Check」が追加されます。(図4)


図4 インポート後のテンプレート一覧

4. テンプレートマクロの確認

テンプレートを環境に合わせて変更できるように、マクロ変数が使われております。 以下の手順にてテンプレートに設定されているマクロ変数を確認することができます。

タブの「設定」 - 「テンプレート」を選択して表示された テンプレート一覧から 「PostgreSQL Check」をクリックし、「マクロ」タブを選択します。(図5)


図5 テンプレートマクロ変数一覧

変更できるマクロ変数と設定内容は次のとおりです。

 

マクロ名 設定内容
{$PGDATABASE} 監視データを取得するときに利用する接続データベース名を指定します。
{$PGHOST} Zabbix エージェントから接続する PostgreSQL ホストのホスト名またはIPアドレス (通常では監視対象の PostgreSQL には Zabbix エージェントがインストールされているので 127.0.0.1 を指定)
{$PGLOGDIR} PostgreSQL のログファイルが格納されているディレクトリ
{$PGPORT} 監視データを取得するときに利用される PostgreSQL ポート番号
{$PGROLE} 監視データを取得するときに利用される PostgreSQL 接続ユーザ名
{$PGSCRIPTDIR} find_dbname.sh と find_dbname_table.sh を配置したディレクトリ
{$PGCACHEHIT_THRESHOLD} 指定した数値以下にキャッシュヒット率が下がるとアクション(注)が実行されます。
{$PGCHECKPOINTS_THRESHOLD} 監視データを更新する間隔(デフォルト 5 分)あたり指定した数値回数以上 checkpoint_segments 超過によるチェックポイントが行われると、 アクション(注)が実行されます。
{$PGCONNECTIONS_THRESHOLD} 指定本数以上の同時接続数があるとアクションが実行されます。
{$PGDBSIZE_THRESHOLD} データベース容量が指定したバイト数以上になるとアクションが実行されます。
{$PGDEADLOCK_THRESHOLD} 監視データを更新する間隔で、デッドロック発生回数が閾値を超えると、 アクションが実行されませす。
{$PGSLOWQUERY_THRESHOLD} 指定した秒数以上に応答が遅いクエリが見つかった場合に、アクションが実行されます。
{$PGTEMPBYTES_THRESHOLD} 指定したバイト数以上の一時ファイルが見つかった場合には、アクションが実行されます。

(注) Zabbix ではアクションの設置で障害時にメール送信を行ったり、 スクリプトの実行を定義することができます。

テンプレートのマクロ変数を環境に合わせて編集することもできますが、 テンプレートのマクロ変数を特定のホスト環境に合わせると、 他のホストでテンプレートの再利用ができなくなるので、 マクロ変数の調整は次の監視対象ホストの設定で行います。

5. 監視対象ホストの設定

ここでは PostgreSQL が動作するホストを監視対象として新規に登録します。

タブの「設定」 - 「ホスト」を選択し、ホスト一覧を表示します。(図6)


図6 ホスト一覧

画面右上の「ホストの作成」をクリックすると「ホストの設定」画面が表示されます。(図7)

この画面では、最初に監視対象のホスト名、グループ等を設定します。 下図ではホスト名として「PostgreSQL Server」、グループ名として「PostgreSQL Group」と設定しました。 エージェントのインターフェースには IPアドレスを環境に合わせて設定します。


図7 ホストの設定

引き続き「ホストの設定」画面にて「マクロ」タブをクリックします。 ここでは、このホストで有効なマクロ変数の定義ができます。 テンプレートの設定から確認できるマクロ変数とホストの設定から確認できるマクロ変数で 同名のマクロ変数がある場合には、ホストのマクロ変数の値が利用されます。(図8)


図8 ホストマクロ変数設定

環境に合わせて、通常修正する必要があるマクロ変数と設定値は次のとおりです。(図9)


図9 ホストマクロ変数設定例

ここで、PostgreSQL のログ出力場所を指定するマクロ変数 {$PGLOGDIR} を /usr/local/pgsql/log に設定しました。

PostgreSQL のログコレクタが有効な場合にはデフォルトでは データベースクラスタの直下の pg_log ディレクトリにログが出力されます。 データベースクラスタは PostgreSQL の管理ユーザしかアクセスできないため Zabbix エージェントの起動ユーザと PostgreSQL の管理ユーザが異なる場合には、 ログにアクセスできず監視ができなくなってしまいます。

そこで、PostgreSQL の設定ファイル (postgresql.conf) で次のようにログ出力の設定を行います。

logging_collector = on
log_directory = '/usr/local/pgsql/log'
log_file_mode = 0644

この設定により、ログコレクタを有効にして /usr/local/pgsql/log にログが出力されます。 また log_file_mode も 0644 のため、Zabbix エージェントの起動ユーザが PostgreSQL の管理ユーザと異なる場合でもアクセスできる設定となります。

これで必要な値の設定が済みましたので、「ホストの設定」画面内の「テンプレート」タブを選択して 「追加」をクリックしてテンプレート一覧より「PostgreSQL Check」を選び、 次いで「選択」と「保存」をクリックします。(図10)


図10 テンプレートの適用

6. 監視データの確認

ホストの設定、テンプレートの適用が終わると自動的に監視が開始されます。 監視で取得したデータは、「監視データ」タブから「最新データ」を選択すると、 ホストの一覧に登録したホスト単位で表示されます。 ホスト名の左の「+」をクリックすることで、取得した各項目の最新値が取得できます。(図11)

pg_monzではデータベースのディスカバリが 1 時間ごとに実行されるので、 初期設定時やデータベースを追加した場合には、監視項目が追加されるまでしばらく時間がかかります。


図11 最新データ

Zabbix では取得したデータが数値の場合には、自動的にグラフが作成されます。 例えば postgres DB Size のグラフを確認したい場合には、 「最新データ」画面(図11)の評にある行「 [postgres] DB Size」のいちばん右の列にある 「グラフ」をクリックすると、postgres DB Size のグラフが表示されます。(図12)


図12 データベースサイズの確認

また「監視データ」タブにある「グラフ」のドロップダウンリストから グラフ名「Connection count」を選択すると PostgreSQL に接続しているコネクション数が表示されます。 ここで表示されるコネクション数は、コネクションのステート別に収集した結果を 一つのグラフ画面で重ねて表示されるようになっています。(図13)


図13 コネクション数

7. 監視項目の追加

Zabbixではシステムに合わせて固有の監視項目を追加することもでますが、 Zabbix であらかじめ用意されているテンプレートを利用することもできます。 ここでは Linux 用のテンプレートを PostgreSQL Server に適用してみます。

タブの「設定」 - 「ホスト」を選択し、ホスト一覧を表示から ホスト名 PostgreSQL Serverを選択します。

「ホストの設定」画面でテンプレート「Template OS Linux」を選択(図10 参照)して、 保存ボタンをクリックすると、テンプレート「Template OS Linux」が適用(図14)されて 監視が開始されます。


図14 Template OS Linux の適用

「Template OS Linux」では Linux サーバの CPU利用率やロードアベレージ、 メモリ利用率、ディスク容量、ネットワークトラフィックなどの監視データが取得できます。

次に「Template OS Linux」から取得した CPU利用率と「pg_monz」から取得した 1 秒間あたりのトランザクション量「commited transaction」を同時に描写するグラフを作成します。

タブの「設定」-「ホスト」を選択し、ホスト名「PostgreSQL Server」のグラフを選択します。 画面右上にあります [グラフの作成] を押し次の画面の入力を行い保存します。(図15)


図15 グラフ作成画面

作成したグラフは、タブの「監視データ」-[グラフ]画面より確認することができます。(図16)


図16 グラフの確認

8. 複数グラフの同時表示

互いに関連するグ複数のグラフをまとめて表示すると効率よく監視ができます。 Zabbix では複数のグラフをまとめて表示したい場合には、スクリーン機能を利用します。

タブの [設定] [スクリーン] より [スクリーンの作成] ボタンからスクリーンを作成し、 同じスクリーンに載せたいグラフを選択します。 作成したスクリーンの確認は、タブの「監視データ」-「スクリーン」からスクリーン名を選択します。(図17)


図17 スクリーンの確認

こちらのスクリーンでは別途 Zabbix の WEB 監視機能を利用して PostgreSQL にアクセスを行うWEBページの 1 秒間あたりダウンロード量 (KBps) と PostgreSQL の 1 秒間あたりのトランザクション量「commited transaction」の比較を行うグラフを作成し 同じスクリーンに同時に表示を行いました。

(6) 最後に

ここでは、統合監視ツールとして Zabbix を用いて、PostgreSQL を効率良く監視するための Zabbix テンプレート pg_monz を利用しました。 現時点では pg_monz はシングル構成の PostgreSQL を想定しておりますが、 今後はストリーミングレプリケーション(SR) の監視や pgpool-II にも対応した クラスタ構成の監視機能の追加が行われる予定となっております。


(2014 年 4 月 10 日公開)