Zabbix標準の「Template App MySQL」テンプレートを使う

Zabbixだと標準でTemplate_App_MySQLというテンプレートが入っているのですが、残念ながらzabbix-agentd側に対応するUserParametersが設定されていないと使えません。

TMTOWTDI(正解はひとつじゃない)というPerlの標語のとおり、自分のやり方でUserParametersを設定すれば良いのですが、取っ掛かりとして自分のやり方を紹介します。

MySQLに接続できるようにする(MySQLユーザの準備)

Debian/Ubuntuでは、管理系のツールで共通に使える「debian-sys-maint」というMySQLユーザが用意されているのでそれを使います。このユーザの情報は、/etc/mysql/debian.cnf にrootだけが読める状態で用意されています。

RedHat/CentOSではそういうのは無いので、自分でユーザを作るかrootユーザを使って下さい。以下ではdebian-sys-maintユーザがある前提で進めます。

zabbix-agentdはzabbixユーザで動作するため/etc/mysql/debian.cnfとは別に、zabbixユーザが読めるファイルを作成します。どこでも良いですが、zabbixユーザのホームディレクトリ(この記事では /opt/zabbix )を使います。

% sudo cp /etc/mysql/debian.cnf /opt/zabbix/.my.cnf
% sudo chown root:zabbix /opt/zabbix/.my.cnf
% sudo chmod 640 /opt/zabbix/.my.cnf

UserParameterを書いた設定ファイルを用意する

メインの設定ファイルzabbix-agend.confにそのままUserParameterを追記しても良いのですが、分けておくのが好きなのでInclude ディレクティブで読まれる別ディレクトリに、新しい設定ファイルを用意します。ここでは、/opt/zabbix/agent_include/userparameter_mysql.conf とします。

こんな感じで書きます。

UserParameter=mysql.status[*],mysqladmin --defaults-extra-file=/opt/zabbix/.my.cnf extended-status 2>/dev/null | awk '/ $1 /{print $$4}'
UserParameter=mysql.ping,mysqladmin --defaults-extra-file=/opt/zabbix/.my.cnf ping | grep alive | wc -l
UserParameter=mysql.version,mysqladmin -V
UserParameter=mysql.slave[*],mysql --defaults-extra-file=/opt/zabbix/.my.cnf -e "show slave status\G" | perl -ne 'print $$1 if /$1:\s*(.*)$/' | sed s/Yes/1/ | sed s/No/0/

値が取れるか確認する。

Zabbixサーバが動いてるホストで、zabbix_getコマンドで動作を確認します。

% zabbix_get -s <対象のホスト名> -k 'mysql.ping'
1
% zabbix_get -s <対象のホスト名> -k 'mysql.version'
mysqladmin  Ver 8.42 Distrib 5.5.29, for debian-linux-gnu on x86_64
% zabbix_get -s <対象のホスト名> -k 'mysql.status[Uptime]'
241382
% zabbix_get -s <対象のホスト名> -k 'mysql.slave[Slave_IO_State]'
Waiting for master to send event

こんな感じで値が取れれば大丈夫です。*1

テンプレートを紐付ける

あとは、Zabbixの管理画面でTemplate_App_MySQLテンプレートに紐付けてしばらく待つだけです。

スレーブサーバのテンプレート(おまけ)

実は上記に含まれる mysql.slave[*] は標準の Template_App_MySQL テンプレートでは設定されていないので、手元で使っているスレーブサーバ用テンプレート Template_App_MySQL_Slave を公開しておきます。

IO/SQLスレッドが止まったら怒るトリガーも入ってます。

Chefクックブック(おまけ)

上記をやってくれるChefクックブックも置いときます。

opscode-cookbook/mysql を使っている人であれば、node.mysql.server_debian_password をそのまま使うようにしたので 「include_recipe 'zabbix::agent_mysql'」するだけでよいです。

*1:当然ながら mysql.slave はレプリケーションのスレーブサーバでのみ取れます。