1台のサーバーにいる複数MySQLをpercona-templateを使ってzabbixで監視する

###Perconatemplateダウンロード###

ダウンロードやインストールは公式のページでだいたいいけます。
http://www.percona.com/doc/percona-monitoring-plugins/1.1/zabbix/index.html

※1台のサーバーに"複数のMySQLをインストールしポートを3306,3307とか分けてあるサーバーを対象としています。
あとZabbix Agentがインストール済の前提です。

ポート3306,3307,3308がリッスンしてるmysql3ついてZabbixAgent入ってるdbsvrサーバーで実施。

###リポジトリを入れる###

<pre>
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
</pre>

###zabbix用percona-templateを入れる###
<pre>
yum install percona-zabbix-templates-1.1.4-1.noarch
</pre>

###テンプレートをインストールするとテンプレートが配置されるだけです。###

<pre>
[root@dbsvr yum.repos.d]# ls -lR /var/lib/zabbix/percona/
/var/lib/zabbix/percona/:
合計 8
drwxr-xr-x 2 root root 4096  2月 12 08:57 2015 scripts
drwxr-xr-x 2 root root 4096  2月 12 08:57 2015 templates

/var/lib/zabbix/percona/scripts:
合計 64
-rwxr-xr-x 1 root root  1251  7月 21 19:02 2014 get_mysql_stats_wrapper.sh
-rwxr-xr-x 1 root root 58226  7月 21 19:02 2014 ss_get_mysql_stats.php

/var/lib/zabbix/percona/templates:
合計 284
-rw-r--r-- 1 root root  18866  7月 21 19:02 2014 userparameter_percona_mysql.conf
-rw-r--r-- 1 root root 269258  7月 21 19:02 2014 zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.4.xml
</pre>

###入れたテンプレートを移動##

対象これ↓
userparameter_percona_mysql.conf

zabbix agentに読み込ませる為、/etc/zabbix/zabbix_agentd.d/配下にコピーします。
<pre>
cp -pr /var/lib/zabbix/percona/template/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
</pre>

デフォルトだとIncludeするファイル置き場は上記のはず
<pre>
[root@dbsvr zabbix_agentd.d]# cat /etc/zabbix/zabbix_agentd.conf | grep Include
### Option: Include
# Include=
Include=/etc/zabbix/zabbix_agentd.d/
</pre>

これがperconaのmysql用zabbix userparamterですね。これをZabbix ServerがAgentに叩かせます。


はい、準備完了です。
環境に合わせた修正点を加えます。

###修正点１、user,pass,port###

ポートやパスワード情報をpercona scriptsに記載します。
これ
<pre>
[root@dbsvr zabbix_agentd.d]# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php | grep \$mysql
$mysql_user = 'cactiuser';
$mysql_pass = 'cactiuser';
$mysql_port = 3306;
$mysql_ssl  = FALSE;   # Whether to use SSL to connect to MySQL.
$mysql_ssl_key  = '/etc/pki/tls/certs/mysql/client-key.pem';
$mysql_ssl_cert = '/etc/pki/tls/certs/mysql/client-cert.pem';
$mysql_ssl_ca   = '/etc/pki/tls/certs/mysql/ca-cert.pem';
</pre>

これのuser,pass,portを環境に合わせてください。

###修正点２、ZabbixServer###

Zabbix用テンプレートをZabbixServerに入れます。

以下からpercona-monitoring-plugins-1.1.4.tar.gzをダウンロードし、zabbixのGUIからConfiguration -> Templates -> Importの順でインポートします。
http://www.percona.com/downloads/percona-monitoring-plugins/

詳細は割愛しますが、ZabbixServerから監視アイテムを追加します。
もちろん今回入れたPercona-mysql-templateにあるものです。
キーはこちらのものが監視可能です。たくさんあります。
<pre>
[root@dbsvr zabbix_agentd.d]# head /etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf
UserParameter=MySQL.Sort-scan,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh kt
UserParameter=MySQL.slave-stopped,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jh
UserParameter=MySQL.Com-replace,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jz
UserParameter=MySQL.innodb-lock-structs,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh lp
UserParameter=MySQL.Com-load,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh kg
UserParameter=MySQL.State-updating,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh mi
UserParameter=MySQL.Aborted-clients,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ip
</pre>


これで監視できる状態になっていると思います。
1台のサーバーの1つのMySQL対してです。

#修正点３(本題)#
こっからが本題ですが、これだと1台の例えば3306ポートをリッスンしてるMySQLのみしか監視できません。

なのでまずZabbix側が認識する監視アイテムのキーを分ける為、userparameter_percona_mysql.confファイルを分けます。
cp -pr userparameter_percona_mysql.conf userparameter_percona_mysql3307.conf
とかにして、中身も以下のように修正します。例えばです。
キーの名前を"MySQL.Sort-scan"から"MySQL2.Sort-scan"に変えただけですが。

<pre>
[root@stg-db01 dbsvr]# head /etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql3307.conf
UserParameter=MySQL2.Sort-scan,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh kt
UserParameter=MySQL2.slave-stopped,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh jh
UserParameter=MySQL2.Com-replace,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh jz
UserParameter=MySQL2.innodb-lock-structs,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh lp
UserParameter=MySQL2.Com-load,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh kg
UserParameter=MySQL2.State-updating,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh mi
UserParameter=MySQL2.Aborted-clients,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh ip
UserParameter=MySQL2.innodb-lock-wait-secs,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh ni
UserParameter=MySQL2.Handler-read-key,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh mr
UserParameter=MySQL2.file-reads,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper2.sh gy
</pre>

次にuser,pass,portの情報も分ける必要があるので、ss_get_mysql_stats.phpファイルも分けます。
cp ss_get_mysql_stats.php ss_get_mysql_stats3307.php
とかにして、中身を以下のように修正します。ここは修正ポイントが明確ですね。

<pre>
[root@dbsvr zabbix_agentd.d]# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php | grep \$mysql
$mysql_user = 'newuser';
$mysql_pass = 'newpassword';
$mysql_port = 3307;
</pre>

あと上記のss_get_mysql_stats.phpをキックしているシェルがあるのでそちらも分けたい数分作ります。
ファイルはこれ、get_mysql_stats_wrapper.sh
場所は上記と同じ位置、/var/lib/zabbix/percona/scripts
修正箇所は

###①###
ファイル内に記載してあるss_get_mysql_stats.phpのファイル名(先ほどDIR/ss_get_mysql_stats3307.phpに変更したので)
get_mysql_stats_wrapper.shファイル内のここ
<pre>
CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg"
</pre>

これに
<pre>
CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats3307.php --host $HOST --items gg"
</pre>

###②###
以下の行のmysqlのパスが、複数のMySQLを入れてれば違うと思うので適宜変えてください。
これを
<pre>
 RES=`HOME=~zabbix mysql -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
</pre>

これに(例)
<pre>
 RES=`HOME=~zabbix /usr/local/mysql_test -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
</pre>

###③###
あとここも変えてください。
これを
<pre>
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"
</pre>

これ
<pre>
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt:3307"
</pre>

少しハマったのですが以下のようにいちいち添付ファイル作ってそれをsed,grep,awkして値返してるのです。
なのでこのファイル名を変えておかないとファイル名が被って変な事になります。

<pre>
# Parse cache file
if [ -e $CACHEFILE ]; then
    cat $CACHEFILE | sed 's/ /\n/g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}'
else
    echo "ERROR: run the command manually to investigate the problem: $CMD"
fi
</pre>

あとは新しく追加したキーをZabbixServerに登録で完了


以上。自分備忘録。30分くらいで書いたので雑です。。