2013/08/25

Work around patch for munin/pgpool_connections

この前、仕事で移転作業をしたサーバを監視する為にmuninを入れたのですが、対象サーバで動いている pgpool の値を取得するプラグインが動かないので、いろいろ調べて最終的に雑なパッチを当てる事でちゃんと値が取れるようになりました。なのでその覚書きです。

pgpool_connections


対象サーバで動いているpgpoolは pgpool-II 3.2.5で、munin用のプラグインは github.com/vpetersson/munin_pgpool にあったやつなんですが、中身がPythonで、pcp_pool_statusコマンドの実行結果を取得するのに subprocess.check_output()が使われていました。動かなかった理由は、このcheck_output()がPython 2.7から実装されたものらしく、サーバの/usr/bin/pythonは2.6.6であることでした。

/usr/share/munin/plugins/pgpool_connections

サーバにPython 2.7をソースビルドして入れるかどうしようかというところですが、プラグインのソースコードが短いので、雑なパッチを書いて当てる事にしました。
Python 2.7より古い場合は subprocess.Popen を使う事にしました。あと、@author "名前"でSyntax Errorが出るのですが、これが何かわからん(Javadocのあれ?)のでそれも無視するようにしたのと、pcp_pool_statusコマンドが$PATHのディレクトリ以外に入っているので、プラグインの設定ファイルで "pcppath" を定義する事にしてます。他の変数も定義されていないと動かないプラグインなので、変数が一個増えるぐらいならって考えです。

/etc/munin/plugin-conf.d/pgpool

プラグインの設定ファイルで、実行されるpcp_pool_statusコマンドの位置を定義する事にしました。最初は os.environ['PATH'] += ':/path/to/dir' でよいかと思ったのですが、環境によってどのPATHに入ってるのかわからんので、コマンドの位置を定義する事にしています。

本来ならPull-Requestでもしておけばよいと思いますが、Python書くのが二回目で@authorとかpcppathとか本筋でない変更も入れたパッチなので、またたちまち値を取得する事を目的としているのでIssuesに書くだけにしておきました。


1 件のコメント:

  1. 作者とやり取りしてPull-Requestしてパッチが取り込まれました。
    https://github.com/vpetersson/munin_pgpool/pull/2

    返信削除