Mackerelを支えるデータストア
- PostgreSQL, Redis, Graphite
2015年4月18日 第8回 中国地方DB勉強会
id:daiksy
粕谷 大輔 id:daiksy (@daiksy) 株式会社 はてな
新機能順次開発中! ローンチ以来毎週リリース継続中!
{"name": "hogeHost", "meta": {}, “interfaces”:[{“address":"192.168.1.1","defaultGateway":"192.168.1.1","encap":"Ethernet","ipAddress":"192.168.1.1"...}]}
メトリックの保存先と用途
- Redis: モニター監視 - Graphite: 時系列データの永続化 - PostgreSQL: グラフ定義
❝RedisはANSI Cで書かれていて、すべてのデータセットをメモリ内に読み込むため、危険なほどのス
﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅
ピードで動作します!❞﹅ ﹅ ﹅
http://redis.shibu.jp/features.html
_人人人人人人人人人人人人_ > 危険なほどのスピード <
‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y‾
リスト・セット・ハッシュなどのデータ構造をValueとして格納できるKVS
すべてのデータをメモリ上に格納するので高速
揮発性のデータストアだが、定期的にディスクに書き込んで永続化される
Mackerelでは監視対象データをRedisで扱っている
クライアントから送られた メトリックは、Redisと時系列DB(後述)に格納される
モニター監視は直近5分のデータのみあればよい -> Redisで高速に処理
※具体的には直近15個のデータを保持。それ以前は削除
Graphiteの構成
- Carbon: メトリック収集 - Whisper: 時系列DB - graphite-web: グラフ描画
グラフに必要な 時系列データの特徴
- 直近のデータは細かく見たい - 古いデータはアバウトでも良い
描画に必要なデータポイントは 描画範囲が広がるほど粒度が荒くてよくなる
具体的には
直近25時間 -> 60秒ごと 直近21日間 -> 5分ごと 直近90日間 -> 1時間ごと
時系列データをのぞく Mackerelの全データを管理
PostgreSQLのうれしみポイント - Json型 - チェック制約
ホストのメタ情報 - EC2インスタンス情報 - ネットワーク・インターフェース
-> Json型
チェック制約
“AかBいずれかがNullの場合はCは0になる” のような制約
仕様としてのデータの制約をデータベースの制約として定義