pg_monzでの認証設定について

はじめまして。

Zabbix 3.0でpostgresql 9.2の監視設定のため
pg_monz1.0.1を設定し監視を行っております。

postgresqlのpg_hba.confファイルで認証設定で
パスワード認証を必須の設定にすると
「psql: fe_sendauth: no password supplied」というエラーメッセージが出力され
値が取得できなくなります。
(パスワード認証が必要ないtrustだと正常に値が取得できることは確認済みです)

https://qiita.com/biatunky/items/ae47c0871edd420bd67a

上記のURLを参考にzabbixユーザーのホームディレクトリに
.pgpassを配置してみたのですが
エラーメッセージも変わらず、取得できない状況です。

ログインできるほかのユーザーのホームディレクトリにて
.pgpassを配置してpsqlコマンドを実行した場合、
パスワード認証をスキップできたため、.pgpassの内容は間違っていないと思われます。

怪しいと思っている点としては
・zabbix_agentd.confで
 Allow rootの値を1としているためrootユーザーでpsqlコマンドを実行している?
(rootのホームディレクトリにも.pgpassを配置しましたが、値はとれず。。。)

・/etc/passwdファイルでzabbixユーザーのホームディレクトリを確認すると
 /var/lib/zabbixとなっているのですが、ディレクトリ自体がない。
 (そのため、/var/lib/zabbixを自身で作成し、.pgpassを配置しました。)

※ちなみに取得したい値は
  postgresqlの接続数(Connections)の値のみです。

どなたか解決策をご教示いただけますと幸いです。
よろしくお願い致します。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー jiro0904 の写真

OSのバージョンの記載を失念しておりました。

OSはRHFL 7.5です。
ほかに情報が必要であればご指示いただけますと幸いです。

何卒よろしくお願い致します。

ユーザー jiro0904 の写真

OSのバージョンの記載を失念しておりました。

OSはRHFL 7.5です。
ほかに情報が必要であればご指示いただけますと幸いです。

何卒よろしくお願い致します。

ユーザー jusco0103 の写真

MySQLでの話になりますが、UserParameterのSQLコマンドに、パスワードが入ったファイルのディレクトリを"HOME="にて指定しています。
<例>
UserParameter=mysql.conn.crt,echo "show processlist;" | HOME=/var/lib/zabbix mysql -N | wc -l

あまり参考にならないかもしれませんが、一助になればと思い取り急ぎご連絡します。

ユーザー jiro0904 の写真

ありがとうございます。

取り急ぎUserParameterのSQLコマンドの前にHOME=を試してみたのですが取得できませんでした。
下記、実際のUserParameterです。

UserParameter=psql.db_connections[*],HOME="zabbixのホームディレクトリ" psql -h $1 -p $2 -U $3 -d $4 -t -c "select numbackends from pg_stat_database where datname = '$5'"

構文エラー等にはならなかったので
コマンド自体は実行されたようですが、相変わらずパスワード認証ではじかれます。。。

HOME=についてもう少し調べて確認してみます。

情報いただきありがとうございました。

ユーザー heya の写真

http://pg-monz.github.io/pg_monz/
ここを見る限り、pg_monz はパスワード付きのユーザーにも対応しているみたいですよ。

https://qiita.com/biatunky/items/ae47c0871edd420bd67a
これは3年近く前の記事なので、それ以降に実装されたのかもしれません。

というわけで、 .pgpass をホームディレクトリに置くのではなく、pg_monz のインストール手順にある通り、pgsql_funcs.conf に export PGPASSFILE=pgpassのパス を書く、という手順でやってみてはどうでしょうか。

ユーザー jiro0904 の写真

ありがとうございます。

pg_monz ver 2.0であれば
ご教示いただいたとおりパスワード認証に対応しているのですが
今回pg_monz ver 1.0.1で対応したく考えております。

理由と致しましてはver 2.0以降だと
監視対象のサーバーにpgpool-II、Zabbix Senderをインストールする必要があり
現環境ではインストールすることが厳しいためです。

とはいえ、pg_monz ver 1.0.1で値が取得できないのであれば
ver 2.0以降で対応するしかないため、ver 2.0での対応も検討させていただきます。

情報ありがとうございました。

ユーザー heya の写真

.pgpass を使うしか無いわけですね。

>・zabbix_agentd.confで
> Allow rootの値を1としているためrootユーザーでpsqlコマンドを実行している?
>(rootのホームディレクトリにも.pgpassを配置しましたが、値はとれず。。。)

Allow root は、root で起動しようとしたときにそのまま root で動かすか、という設定なので、最初から root 以外で起動した場合はそのユーザーで動くことになります。実際にどのユーザーで動いているかは、 ps aux で確認してください。

で、root で動いていると仮定しての話ですが、/root/.pgpass に正しく書いてあって権限も正しければいけるはずです。
.pgpass の権限はどうなっていますか?所有者が root で rw------- となっていますか?

https://www.postgresql.jp/document/9.2/html/libpq-pgpass.html
>Unixシステムにおいて、.pgpassの権限はグループ、他者へのアクセスを
>すべて拒否しなければなりません。 これはchmod 0600 ~/.pgpassといった
>コマンドによって行います。 権限をこれよりも緩くすると、このファイルは無視されます。

ユーザー jiro0904 の写真

ありがとうございます。

pg_monz ver 2.0であれば
ご教示いただいたとおりパスワード認証に対応しているのですが
今回pg_monz ver 1.0.1で対応したく考えております。

理由と致しましてはver 2.0以降だと
監視対象のサーバーにpgpool-II、Zabbix Senderをインストールする必要があり
現環境ではインストールすることが厳しいためです。

とはいえ、pg_monz ver 1.0.1で値が取得できないのであれば
ver 2.0以降で対応するしかないため、ver 2.0での対応も検討させていただきます。

情報ありがとうございました。