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分ほど待ってリロードすると解決します