このエントリは、MySQL Casual Advent Calendar 22日目のエントリです。
多数の MySQL サーバをもモニタリングするとき Ganglia を使うと便利です。
現在の Ganglia は、バージョン 3.6.0 なのですが、MySQL をモニタリングしたい場合には、前に hirose31 さんが作ったプラグインがありますが、現在は本体に取り込まれているプラグインを使うといいです。
まず、インストール方法は、CentOS を例にとって説明しますが、Ganglia の RPM パッケージを作成しています。本体に SPEC ファイルのもとがあるので、手元で ./configure したあと ganglia.spec を使うと、次の RPM パッケージが出来上がります。
- ganglia-web: Ganglia の Web GUI
- gangala-gmetad: Ganglia サーバの収集デーモン
- ganglia-gmond: Ganglia クライアント
- ganglia-gmond-modules-python: Ganglia クライアントの Python プラグイン
- ganglia-devel: Ganglia 開発用のライブラリ
Ganglia のクライアントに必要なのは、ganglia-gmond, ganglia-gmond-modules-python パッケージをインストールする必要があります。ただし、依存関係で libganglia というパッケージもあわせてインストール必要があります。あと、Python の MySQL クライアント MySQL-python が必要ですが、これは使っている MySQL のバージョンによって動作しないことがあるため、別途あわせて作成してインストールしておくとよいでしょう。
Ganglia で MySQL をモニタリングしているのは、mysql.py と DBUtil.py で、内部的には show innodb status の出力結果を頑張って解析して値を取得しています。
しかし、最新版では、次の問題ありました。
- DBUtil.py で、UNIX Domain Socket がサポートされていない(mysql.py 側ではサポートされているが、3.6.0 には取り込まれていない…)
- MySQL 5.1 以降の show innodb status の出力に対応していない(こちらのパッチで直ります)
それぞれのパッチは、次のようなっています。
そして、本家にもその他の変更も含めて、すこし大きい pull-request を送っておいたのですが、無視され続けていました…。まさにすこし大きい pull-request は無視されてしまう法則にあたってしまったようです…。
内部的な変更は、これで動作するので、あとは設定するだけですが、MySQL サーバのユーザにユーザ権限 SUPER, PROCESS をもったユーザが必要になります。
これを作成した状態で、/etc/ganglia/conf.d/mysql.pyconf をこのような感じで設定します(この設定ではスレーブでの設定例です)
あとは、gmond を起動して、/var/log/messages にエラーが出ていなければ、次のようなグラフが出力されてるはずです。
PlanetMySQL Voting: Vote UP / Vote DOWN