Mackerelを支えるデータストア
- PostgreSQL, Redis, Graphite
2015年4月18日 第8回 中国地方DB勉強会
id:daiksy
粕谷 大輔
id:daiksy (@daiksy)
株式会社 はてな
トイレに閉じ込められる 検 索
Mackerelの機能紹介
ホストやロールによる
メトリック管理
ロール
サーバのスケーリングに
対応
サーバーインスタンスごとの
グラフの各色の重ねあわせで
全体の傾向を把握
メトリック監視とアラート
多様な通知先
通知時にグラフ画像が添付
※Slackのみ。順次拡張予定
スマフォ対応
サービスメトリック
オフィスの温度・湿度を計測
新機能順次開発中!
ローンチ以来毎週リリース継続中!
Mackerelのデータストア
Mackerelのデータストア
redis
Graphite
PostgreSQL
{"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
❝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
Graphiteの構成
- Carbon: メトリック収集
- Whisper: 時系列DB
- graphite-web: グラフ描画
Mackerelのグラフ用時系列
データを管理
※グラフ描画部分は独自実装
時系列データはクライアント
から1分おきに収集
まともに全部保存したら
データ量が膨大になる
グラフに必要な
時系列データの特徴
- 直近のデータは細かく見たい
- 古いデータはアバウトでも良い
直近6時間のグラフ
直近1ヶ月のグラフ
描画に必要なデータポイントは
描画範囲が広がるほど粒度が荒くてよくなる
直近1日のデータ
-> 1分ごとに保存
それ以前のデータ
-> 5分ごとに平均化
のように古くなるほどデータを
間引きできる
具体的には
直近25時間 -> 60秒ごと
直近21日間 -> 5分ごと
直近90日間 -> 1時間ごと
PostgreSQL
時系列データをのぞく
Mackerelの全データを管理
PostgreSQLのうれしみポイント
- Json型
- チェック制約
ホストのメタ情報
- EC2インスタンス情報
- ネットワーク・インターフェース
-> Json型
チェック制約
“AかBいずれかがNullの場合はCは
0になる” のような制約
仕様としてのデータの制約をデー
タベースの制約として定義
適材適所にデータストアを
活用しよう。
ご清聴
ありがとうございました

中国地方Db勉強会