pg_monzでpostgresqlのログを監視する
先週インストールしたpg_monz。いろいろ調整してようやく監視システムとして稼働しています。
しかしながらまだ一つのアイテムが監視できていません。
pg.logアプリケーションに入っているログの監視。キー値はこんなです。
logrt["{$PGLOGDIR}/postgresql-.*\.log","PANIC|FATAL|ERROR|[Ee]rror"]
ログファイルを監視して、PANICとかFATALとかがあればヒストリに残してくれる。トリガを設定すれば通知もできますね。
postgresqlをyumでインストールした場合、デフォルトのログの場所は
/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以下の適当なところへ変更したほうが良かったかもしれない。