Skip to content

モニタリング

Ongrid は箱から出してすぐ動くモニタリングパイプラインを同梱し、既存の ものがあればそれに 寄り添う 設計です。

データプレーン

text
edge:
  hostmetrics, procmetrics, node-exporter  ─┐
                                            │  remote_write (HTTPS direct)

                                       ┌─────────┐
                                       │  Prom   │  (default: bundled)
                                       └────┬────┘
                                            │ query_range / instant

                                  ┌──────────────────────┐
                                  │  manager:            │
                                  │   - alert evaluator  │
                                  │   - query_promql     │
                                  │   - /api/grafana     │
                                  └──────────────────────┘

デフォルト は docker-compose 内で prometheus:9090 で動く同梱 Prometheus です。edge は HTTPS で直接プッシュします —— スクレイプも ノード検出もありません。これは ADR-014 のデータプレーン / コントロール プレーン分割です:geminio トンネルはコントロールを運び、テレメトリは 直接行きます。

なぜトンネル経由ではなく直接か

50 ホストインストールで 5k 系列/秒以上のカーディナリティになると、 remote_write を geminio コントロールトンネルにマルチプレックスすると 詰まりました。直接 remote_write は manager をホットパスから外し、Prom 独自の write-ahead-log が取り込みバッファリングを処理します。トレード オフは公開する HTTPS エンドポイントが 1 つ増えること —— nginx の リバースプロキシスニペットは サーバーインストール を参照。

組み込み vs 外部 Prom

両モードともファーストクラスです。

組み込み(デフォルト)

docker compose upprometheus:v2.55--web.enable-remote-write-receiver 付きで立ち上がります。ストレージは named volume ongrid_prom_data。 保存期間はデフォルト 15d —— .envPROMETHEUS_RETENTION でチューン。

manager は ONGRID_PROM_QUERY_URL 環境変数経由で http://prometheus:9090 と話します。追加の設定は不要です。

外部

ONGRID_PROM_QUERY_URL を自前の Prom / VictoriaMetrics / Thanos の クエリエンドポイントに向けます。edge は依然 remote_write します —— Edge プラグイン設定(internal/manager/biz/edge/plugin_config.go)の エッジごとの remote_write_url でインゲスト URL を指してください。

クラウド同梱の Prom は manager 自身だけをスクレイプする「セルフ可観測性」 Prom として走り続けることができます(ADR-026 のセルフ obs メトリクス はそこに居ます)。両半分が必要なアラートは異なる match_scope_types で 2 度定義できます。

クエリパス

2 つのコンシューマー、1 つのクライアント。

Alert evaluator

PipelineEvaluator.evaluatePromQuery は tick ごとに、有効な metric_raw ルールの Expr を走らせます。PromQL 自身の比較オペレーター (up == 0cpu_pct > 90)が述語です —— Prom はマッチしない系列を レスポンスから落とすので、evaluator は返ってきたベクトルエントリごとに 1 インシデント発火し、次の tick の復旧スイープで残りを刈り取ります。

go
// pipeline.go:269
res, err := e.prom.Query(ctx, rule.Expr, now)
// ...
for _, ent := range entries {
    dedupeKey := fmt.Sprintf("pipeline:%s:%s", rule.RuleKey, labelSetKey(ent.Metric))
    // ... RecordFiring + notify
}

query_promql ツール

LLM は instant または range クエリを取って JSON ベクトル / 行列を返す query_promql という BaseTool を持ちます。investigator ペルソナはこれ を主要なメトリクスプローブとして使い、coordinator のチャットは「今 edge-prod-04 の cpu は?」と訊いたときに使います。

スキーマは query_promql_basetool.go にあり、基底エンジンは internal/pkg/promquery です。

埋め込み Grafana

compose は grafana:3000 で Grafana を出します。manager は /api/grafana/* でプロキシ(プロキシで認証チェック)するので、SPA の MonitorPanel.tsx はワンクリックで iframe を埋め込めます —— Grafana への 別ログインなし。

箱から出した状態で、manager は同期 tick で内部のモニターパネル定義を biz/grafana/Service 経由で Grafana に ミラー します。operator はリッチエディタである Grafana でパネルを編集し、manager がそれを拾います。SPA の MonitorEditor ページは薄い read-then-redirect で、関連系列がプリ入力された Grafana パネルエディタをポップします。

Grafana 認証情報

同梱 Grafana は admin / admin で出荷されます。公開する前に変更して ください。初回起動チェックリスト を参照。

セルフ可観測性

ADR-026 は manager に /metrics + 6 つのベースラインアラート(LLM トークン スパイク、alert evaluator のストール、トンネル切断ストーム、監査ログ ラグ、investigator バックログ、RCA レイテンシ p99)を配線しました。これら は初回起動でルール + ダッシュボードテーブルに seed され、アップグレード ごとに再アサートされます。

同梱 Prom は manager の /metrics をスクレイプします。外部 Prom モード では manager:9100(デフォルト ONGRID_METRICS_ADDR)にスクレイプ ターゲットを追加する必要があります。

関連

  • アラート —— Prom にクエリするルール種別。
  • トレース —— traces_spanmetrics_* 系列を同じ Prom に 戻す spanmetrics ジェネレーター。
  • ログ —— Loki 用の並行パイプライン。
  • 環境変数 —— あらゆる ONGRID_PROM_*PROMETHEUS_* のつまみ。