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