👻

Codex CLI用 自作プロキシ 運用編 〜監視とメトリクス収集(Prometheus/Grafana連携)〜

に公開

1. はじめに

これまでの記事では、Codex CLI用自作プロキシの実装や拡張(ストリーミング対応・リトライ戦略)について解説しました。本記事では運用フェーズに焦点を当て、監視とメトリクス収集 をテーマに、PrometheusとGrafanaを活用した具体的な方法を紹介します。


2. なぜ監視とメトリクスが必要か

  • 安定稼働: リクエスト数・レスポンス時間・エラー率を把握
  • ボトルネック検知: OllamaやOpenAI APIへの呼び出しが遅延していないか可視化
  • キャパシティプランニング: 将来的なスケールアウトの根拠
  • 障害対応: 異常値を早期に検知し、アラートを飛ばす

3. Prometheusでのメトリクス収集

ライブラリ導入

Node.js/TypeScriptであれば prom-client を利用します。

pnpm add prom-client

server.ts にメトリクスエンドポイントを追加

import client from 'prom-client'
import { Hono } from 'hono'

const app = new Hono()

// メトリクス登録
const collectDefaultMetrics = client.collectDefaultMetrics
collectDefaultMetrics()

// カスタムメトリクス
export const httpRequestDuration = new client.Histogram({
  name: 'http_request_duration_seconds',
  help: 'Duration of HTTP requests in seconds',
  labelNames: ['method', 'route', 'status_code'],
})

// メトリクス公開エンドポイント
app.get('/metrics', (c) => c.text(client.register.metrics()))

これで Prometheus サーバーから http://proxy:8787/metrics をスクレイプ可能になります。


4. リクエストごとの計測

middlewares.ts にてリクエスト時間を測定し、Histogramに記録します。

import { httpRequestDuration } from './server'

export const metricsMiddleware = async (c: any, next: any) => {
  const end = httpRequestDuration.startTimer()
  await next()
  end({
    method: c.req.method,
    route: c.req.path,
    status_code: c.res.status
  })
}

これにより、リクエストの応答時間がPrometheusに記録されます。


5. Prometheus設定例

Prometheusの prometheus.yml にターゲットを追加します。

scrape_configs:
  - job_name: 'codex-proxy'
    static_configs:
      - targets: ['localhost:8787']

6. Grafanaでの可視化

ダッシュボード項目例

  • リクエスト数の推移: rate(http_request_duration_seconds_count[5m])
  • 平均レスポンス時間: rate(http_request_duration_seconds_sum[5m]) / rate(http_request_duration_seconds_count[5m])
  • エラー率: sum(rate(http_request_duration_seconds_count{status_code!~"2.."}[5m]))

アラート設定例

  • エラー率が5%以上でSlack通知
  • レイテンシが3秒を超えたらPagerDutyに通知

7. 図解:監視の全体像


8. まとめ

運用段階で監視とメトリクス収集を組み込むことで、Codex CLI用自作プロキシの信頼性と安定性が大幅に向上します。

  • Prometheusでメトリクスを収集
  • Grafanaで可視化とアラートを設定

次回は、マルチテナント対応とアクセス制御 をテーマに、複数チームやプロジェクトで安全に利用する方法を解説します。

関連記事一覧(シリーズ全体)

本シリーズは OpenAI Codex CLI を「任意のプロバイダー」で利用するために
自作プロキシを実装・拡張・運用していく流れを段階的に解説したものです。
最初はOllamaでのgpt-oss利用から始まり、最終的にはエンタープライズ運用を意識した
マルチテナント対応やアクセス制御までカバーしています。

Discussion