Zabbix4.4でPostgreSQLを監視する(pg_monz)

このzabbixサーバーもそうなんですが、私が担当するWebサービスは、指定がなければPostgreSQLで作成をしています。

そんなわけで、最初からPostgreSQLの監視は予定をしていた項目です。

Postgresqlのテンプレート(pg_monz)を利用します!

ホストとエージェントの両方に設定が必要ですので、分けて解説します(^^)

参考:PostgreSQL monitoring template for Zabbix (pg_monz)

目次

準備

1)githubからダウンロード

※これは、ホストもエージェントも同じです。

(今回はVer2.2)
要件
* Zabbix server, zabbix agent, zabbix sender 2.0 以上
* PostgreSQL 9.2 以上
* pgpool-II 3.4.0 以上

2)解凍すると下記が展開される
LICENSE
README-en.md
README.md
pg_monz
 template    :テンプレート集
  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  :/usr/local/binにコピーするバックエンド処理スクリプト群
 usr-local-etc  :/usr/local/etcにコピーするバックエンド処理用設定ファイル群
  pgpool_funcs.conf
  pgsql_funcs.conf
 zabbix_agentd.d :ZabbixAgentに追加するUserParameter定義ファイル
  userparameter_pgsql.conf
quick-install.txt :インストール案内

ホスト側の設定

テンプレートのインストール

ZabbixのWebインターフェースにログインし、以下の手順でテンプレートをインポートします。

1)[設定] – [テンプレート]を選択し、テンプレート一覧を表示します。
2)画面右上の[インポート]をクリックして表示される画面で、xmlファイルを順番にインポートします。
 対象のxmlファイルはpg-monzパッケージの「Template」ディレクトリの配下に格納されている全てのxmlファイルです。
3)インポートに成功すると、テンプレート一覧にpgmonzのtemplate類が追加されます。

マクロの設定

テンプレートに定義されているマクロの値を必要に応じて修正します。
ZabbixのWebインターフェースの[設定]→[テンプレート]→[マクロ]を選択し、値を修正後、[保存]をクリックします。

・Template App PostgreSQL

マクロ デフォルト値 説明
{$PGCACHEHIT_THRESHOLD} 90 キャッシュヒット率トリガー閾値(%)
{$PGCHECKPOINTS_THRESHOLD} 10 checkpoint発生頻度トリガー閾値(回数/監視間隔)
{$PGCONNECTIONS_THRESHOLD} 95 バックエンドコネクション数トリガー閾値
{$PGDBSIZE_THRESHOLD} 1073741824 データベースサイズトリガー閾値(byte)
{$PGDEADLOCK_THRESHOLD} 0 デッドロック発生トリガー閾値(回数)
{$PGLOGDIR} /usr/local/pgsql/data/pg_log
→/var/log/pgsql
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ファイルパス

ホストの作成

1) [設定] – [ホスト]を選択し、ホスト一覧を表示します。
2) 右上の[ホストの作成]をクリックしPostgreSQLサーバのホスト名等を設定します。
3) [テンプレート] – [新規テンプレートをリンク]より、適用するテンプレート(※)を検索して[追加]、[保存]をクリックします。
 ※「Template App PostgreSQL」か「Template App PostgreSQL SR」のいずれか
4) [設定] – [ホストグループ] – [ホストグループの作成]をクリックし、グループ名に「PostgreSQL」とします。
5) PostgreSQLホストを追加し、[保存]をクリックします。

各グループは{$HOST_GROUP} template macroを使って、
 Template_App_PostgreSQL_SR_Cluster.xml
 Template_App_pgpool-II_watchdog.xml
によって、参照されます。

6)zabbix_agentd.confのファイルパスを確認する
zabbix_agentd.confのインストールが/etc/zabbix/zabbix_agentd.confではない場合、
ホストのマクロに{$ ZABBIX_AGENTD_CONF}マクロを追加します。

#zabbix_agentd.confパスの定義はテンプレートマクロにあります。
{$ZABBIX_AGENTD_CONF} => /etc/zabbix/zabbix_agentd.conf

エージェント側の設定

準備

ここは、ホスト側と同じです。

インストール

1)usr-local-etc/* を /usr/local/etcにコピーする
・pgsql_funcs.confのデフォルト
—-
PGHOST=127.0.0.1
PGPORT=5432
PGROLE=postgres
PGDATABASE=postgres
—-

・pgpool_funcs.conのデフォルト
—-
PGPOOLHOST=127.0.0.1
PGPOOLPORT=9999
PGPOOLROLE=postgres
PGPOOLDATABASE=postgres
PGPOOLCONF=/usr/local/etc/pgpool.conf
—-
(*)構成ディレクトリの定義は、tempalteマクロにあります。
{$PGSCRIPT_CONFDIR}
{$PGPOOLSCRIPTS_CONFDIR}

○PostgreSQL に接続するときにパスワードが必要な場合の処理
・設定ファイル pgsql_funcs.conf に 以下の一行を追加します。
export PGPASSFILE=/usr/local/etc/pgpass

・設定内容に合わせてpgpassを作成します。
127.0.0.1:5432:*:postgres:パスワード

・Zabbix エージェントの起動ユーザのみに権限を付与します
chmod 600 /usr/local/etc/pgpass

2)usr-local-bin/* を /usr/local/binにコピーします

# cp usr-local-bin/* /usr/local/bin
# chmod +x /usr/local/bin/*.sh

*)scriptsディレクトリの定義はテンプレートマクロにあります。
{$PGSCRIPTDIR}
{$PGPOOLSCRIPTDIR}

3)userparameter_pgsql.confを配置します

監視対象サーバ上の所定の場所にコピーします。
例えば、 Zabbixエージェントが /etc/zabbix/にインストールされている場合は、以下の場所にファイルをコピーします。
/etc/zabbix/zabbix_agentd.conf.d/userparameter_pgsql.conf

上記ファイルが読み込まれるよう zabbix_agentd.conf でInclude 設定を追加します。
※設定の反映には再起動が必要です。
Include=/etc/zabbix/zabbix_agentd.conf.d/

エージェントを再起動

# systemctl restart zabbix-agent

トラブルです!

と、ここまでは標準的なインストール手順。
で動かしてみると /var/log/zabbix/zabbix_agent_logに下記のエラーが山盛り。。。
882:20191222:065250.767 active check “logrt[“/var/lib/pgsql/12/data/log/postgresql-.*\.log”,”PANIC|FATAL|ERROR|[Ee]rror”]” is not supported: Cannot obtain directory information: [13] Permission denied

ようするにログディレクトリのパーミンションがNGってことですね。
確認をしてみましょう。

# ls -al /var/lib/pgsql/12/data
drw——- 2 postgres postgres 4096 12月 23 00:00 log

# ls -al log
合計 24
drw——- 2 postgres postgres 4096 12月 23 00:00 .
drwx—— 20 postgres postgres 4096 12月 23 12:49 ..
-rw——- 1 postgres postgres 984 12月 20 17:06 postgresql-Fri.log
-rw——- 1 postgres postgres 0 12月 23 00:00 postgresql-Mon.log
-rw——- 1 postgres postgres 6139 12月 21 23:51 postgresql-Sat.log
-rw——- 1 postgres postgres 0 12月 22 00:00 postgresql-Sun.log
-rw——- 1 postgres postgres 2062 12月 19 23:20 postgresql-Thu.log

これではユーザーzabbixでは読み出せないです。。。
対策としては2つ
1つめ:この設定でzabbixユーザーで読み出せるようにする
 権限変えたら行けるのかな???
2つめ:たとえば/var/log以下にログを移動する。

今回は2つ目を採用しました。

“/var/log/pgsql”にログを出力します。

# mkdir /var/log/pgsql

# vi /var/lib/pgsql/12/data/postgresql.conf

log_director=’log’
→ log_director=’/var/log/pgsql’

log_file_mode=’0600’
→ log_file_mode=’0644’

※相対パスだと{PGDATA}配下に設置されてしまう

テンプレートの{$PGLOGDIR}の値を変更します。

エージェントを再起動します。

やっぱりなんか起こります(^^;

「/ var / log / pgsql /」の「postgresql-。* \。log」に一致する最近変更されたファイルはありません。

なんか、ログを出すまで変わらないのかなぁ。。。

ってわけで、postgresqlを再起動してみました。

ら、でなくなりました。。。

なんやこれww

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA