#目的
Aurora のステータス情報をzabbixで取得したい
#手法
Auroraををzabbixで直接参照することはできない(RDSにzabbix-Agentは入らないので)
代替えのインスタンスを起動して、EC2のAgentを使ってAWS Auroraから値を取得する。
#検証環境
・Aurora 5.6.10a
・Auroraエンドポイント用のEC2インスタンス(zabbixサーバへ登録済み)
・zabbixサーバ
#詳しい手順
Auroraへzabbix監視ユーザの登録
grant process on *.* to 'zabbix'@'%' identified by 'zbxpass';
EC2インスタンスに.my.cnfの作成
$ sudo mkdir /var/lib/zabbix
$ sudo vim /var/lib/zabbix/.my.cnf
$ sudo chmod 400 /var/lib/zabbix/.my.cnf
$ sudo chown -R zabbix:zabbix /var/lib/zabbix
.my.cnfの中身
[client]
user = zabbix
password= zbxpass
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.confの編集
変更前
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
変更後
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -hxxxxxxx.cluster-xxxxxxx.ap-northeast-1.rds.amazonaws.com -N | awk '{print $$2}'
変更前
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N'
変更後
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -hxxxxxxx.cluster-xxxxxxx.ap-northeast-1.rds.amazonaws.com -N'
変更前
serParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
変更後
serParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin -hxxxxxxx.cluster-xxxxxxx.ap-northeast-1.rds.amazonaws.com ping | grep -c alive
これで疑似的にEC2上で動くMySQLとして認識されるのでRDSでTemplate App MySQLを利用することができる。
クラスタエンドポイントや、読み込みエンドポイントをそれぞれ指定すれば
両方のステータス値が取得できる。
デメリットとして、RDSが複数ある場合、その台数分の代替えインスタンスが必要になるが
zabbix-agentを動かすだけなら、t2.nanoでも十分かも。