PostgreSQL monitoring template for Zabbix
【注意】 pg_monzはZabbix 5.0には対応せず、Zabbix 4.0のフルサポート終了2021年10月31日をもってメンテナンスを終了しました。 PostgreSQL監視はZabbix 5.0以降では標準テンプレートの利用を推奨します。
PostgreSQL monitoring template for Zabbix (pg_monz) は、ZabbixでPostgreSQLの各種監視を行うためのテンプレートです。
pg_monzを導入することで、PostgreSQLの死活監視、リソース監視、性能監視などが行えます。 PostgreSQL単体で稼働するシングル構成の状態、PostgreSQLのStreaming Replicationを使った冗長構成の状態、pgpool-IIを使った負荷分散構成の状態の監視を行うことができ、PostgreSQLを運用する様々な環境の監視を行うことができます。 PostgreSQL環境の監視を行えるようにすることで、障害発生時の自動復旧処理に活用できたり、長期的な運用時の状態の変化の認知に有効に働きます。
pg_monzはversion 1.0として2013年12月に初期版をリリースしました。 version 1.0では、単一のPostgreSQLの状態の死活監視、リソース監視、性能監視にのみ対応していました。 2015年4月にリリースしたversion2.0では以下の変更を含んでいます。
version 1.0では、単一のPostgreSQLの監視のみをサポートしていましたが、2.0では、単一のPostgreSQLの監視に加えてStreaming Replicationを使った冗長構成環境の監視やpgpool-IIを使った負荷分散構成環境の監視にも対応しています。
version 1.0では、各監視項目の監視処理の実行の都度Zabbix AgentがPostgreSQLサーバにpsqlコマンドを用いてコネクションを張り、SQL文を実行するというアーキテクチャでした。 この方法では監視項目が増えた時や監視間隔を短く設定した際に非常に多くのコネクションが発生しPostgreSQLの通常の稼働に影響を及ぼし兼ねない構成となっていました。 そこで、version 2.0では一度のコネクションで監視対象の値を一括取得できるようバックエンド処理を改善しています。
具体的な処理のイメージはpg_monzの動作イメージの項目を参照して下さい。
pg_monz は以下の内容で構成されています。
ディレクトリ/ファイル | 役割 |
---|---|
Template | pg_monz監視設定テンプレート |
usr-local-bin/* | pg_monzのバックエンド処理スクリプト群 |
usr-local-etc/* | pg_monzのバックエンド処理用設定ファイル群 |
zabbix-agentd.d/userparameter_pgsql.conf | ZabbixAgentに追加するUserParameter定義ファイル |
Templateディレクトリには以下の5つの監視テンプレートxmlが含まれています。
テンプレート名 | 用途 |
---|---|
Template_App_PostgreSQL.xml | PostgreSQLサーバ単体の稼働監視用 |
Template_App_PostgreSQL_SR.xml | Streaming Replication稼働監視用 |
Template_App_PostgreSQL_SR_Cluster.xml | Streaming Replicationのクラスタ全体での稼働状況監視用 |
Template_App_pgpool-II.xml | pgpool-II (pgpool-II 3.5 以前) 稼働監視用 |
Template_App_pgpool-II-36.xml | pgpool-II (pgpool-II 3.6 以降) 稼働監視用 |
Template_App_pgpool-II_watchdog.xml | pgpool-IIのクラスタ全体での稼働状況監視用 |
usr-local-binディレクトリにはpg_monzによる監視処理に必要なバックエンド処理用スクリプトが含まれています。 後述するZabbix Agentに追加定義されたUserParameterから呼び出されます。
上記バックエンド処理を実行する際に必要となる監視先のPostgreSQLのホストIPアドレスやポート番号等の設定を行います。 含まれるファイルは以下の2ファイル。
【注意】 Version1.0ではZabbixのマクロにて設定していた項目ですが、Version2.0からは設定ファイルに定義する形に仕様変更となっています。環境にあわせて上記設定ファイルの変更が必要となります。
pg_monz用監視テンプレートに含まれる監視アイテムキーに対するUserParameter定義設定ファイルです。
Download from GitHub releases page
pg_monz は以下のソフトウェアバージョンをサポートしています。 なお、監視には Zabbix AgentおよびZabbix Senderの機能を利用するため、 監視対象のサーバーに Zabbix AgentおよびZabbix Sender を導入しておく必要があります。
ソフトウェア名 | バージョン |
---|---|
Zabbix Server,Zabbix Agent, Zabbix Sender | 2.0 以上 |
PostgreSQL | 9.2 以上 |
pgpool-II | 3.4.0以上 |
pg_monz version2は各パターン毎に以下のようなアーキテクチャで監視処理を実施します。
この繰り返しにより監視を実現します。
Streaming Replication監視を実施するには、Streaming Replication監視用のテンプレートをホストに割り当てます。
Streaming Replication監視用のテンプレートはPostgreSQLサーバ単体の稼働監視用テンプレートの内容をリンクしているため、
(1)~(5)のバックエンドの処理方式は単体の監視パターンと同様です。
1点単体の時と異なるのは、クラスタ全体の状態を示す監視結果を格納するホストを1つ追加登録し、クラスタ監視用のテンプレート(Template App PostgreSQL Cluster)を割り当てることです。 このテンプレートを割り当てることで定期的に各PostgreSQLサーバの監視結果の情報をアグリゲート(6)してクラスタの状態を示すデータとして管理します。
pgpool-II監視を実施するには、各pgpool-IIサーバに対するホストを登録し、pgpool-II監視用テンプレート(Template App pgpool-II)を割り当てます。 このテンプレートを登録することで以下の監視処理が行われます。
Streaming Replication監視パターンと同様、クラスタ全体の状況を監視するテンプレート(Template App pgpool-II watchdog)を割り当てることで各pgpool-IIの稼働状況を監視した結果をアグリゲート(6)して管理することができます。
pg-monzでは監視対象サーバにおいて、Zabbixエージェントが以下を実行します。
Zabbixエージェントがこれらを実行可能なように監視対象サーバおよびZabbixエージェントの権限を適切に設定してください。
「動作環境」に記したとおり、pg-monzではZabbix Agentの他、Zabbix Senderを利用します。 監視対象サーバにZabbix Senderがインストールされていない場合、「zabbix-sender」パッケージをインストールしてください。
pg-monzパッケージに含まれる「usr-local-etc」フォルダ配下にある設定ファイルを、監視対象サーバ上の任意の場所にコピーします。
デフォルトでは/usr/local/etc/ 以下にインストールされることを想定しています。
必要に応じて設定ファイルの値を修正します。
PostgreSQL に接続するときにパスワードが必要な場合、 設定ファイル pgsql_funcs.conf に 以下の一行を追加します。
pgsql_funcs.conf の設定値に合わせて、接続ユーザのパスワードを格納するファイル /usr/local/etc/pgpass を作成します。
例えば、上記 pgsql_funcs.conf の場合
Zabbix エージェントの起動ユーザのみに権限を付与します。
pg-monzパッケージに含まれる「usr-local-bin」フォルダ配下にあるスクリプトを、監視対象サーバ上の任意の場所にコピーし、実行権限を付与します。
デフォルトでは/usr/local/bin/ 以下にインスールされることを想定しています。
エージェント用ユーザパラメータ設定ファイル(userparameter_pgsql.conf)を、監視対象サーバ上の所定の場所にコピーします。
例えば、 Zabbixエージェントが /etc/zabbix/にインストールされている場合は、以下の場所にファイルをコピーします。
また、上記ファイルが読み込まれるよう zabbix_agentd.conf でInclude 設定を追加します。 ※設定の反映には再起動が必要です。
ZabbixのWebインターフェースにログインし、以下の手順でテンプレートをインポートします。
テンプレートに定義されているマクロの値を必要に応じて修正します。
ZabbixのWebインターフェースの[設定]→[テンプレート]→[マクロ]を選択し、値を修正後、[保存]をクリックします。
マクロ | デフォルト値 | 説明 |
---|---|---|
{$PGCACHEHIT_THRESHOLD} | 90 | キャッシュヒット率トリガー閾値(%) |
{$PGCHECKPOINTS_THRESHOLD} | 10 | checkpoint発生頻度トリガー閾値(回数/監視間隔) |
{$PGCONNECTIONS_THRESHOLD} | 95 | バックエンドコネクション数トリガー閾値 |
{$PGDBSIZE_THRESHOLD} | 1073741824 | データベースサイズトリガー閾値(byte) |
{$PGDEADLOCK_THRESHOLD} | 0 | デッドロック発生トリガー閾値(回数) |
{$PGLOGDIR} | /usr/local/pgsql/data/pg_log | PostgreSQLログディレクトリ |
{$PGSCRIPTDIR} | /usr/local/bin | pg-monzスクリプト配置ディレクトリ |
{$PGSCRIPT_CONFDIR} | /usr/local/etc | pg-monz設定ファイル配置ディレクトリ |
{$PGSLOWQUERY_TIME_THRESHOLD} | 10 | 何秒以上のクエリをSlow_Queryとするか(秒) |
{$PGSLOWQUERY_COUNT_THRESHOLD} | 10 | slow_queryトリガー閾値(件数) |
{$PGTEMPBYTES_THRESHOLD} | 8388608 | 一次ファイルサイズトリガー閾値(byte) |
{$ZABBIX_AGENTD_CONF} | /etc/zabbix/zabbix_agentd.conf | zabbix_agentd.confファイルパス |
マクロ | デフォルト値 | 説明 |
---|---|---|
{$PGSCRIPTDIR} | /usr/local/bin | pg-monzスクリプト配置ディレクトリ |
{$PGSCRIPT_CONFDIR} | /usr/local/etc | pg-monz設定ファイル配置ディレクトリ |
マクロ | デフォルト値 | 説明 |
---|---|---|
{$PGPOOLLOGDIR} | /var/log/pgpool | pgpool-IIログディレクトリ |
{$PGPOOLSCRIPTDIR} | /usr/local/bin | pg-monzスクリプト配置ディレクトリ |
{$PGPOOLSCRIPT_CONFDIR} | /usr/local/etc | pg-monz設定ファイル配置ディレクトリ |
{$ZABBIX_AGENTD_CONF} | /etc/zabbix/zabbix_agentd.conf | zabbix_agentd.confファイルパス |
マクロ | デフォルト値 | 説明 |
---|---|---|
{$PGPOOL_HOST_GROUP} | pgpool | pgpoolホストグループ名 |
マクロ | デフォルト値 | 説明 |
---|---|---|
{$PG_HOST_GROUP} | PostgreSQL | PostgreSQLホストグループ名 |
ZabbixのWebインターフェース上で監視対象となるホストおよびホストグループを作成します。
監視対象システムのシステム構成によって適用するテンプレートが異なります。 以下に示すシステム構成毎の適用パターンに沿ってzabbixフロントエンドでホストを作成します。
アプリケーション名 | 監視内容の概要 |
---|---|
pg.transactions | PostgreSQL への接続数、接続状態、トランザクション量 |
pg.log | PostgreSQL のログ監視 |
pg.size | 各 DB のサイズと不要領域の回収率 |
pg.slow_query | 設定した閾値を超えたスロークエリ数 |
pg.status | PostgreSQL のプロセス稼働状況 |
pg.stat_database | データベース単位の稼働状況 |
pg.stat_table | テーブル単位の稼働状況 |
pg.bgwriter | バッファの書き出し状況 |
pg.stat_replication | ストリーミングレプリケーション構成時のデータ伝搬の遅延状況 |
pg.sr.status | ストリーミングレプリケーション構成時のコンフリクト数、書き込みブロックの有無、プロセス数 |
pg.cluster.status | クラスタ単位の PostgreSQL プロセス数 |
アプリケーション名 | 監視内容の概要 |
---|---|
pgpool.cache | インメモリクエリキャッシュ使用時のキャッシュ状況 |
pgpool.connections | pgpool-II を介したフロントエンド、バックエンドのコネクション数 |
pgpool.log | pgpool-II のログ監視 |
pgpool.nodes | pgpool-II から見た各バックエンドの稼働状況、負荷分散の比率、レプリケーションの遅延量 |
pgpool.status | pgpool-II のプロセス稼働状況、仮想 IP 保持状況 |
pgpool.watchdog | クラスタ単位の pgpool-II のプロセス稼働状況、仮想 IP 保持状況 |
pg_monzユーザーグループ
pg_monz@googlegroups.com
pg_monz は Apache License Version 2.0 の元で配布されています。
Apache License Version 2.0 の全文は こちら からご覧頂くことが可能です。
Copyright (C) 2013-2021 SRA OSS, Inc. Japan All Rights Reserved.
Copyright (C) 2013-2021 TIS Inc. All Rights Reserved.