Docker構成のMastodonに組み込んだpgbouncerの監視をmuninに追加する

「Docker構成のMastodonに後からpgBouncerを組み込む http://d.hatena.ne.jp/tateisu/20170418/1492457904 」の続きです。

https://github.com/munin-monitoring/contrib/blob/master/plugins/postgresql/pgbouncer_ を使ってみたというただそれだけの記事です。

pgbouncer への接続に必要な情報を確認する

まず mastodonの.env.productionに指定ているDB接続情報を確認します

DB_HOST=db
DB_USER=bouncer
DB_NAME=postgres
DB_PASS=XXXXXXXXXXXXXXXXX
DB_PORT=5432
DB_POOL=20

この例では DB_HOSTが'db' になっています。
これはdockerが内部で管理するホスト名なのでdockerの外からはそのままではアクセスできません。
pgbounderを動かしてるコンテナのポートマッピングを確認します。

$ docker ps
(略)
XXXXXXXX gavinmroy/alpine-pgbouncer "/bin/sh -c /start.sh" (略) 172.17.0.1:5432->5432/tcp, 6432/tcp mastodon1_db_1
(略)

この例では 172.17.0.1:5432 に接続できそうです

pgbouncer に管理ユーザを追加する

pgboucer には管理用の疑似データベース pgbouncer があります。
そのデータベースに接続すると管理用コマンドを使えます。

pgbouncer の userlist.txt に下記の行を追加
"bouncer_admin" "XXXXXXXXXXXXXXXXXX"

パスワード部分は適当に生成するなりダイジェスト化するなりしてください

pgbouncerのpgbouncer.ini を編集
; comma-separated list of users, who are allowed to change settings
;admin_users = user2, someadmin, otheradmin
admin_users = bouncer_admin
pgbouncer にHUPシグナルを送って設定をリロード
pkill -HUP pgbouncer

接続プールの名前を確認する

psql -h 172.17.0.1 -p 5432 -U bouncer_admin pgbouncer -c 'show pools;'
(略)
 database  |   user    | cl_active | cl_waiting | sv_active | sv_idle | sv_used | sv_tested | sv_login | maxwait |  pool_mode  
-----------+-----------+-----------+------------+-----------+---------+---------+-----------+----------+---------+-------------
 pgbouncer | pgbouncer |         1 |          0 |         0 |       0 |       0 |         0 |        0 |       0 | statement
 postgres  | postgres  |        65 |          0 |         0 |       3 |       4 |         0 |        0 |       0 | transaction
(2 rows)

この例だと postgres が接続プールの名前になるようです

pgbouncer プラグインをインストール

https://github.com/munin-monitoring/contrib/blob/master/plugins/postgresql/pgbouncer_
をRAW表示して/etc/munin/plugins にコピーしてchmod 755 します。
また、ファイル名は pgbounder_(プール名) にしておきます

pgbouncer プラグインの設定

/etc/munin/plugin-conf.d/munin-node に以下のセクションを追加します

[pgbouncer_postgres]
env.pgbouncer_host 172.17.0.1
env.pgbouncer_port 5432
# env.pgbouncer_pool postgres
env.pgbouncer_user bouncer_admin
env.pgbouncer_pass XXXXXXXXXXXXXXXXXX

セクション名の部分は pgbouncer プラグイン のファイル名と揃えます。
接続情報の部分は 接続プールの名前を確認した時の情報と揃えます。
env.pgbouncer_pool はスクリプト名末尾と実際のプール名が異なる場合だけ指定するのが良いようです。

動作確認

以下のコマンドを実行してプラグインの動作を確認します。

munin-run pgbouncer_postgres config
munin-run pgbouncer_postgres

私の環境ではパッケージの追加インストールが必要でした。

apt install libdbd-pg-perl 

munin-nodeの再起動

sudo /etc/init.d/munin-node try-restart

今すぐグラフを生成する

su - munin --shell=/usr/bin/munin-cron

作成直後は数値がNaNになるみたいですが、5-10分ほど待ってリロードすると解決します