# Graphite
2006 年開始のオープンソース監視プラットフォーム。whisper ストレージライブラリ・carbon 書き込みデーモン・graphite-web 読み込み UI の 3 コンポーネントで構成される。[[Mackerel]] が 2018 年以前に使用していた時系列データベース基盤。
## アーキテクチャ
```
クライアント → carbon-cache → whisper ファイル ← graphite-web
↑ ↑
メモリバッファ CARBON_LINK でマージ
```
| コンポーネント | 役割 | 実装の特徴 |
|---|---|---|
| **whisper** | RRD ストレージ | 固定サイズ・ローリング・Rollup Aggregation |
| **carbon-cache** | 書き込みデーモン | Twisted 非同期 I/O、2 スレッド上限 |
| **carbon-relay** | 書き込みプロキシ | シャーディング・レプリケーション |
| **graphite-web** | 読み込み UI | Django、CARBON_LINK でメモリデータをマージ |
## whisper のラウンドロビン設計
whisper は RRDtool の後継として設計された時刻束縛型ストレージ。ファイルサイズを作成時点で固定し、複数 archive(精度×保持期間の組)を定義することで古いデータを Rollup Aggregation で粗精度に変換する。
- **利点**: ディスク使用量が一定(予測可能な容量計画)
- **制約**: 過去データの上書き・精度劣化は避けられない。古いデータを高精度で保持したい場合は archive 設定の変更とディスク増強が必要
この設計は [[HeteroTSDB]] の「追記型 + TTL tiering」や [[Gorilla]] の「圧縮インメモリ + HBase」とは異なるアプローチで、2006–2015 年の監視 TSDB における代表的設計だ。
## carbon-cache の CPU 限界
Twisted フレームワークベースにより実質 2 スレッド上限。マルチコアスケールには carbon-relay を前置して consistent-hashing で複数プロセスに分散する必要がある。この制約が [[Mackerel]] の多段 carbon-relay 構成を生んだ。
## レプリケーションと一貫性
carbon-relay のレプリケーションはバイナリログなし・一貫性保証なし。ノード復旧は rsync による同期が標準(DRBD は全方位書き込みでネットワーク帯域が限界に達するため不採用)。監視 TSDB における「CP より AP」の典型的選択。([[@2015__yuuk.io__High-Performance-Graphite]])
## Mackerel での運用と廃止
[[Mackerel]] は 2015 年頃まで Graphite を採用し、1 分あたり 100,000 件以上のメトリクスを処理していた。2018 年に [[HeteroTSDB]] へ移行し Graphite の運用を終えた。移行動機はマルチコアスケール限界・ページキャッシュ圧迫・一貫性なしレプリケーションなどの構造的制約。([[@2015__yuuk.io__High-Performance-Graphite]])
## 開発状況(2015 年時点)
stable バージョン 0.9.12。テストコードが少なくプルリクエスト承認率が低い状態だった。次世代実装として Megacarbon と Ceres が開発中だったが、Mackerel は独自の HeteroTSDB へ移行する道を選んだ。
## 関連
- 本ソース: [[@2015__yuuk.io__High-Performance-Graphite]]
- 採用サービス: [[Mackerel]]
- 後継(Mackerel): [[HeteroTSDB]]
- 著者(記事): [[Yuuki Tsubouchi]]
- 関連概念: [[時系列データベース]] / [[ラウンドロビンデータベース]]
- 先行技術: RRDtool