pg_monzでpostgresqlのログを監視する

先週インストールしたpg_monz。いろいろ調整してようやく監視システムとして稼働しています。
しかしながらまだ一つのアイテムが監視できていません。
pg.logアプリケーションに入っているログの監視。キー値はこんなです。

logrt["{$PGLOGDIR}/postgresql-.*\.log","PANIC|FATAL|ERROR|[Ee]rror"]

ログファイルを監視して、PANICとかFATALとかがあればヒストリに残してくれる。トリガを設定すれば通知もできますね。
postgresqlyumでインストールした場合、デフォルトのログの場所は

/var/lib/pgsql/9.3/data/pc_log

です。postgresql.confでログファイルの場所を指定するパラメータ pg_log があって、そこにはデフォルトでは'pg_log'が指定されています。相対バスだった場合は自動的に$PGDATAがプレフィックスとして追加されて上記の値になります。
ところがですよ。$PGDATAに至るディレクトリはパーミションが0700、オーナ、グループがpostgres/postgresになっています。zabbixでログを監視するためにはzabbix/zabbixでログファイルを参照する必要があります。最低でもリードパーミションがないと。

ということで以下処置を実施。

ログファイルにgroup read permissionをつける。

# chmod 0640 /var/lib/pgsql/9.3/data/pg_log/*

/var/log/pg_logに上記ログファイルをハードリンクする。

# mkdir /var/log/pg_log
# chown zabbix:zabbix /var/log/pg_log
# ln /var/lib/pgsql/9.3/data/pg_log/* /var/log/pg_log

シンボリックリンクだと、リンク元へ至るディレクトリパーミションが有効になってしまい、参照することができません。

zabbixをpostgresグループへ追加

/etc/groupを編集。

postgres:x:26:zabbix

pg_monzのテンプレートマクロ値を変更

これはzabbixサーバで実施。設定→テンプレートで"Template_APP_PostgreSQL"を選択。
マクロタブをクリック。{$PGLOGDIR}へ/var/log/pg_logを設定。

これでログを監視することができます。
上記をchefのレシピで書いたのがこちら。

directory "/var/log/pg_log" do
  action :create
  owner "zabbix"
  group "zabbix"
  mode 0750
  action  :create
end

%w{Sun Mon Tue Wed Thu Fri Sat}.each do |wod|
  file "/var/lib/pgsql/9.3/data/pg_log/postgresql-#{wod}.log" do
    mode "0640"
  end
  link "/var/log/pg_log/postgresql-#{wod}.log" do
    to "/var/lib/pgsql/9.3/data/pg_log/postgresql-#{wod}.log"
    link_type :hard
  end
end

group "postgres" do
  action :modify
  members "zabbix"
  append true
end

でもさ

よく考えたらpostgresql側でログファイルの出力先を/var/log以下の適当なところへ変更したほうが良かったかもしれない。