# 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