Tableau Serverで簡単にMySQLテーブルの容量(概算値)を時系列でモニタリング

こんにちは、宇津井です。次世代webカンファレンスでモニタリングのセッションが盛り上がったようなので、当社のちょっと変わったモニタリング例を紹介してみようと思います。最近当社のブログはMySQLネタが多くなっていてMySQL以外の情報も公開したいところですが、今回もMySQLネタです。
MySQLのINFORMATION_SCHEMAを利用すると各テーブルのデータ領域、インデックス領域の容量が概算値で取得出来ます。 http://dev.mysql.com/doc/refman/5.6/ja/tables-table.html
テーブル情報を取得するSQL例
SELECT
date_format(now(), '%Y/%m/%d') AS date,
table_name,
round(data_length/1024/1024, 2) AS 'data_size(MB)',
round(index_length/1024/1024, 2) AS 'index_size(MB)'
FROM
information_schema.tables
WHERE
table_schema='hoge'
AND table_type='BASE TABLE'
これはこれで役立つのですが、ストレージ容量は有限ですので、どのテーブルが膨れあがってるのかを確認したかったりします。 今回はTableau Serverの以下の特徴を利用してグラフ化した例をご紹介します。
という事で先に完成した例を出してしまいます。
このようにテーブル毎の大凡の容量推移が確認出来ます。 RDSでもストレージの容量はオンラインでは変更出来ませんので、このようなグラフがあれば容量を削減するにしても当たりを付けやすいですね!
以下作業内容をかいつまんで紹介します。
MySQLに接続してカスタムSQLをデータソースに指定します。
こんな感じでデータが取得出来ている事が確認出来ます。
SQLでやっても良いんですが、Tableauの計算フィールドを利用してデータ領域とインデックス領域の合計値を作成します。
週毎の平均値をグラフ化して、テーブル毎に色付けします。今日の分しか無いので折れ線グラフになってませんが、安心してください。
データの抽出機能を使用して、tableauの内部データベースに結果のコピーを持ち、増分更新するように設定します。
Tableau Serverにdairy実行するように指定してパブリッシュすれば完成です。
あとはTableau Serverが毎日テーブル毎の容量推移を見守ってくれ、数ヶ月経つと冒頭のようなグラフに育ちます。
この調子で他の情報もグラフ化を頑張るといつかMySQL Enterprise Monitorのようなものが自作出来るかもしれませんね!