# Monitoring our Monitoring
**Cloudflare Blog, 2022-05-19** | [[Cloudflare]] SRE チームによる [[pint]](Prometheus ルールリンター)のオープンソース公開告知記事。
## 要旨
Prometheus アラートルールは、有効な PromQL であっても**静かに機能しなくなる**。メトリクス名のタイポ、メトリクス廃止、ラベル変更、rate() の時間範囲不足 ——いずれも Prometheus はエラーを返さず空の結果を返すだけで、アラートは来なくなる。この「[[Prometheusルールリント|監視の静かな失敗]]」を防ぐために Cloudflare が開発したのが **[[pint]]** である。
## 問題の構造
### 空クエリ問題
Prometheus はクエリが何も返さない場合にエラーを出さない。「アラートが来ない」は以下の 2 つを区別しない:
- (A) すべて正常で発火する必要がない
- (B) ルールが壊れていて本来発火すべきアラートが来ない
### rate() の 2 点問題
`rate()` は少なくとも 2 データポイントが必要。scrape interval が 1 分のとき `rate(metric[1m])` は 1 点しか取れず、計算不能 → 永遠にアラートなし。
### メトリクス名変更の連鎖破壊
recording rule チェーン(recording rule → recording rule → alerting rule)で中間ルールが変名されると、連鎖が切れてアラートが沈黙する。別チームが管理するルールでは特に発見しにくい。
## pint の概要
GitHub: https://github.com/cloudflare/pint | ドキュメント: https://cloudflare.github.io/pint/
| モード | 用途 |
|--------|------|
| lint ファイル | ローカル/ステージング環境でのルール検証 |
| CI(git diff) | PR の変更行のみ検証。変更されていないルールはスキップ |
| watch デーモン | 定期実行 → 問題をメトリクス公開 → Prometheus でアラート化(監視の監視) |
設定なし(= ライブ Prometheus なし)でも静的解析は動く。ライブ Prometheus を設定すると「存在しないメトリクス」チェックが有効になる。
### 主なチェック
- `promql/syntax` — PromQL 構文エラー
- `promql/series` — ライブ Prometheus でメトリクス・ラベルの存在確認
- アラート発火数の推定 → アラートファティーグ予防
- recording rule が追加する時系列数の推定(4 KiB/series の目安)
- ポリシー準拠: runbook アノテーション・priority ラベルの必須化
## Cloudflare での運用
Prometheus を 2017 年から使用。時系列数のピークは単一 Prometheus で約 3,000 万。1 時系列 = 平均 4 KiB のメモリが目安。pint でルール PR → デプロイ → 運用の全段を網羅。
## 横断的知見
- [[Prometheusルールリント]] の代表事例。「監視を監視する」watchdog パターンの実装。
- [[アクショナブルアラート]] の前提条件として「ルールが正しく発火している」という静的不変量を保証する。既存の発火後改善(KEEP/TUNE/DELETE)と直交する介入——発火前の健全性保証。
- [[アラート管理]] の空白地帯: CI でのルール検証と常時ウォッチドッグで「ルール劣化」を早期捕捉。
## 関連
- エンティティ: [[Cloudflare]] / [[pint]]
- コンセプト: [[Prometheusルールリント]] / [[アクショナブルアラート]] / [[アラート管理]] / [[オブザーバビリティ]]
- ツール: [[Prometheus]] / Grafana / node_exporter / karma / jiralert