DEV Community

myougaTheAxo
myougaTheAxo

Posted on

Claude CodeでSLO・エラーバジェットを設計する:可用性目標・バーンレートアラート・Prometheus

はじめに

「サービスが何%稼働していれば良いのかを定量化できていない」——SLO(サービスレベル目標)とエラーバジェットで「どこまで失敗を許容できるか」を数値化し、バーンレートアラートで問題を早期検出する設計をClaude Codeに生成させる。


CLAUDE.mdに設計ルールを書く

## SLO・エラーバジェット設計ルール

- 可用性SLO: 99.9%(月間ダウンタイム上限: 43.8分)
- レイテンシーSLO: P95 < 500ms
- エラーバジェット消費50%でWarning、75%でCritical
- 1時間バーンレート > 14.4倍: Critical(1時間でバジェット1%消費)
- 6時間バーンレート > 6倍: Warning
Enter fullscreen mode Exit fullscreen mode

生成される実装(抜粋)

// Prometheusメトリクスでバジェット消費を追跡
export function metricsMiddleware(req, res, next) {
  const start = Date.now();
  res.on('finish', () => {
    const durationSeconds = (Date.now() - start) / 1000;
    httpRequestsTotal.inc({ method: req.method, route: req.route?.path, status: res.statusCode });
    httpRequestDurationSeconds.observe({ method: req.method }, durationSeconds);

    if (res.statusCode >= 500) errorBudgetConsumed.inc({ slo: 'api-availability' });
    if (durationSeconds > 0.5) errorBudgetConsumed.inc({ slo: 'api-latency-p95' });
  });
  next();
}

// AlertManagerバーンレートルール
const ALERTMANAGER_RULES = `
groups:
  - name: slo-burn-rate
    rules:
      - alert: SLOBurnRateCritical
        expr: |
          (sum(rate(slo_error_budget_consumed_total{slo="api-availability"}[1h]))
          / (sum(rate(http_requests_total[1h])) * 0.001)) > 14.4
        for: 2m
        labels:
          severity: critical

      - alert: SLOBurnRateWarning
        expr: |
          (sum(rate(slo_error_budget_consumed_total{slo="api-availability"}[6h]))
          / (sum(rate(http_requests_total[6h])) * 0.001)) > 6
        for: 15m
        labels:
          severity: warning
`;

// エラーバジェット計算
async calculate(sloName, windowDays = 30) {
  const currentSLO = 1 - (errorRequests / totalRequests);
  const errorBudgetTotal = (1 - slo.target) * totalRequests;
  const burnRate = (errorBudgetConsumed / errorBudgetTotal) / (windowDays / 30);
  const daysUntilExhausted = burnRate > 1 ? (errorBudgetRemaining / errorBudgetTotal) * windowDays / burnRate : undefined;
  return { currentSLO, errorBudgetTotal, burnRate, daysUntilExhausted };
}
Enter fullscreen mode Exit fullscreen mode

まとめ

  1. CLAUDE.md に99.9%可用性SLO・P95レイテンシー500ms・バーンレートアラート閾値(14.4倍/6倍)を明記
  2. Prometheusメトリクス でresのfinishイベントからSLO違反を検出してバジェット消費カウントを増加
  3. バーンレート計算 で「今の速度で行くと何日でバジェットが尽きるか」を予測——予算超過前に対処できる
  4. AlertManagerルール でバーンレート超過を自動アラート——Critical(1h × 14.4倍)とWarning(6h × 6倍)の二段階

信頼性設計のレビューは **Code Review Pack(¥980)* の /code-review で確認できます。*

prompt-works.jp

みょうが (@myougatheaxo) — ウーパールーパーのVTuber。

Top comments (0)