Zabbix4.4でpg_monzを使用してPostgreSQL11を監視する(構築メモ)


はじめに

Zabbix4.4+pg_monzを使用して、PostgreSQL11を監視する環境を構築します。
使用する環境は以下のとおりです。

  • CentOS 7.5(firewalld, SELinuxは無効化済み)
  • PostgreSQL 11.7(同じサーバにインストール済み)
  • Zabbix4.4 + pg_monz2.2

最後に書いていますが、現状一部項目が監視できていません(後で調査するつもり)

Zabbix4.4のインストール

まずはZabbix4.4.1をインストールしていきます。

# wget http://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
# rpm -ivh zabbix-release-4.4-1.el7.noarch.rpm

# yum install -y zabbix-agent zabbix-server-pgsql zabbix-get
# yum install -y zabbix-web-japanese zabbix-web-pgsql
# yum install -y zabbix-sender

PHP側のタイムゾーンを変える

vi /etc/httpd/conf.d/zabbix.conf
php_value date.timezone "Asia/Tokyo"

PostgreSQL11にZabbix用のデータベースを作成します。

# su - postgres
$ createuser --pwprompt zabbix
$ createdb -O zabbix -E UTF8 zabbix

pg_hba.confを修正して、zabbixユーザで接続できるように設定する。

$ vi /data/pg_hba.conf 
local   zabbix          zabbix                                  md5
host    zabbix          zabbix          127.0.0.1/32            md5
※localはいらなかったかも(TODO:暇があったら確認する)

host    postgres        postgres        127.0.0.1/32            md5

$ pg_ctl restart

以下のコマンドを実行し、zabbixデータベースにテーブル・データを作成します。

# zcat /usr/share/doc/zabbix-server-pgsql-4.4.1/create.sql.gz | psql -U zabbix zabbix -W

設定が終わったところで、各種サービスの自動起動設定と起動を行います。

systemctl start zabbix-server
systemctl start zabbix-agent
systemctl start httpd
systemctl enable zabbix-server
systemctl enable zabbix-agent
systemctl enable httpd

Zabbixへのログインまで

ブラウザで以下のアドレスにアクセスします。

「Welcome」ページはそのまま「Next step」を押して次の画面へ移ります。

前提条件が全てOKになっていることを確認して画面へ移ります。

Zabbixのデータの保存先を指定します。

Zabbixサーバの情報ですが、特に何も変更せずに次へ進みます。

インストールのサマリが表示されます。そのまま次へ進みます。

問題なければインストール完了しますので、「Finish」を押すとログイン画面へ移動します。

ログイン画面では、「Admin/zabbix」でログインします。

画面からは色々と設定する項目はありますが、まずは言語を日本語に変更しておきます。

Zabbixの設定

Zabbixのデータの保存先(PostgreSQL)を設定します。

# vi /etc/zabbix/zabbix_server.conf

DBHost=127.0.0.1
DBPassword=zabbix
DBPort=5432

pg_monzのtemplateインストール

以下の公式サイトからpg_monzのモジュール(zipファイル)をダウンロードします。

zipファイル中の以下のディレクトリに各種templateファイルが保存されています。

  • pg_monz-2.2\pg_monz\template

今回はPostgreSQL 1台構成なので以下のtemplateファイルをZabbixのTemplate画面からインポートします。

  • Template_App_PostgreSQL.xml ※SR、pgpool-IIは今回未使用

なぜかインポートで色々エラーが出たので、templateファイルを修正(screens削除等)を実施してインポートしました(原因不明)。

pg_monzのインストール

先ほどダウンロードしたzipファイルをサーバへ格納し、インストールのため以下のコマンドを実行します。

# unzip pg_monz-2.2.zip
# cd pg_monz-2.2/pg_monz/

# cp usr-local-etc/* /usr/local/etc
# cp usr-local-bin/* /usr/local/bin

pg_monzの設定ファイルをコピーします。この設定ファイルは変更する必要ありません。

# cp /tmp/pg_monz-2.2/pg_monz/zabbix_agentd.d/userparameter_pgsql.conf /etc/zabbix/zabbix_agentd.d/

PostgreSQLの設定変更

PostgreSQLのログはデフォルトで"600"に設定されており、Zabbixユーザからログが見れないので以下のようにpostgresql.confの設定を変更します。変更後はPostgreSQLを再起動します。

$ vi /data/postgresql.conf
log_file_mode = 0644

# chmod 750 /data
# chmod 750 /data/log

# vi /etc/group
postgres:x:26:zabbix

# chmod 644 /data/log/postgresql-*.log

$ pg_ctl restart

Zabbix-agentがPostgreSQLへ接続できるように設定

PostgreSQLへ接続するときにパスワードが必要な場合、pgsql_funcs.confに以下の一行を追加します。

# vi /usr/local/etc/pgsql_funcs.conf

export PGPASSFILE=/usr/local/etc/pgpass

次にパスワードを格納するファイル(/usr/local/etc/pgpass)を作成します。

# vi /usr/local/etc/pgpass

127.0.0.1:5432:*:postgres:パスワード

Zabbixエージェントの起動ユーザのみに権限を付与します。

# chown zabbix:zabbix /usr/local/etc/pgpass
# chmod 600 /usr/local/etc/pgpass

zabbix-agentのログにbcコマンドが見つからないとエラーが出たので、bcをインストールしました。

# yum install -y bc

zabbix-agentを再起動する。

# systemctl restart zabbix-agent.service

Zabbixの画面からTemplateのマクロ設定を変更

Zabbixの画面からマクロの{$PGLOGDIR}の値を以下のように実際のログディレクトリ(私の環境では/data/log)に変更する。

PostgreSQLサーバにtemplateを適用

PostgreSQLサーバにtemplateを適用して監視対象になるように設定します。
以下のようにサーバに「Template App PostgreSQL」がリンクするようにしています。

これで以下のように監視できるようになります。

設定ファイル

Zabbix、pg_monzの設定ファイの一覧は以下のとおりです。

  • Zabbix server
    /etc/zabbix/zabbix_server.conf

  • Zabbix agent
    /etc/zabbix/zabbix_agentd.conf

  • pg_monz
    /usr/local/etc/pgsql_funcs.conf
    /etc/zabbix/zabbix_agentd.d/userparameter_pgsql.conf
    /usr/local/etc/pgpass

ログファイル

  • /var/log/zabbix/zabbix_agentd.log
  • /var/log/zabbix/zabbix_server.log

最後に(終わっていない)

上述のように設定したのですが、一部のエラーが解消されませんでした。
zabbix_server.logに出力されていたエラーは以下のようになります。一部の情報が表示されないのですが、まずは一旦完了し後日調べてみるつもりです。

 21919:20191103:191903.740 error reason for "Zabbix server:pgsql.get.pg.transactions[{$PGSCRIPTDIR},{$PGSCRIPT_CONFDIR},{HOST.HOST},{$ZABBIX_AGENTD_CONF}]" changed: Value "Response from "127.0.0.1:10051": "processed: 8; failed: 0; total: 8; seconds spent: 0.000099"
sent: 8; skipped: 0; total: 8" of type "string" is not suitable for value type "Numeric (unsigned)"
 21916:20191103:191905.748 error reason for "Zabbix server:pgsql.get.pg.slow_query[{$PGSCRIPTDIR},{$PGSCRIPT_CONFDIR},{HOST.HOST},{$ZABBIX_AGENTD_CONF},{$PGSLOWQUERY_TIME_THRESHOLD}]" changed: Value "Response from "127.0.0.1:10051": "processed: 3; failed: 0; total: 3; seconds spent: 0.000052"
sent: 3; skipped: 0; total: 3" of type "string" is not suitable for value type "Numeric (unsigned)"

参考