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

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の以下の特徴を利用してグラフ化した例をご紹介します。

という事で先に完成した例を出してしまいます。 table usage  all table   Tableau Server.png

このようにテーブル毎の大凡の容量推移が確認出来ます。 RDSでもストレージの容量はオンラインでは変更出来ませんので、このようなグラフがあれば容量を削減するにしても当たりを付けやすいですね!

以下作業内容をかいつまんで紹介します。

MySQLに接続してカスタムSQLをデータソースに指定します。 ss_ 2015-10-15 18.27.09.png

こんな感じでデータが取得出来ている事が確認出来ます。 ss_ 2015-10-15 18.29.21.png

SQLでやっても良いんですが、Tableauの計算フィールドを利用してデータ領域とインデックス領域の合計値を作成します。 ss_ 2015-10-15 18.32.50.png

週毎の平均値をグラフ化して、テーブル毎に色付けします。今日の分しか無いので折れ線グラフになってませんが、安心してください。 ss_ 2015-10-15 18.37.20.png

データの抽出機能を使用して、tableauの内部データベースに結果のコピーを持ち、増分更新するように設定します。 ss_ 2015-10-15 18.49.24.png

Tableau Serverにdairy実行するように指定してパブリッシュすれば完成です。 ss_ 2015-10-15 18.51.21.png

あとはTableau Serverが毎日テーブル毎の容量推移を見守ってくれ、数ヶ月経つと冒頭のようなグラフに育ちます。

この調子で他の情報もグラフ化を頑張るといつかMySQL Enterprise Monitorのようなものが自作出来るかもしれませんね!


名無しのエンジニア
MySQL 5.6と5.7のInnoDBバッファプールウォームアップのおはなし
角煮botはじめました