ストーリー
ミッション概要
| ミッション | テーマ | 目安時間 |
|---|---|---|
| Mission 1 | ユーザージャーニーからSLIを導出 | 15分 |
| Mission 2 | SLO目標値の設定と根拠 | 15分 |
| Mission 3 | Multi-Window Burn-Rateアラート設計 | 15分 |
| Mission 4 | Grafanaダッシュボード設計 | 15分 |
前提条件
platform: "FinPay - 決済プラットフォーム"
architecture:
services:
- name: "API Gateway"
role: "リクエストルーティング、認証"
rps: 5000
- name: "Payment Service"
role: "決済処理、決済状態管理"
rps: 500
- name: "Merchant Portal"
role: "加盟店向け管理画面"
rps: 200
- name: "Notification Service"
role: "決済結果通知(Webhook、メール)"
rps: 1000
- name: "Analytics Service"
role: "取引分析、レポート生成"
rps: 100
historical_data:
payment_service:
last_6_months_availability: [99.97, 99.95, 99.98, 99.92, 99.96, 99.94]
last_6_months_latency_p99: [450, 520, 400, 600, 480, 510]
api_gateway:
last_6_months_availability: [99.99, 99.98, 99.99, 99.97, 99.99, 99.98]
monthly_revenue: "5億円"
regulatory: "PCI DSS Level 1準拠"
Mission 1: ユーザージャーニーからSLIを導出(15分)
要件
FinPayプラットフォームの主要ユーザージャーニーを3つ特定し、各ジャーニーに対して適切なSLIを設計してください。
各SLIについて以下を明記すること:
- SLIタイプ(availability/latency/correctness/freshness)
- Good Event と Valid Event の定義
- 測定ポイント
- 除外条件
解答例
ジャーニー1: 決済処理
| 項目 | SLI 1: 決済可用性 | SLI 2: 決済レイテンシ |
|---|---|---|
| タイプ | availability | latency |
| Good Event | 決済APIが正常レスポンス(非5xx) | 決済完了が3秒以内 |
| Valid Event | 全決済リクエスト | 正常な決済リクエスト |
| 測定ポイント | API Gateway(ALBログ) | Payment Serviceメトリクス |
| 除外 | ヘルスチェック、テスト決済 | タイムアウトした決済 |
ジャーニー2: 加盟店ダッシュボード
| 項目 | SLI 1: ポータル可用性 | SLI 2: データ鮮度 |
|---|---|---|
| タイプ | availability | freshness |
| Good Event | ポータルAPIが200を返す | 売上データが5分以内に反映 |
| Valid Event | 全ポータルリクエスト | データ表示リクエスト |
| 測定ポイント | API Gateway | Analytics Serviceメトリクス |
| 除外 | CSRFトークンエラー(400) | メンテナンスウィンドウ |
ジャーニー3: 決済通知
| 項目 | SLI 1: 通知配信率 | SLI 2: 通知遅延 |
|---|---|---|
| タイプ | availability | latency |
| Good Event | Webhookが200を受信 | 決済完了から30秒以内に通知 |
| Valid Event | 全通知対象イベント | 配信成功した通知 |
| 測定ポイント | Notification Service | Notification Serviceメトリクス |
| 除外 | 加盟店側のサーバーダウン | リトライによる遅延 |
Mission 2: SLO目標値の設定と根拠(15分)
要件
Mission 1で設計したSLIに対して、SLO目標値を設定してください。 各SLOについて以下を明記すること:
- 目標値と根拠
- エラーバジェット(月間)
- SLAとの関係(バッファ設計)
解答例
| SLO | 目標値 | 根拠 | 月間エラーバジェット | SLA |
|---|---|---|---|---|
| 決済可用性 | 99.95% | 過去最低99.92%、金融規制 | 21.6分 | 99.9% |
| 決済レイテンシ | 99% < 3s | 過去p99最大600ms、余裕あり | リクエストの1% | 95% < 5s |
| ポータル可用性 | 99.9% | 営業時間帯の利用が中心 | 43.2分 | 99.5% |
| データ鮮度 | 99.5% | 分析用途でリアルタイム性は緩い | 216分 | 99% |
| 通知配信率 | 99.9% | 加盟店のビジネスに直接影響 | 43.2分 | 99.5% |
| 通知遅延 | 95% < 30s | リトライを考慮した緩い目標 | 5%のリクエスト | 90% < 60s |
バッファ設計:
決済可用性:
SLO: 99.95% ──┐
├─ バッファ: 0.05%(月間21.6分)
SLA: 99.9% ──┘
SLOは過去実績(99.92%)に対して達成可能
SLAはSLOにさらにバッファを持たせて安全に
Mission 3: Multi-Window Burn-Rateアラート設計(15分)
要件
決済可用性SLO(99.95%)に対するMulti-Window Multi-Burn-Rateアラートを設計してください。 PromQLでアラートルールを記述すること。
解答例
# SLO: 99.95% (許容エラー率: 0.0005)
# ウィンドウ: 30日
alerts:
critical:
burn_rate: 14.4
long_window: 1h
short_window: 5m
budget_exhaustion: "~2日"
action: "PagerDuty即時通知"
warning:
burn_rate: 6.0
long_window: 6h
short_window: 30m
budget_exhaustion: "~5日"
action: "Slack #sre-alerts、当日対応"
info:
burn_rate: 3.0
long_window: 3d
short_window: 6h
budget_exhaustion: "~10日"
action: "Jiraチケット作成"
# Recording Rules
- record: finpay:payment_error_ratio:5m
expr: |
1 - (
sum(rate(payment_requests_total{status!~"5.."}[5m]))
/
sum(rate(payment_requests_total[5m]))
)
- record: finpay:payment_error_ratio:1h
expr: |
1 - (
sum(rate(payment_requests_total{status!~"5.."}[1h]))
/
sum(rate(payment_requests_total[1h]))
)
- record: finpay:payment_error_ratio:6h
expr: |
1 - (
sum(rate(payment_requests_total{status!~"5.."}[6h]))
/
sum(rate(payment_requests_total[6h]))
)
# Alert Rules
- alert: PaymentSLO_Critical
expr: |
finpay:payment_error_ratio:1h > (14.4 * 0.0005)
and
finpay:payment_error_ratio:5m > (14.4 * 0.0005)
for: 2m
labels:
severity: critical
service: payment
annotations:
summary: "決済SLO: Critical burn rate detected"
- alert: PaymentSLO_Warning
expr: |
finpay:payment_error_ratio:6h > (6 * 0.0005)
and
finpay:payment_error_ratio:30m > (6 * 0.0005)
for: 5m
labels:
severity: warning
- alert: PaymentSLO_Info
expr: |
finpay:payment_error_ratio:3d > (3 * 0.0005)
and
finpay:payment_error_ratio:6h > (3 * 0.0005)
for: 30m
labels:
severity: info
Mission 4: Grafanaダッシュボード設計(15分)
要件
FinPayプラットフォーム全体のSLOダッシュボードを設計してください。 以下を含むこと:
- エグゼクティブビュー(全SLO一覧)
- サービスビュー(決済サービスの詳細)
- 使用するPromQLクエリ
解答例
エグゼクティブビュー:
| パネル | タイプ | PromQL |
|---|---|---|
| 決済可用性 | Stat | sum(increase(payment_requests_total{status!~"5.."}[30d])) / sum(increase(payment_requests_total[30d])) * 100 |
| 決済バジェット残 | Gauge | バジェット消費率の逆数 |
| ポータル可用性 | Stat | 同様のクエリ(portal用) |
| 通知配信率 | Stat | 同様のクエリ(notification用) |
| SLO達成状況 | Table | 全SLOの一覧(目標/実績/バジェット残) |
サービスビュー(決済):
| パネル | タイプ | 内容 |
|---|---|---|
| 可用性トレンド | Time Series | 30日ローリングの可用性推移 + SLO線 |
| バーンレート | Time Series | 1h/6h/3dのバーンレート推移 |
| レイテンシ分布 | Heatmap | レイテンシのヒートマップ |
| エラー内訳 | Pie Chart | エラーコード別の内訳 |
| エンドポイント別 | Table | エンドポイント別のエラー率とレイテンシ |
| 依存サービス | Stat | 決済API、DBの健全性 |
達成度チェック
| ミッション | テーマ | 完了 |
|---|---|---|
| Mission 1 | SLI導出 | |
| Mission 2 | SLO目標設定 | |
| Mission 3 | Burn-Rateアラート設計 | |
| Mission 4 | ダッシュボード設計 |
まとめ
| ポイント | 内容 |
|---|---|
| SLI設計 | ユーザージャーニーから導出し、Good/Valid Eventを明確に定義 |
| SLO設定 | 過去データとビジネス制約からバランスの取れた目標を設定 |
| アラート | Multi-Window Burn-Rateで3段階のアラートを設計 |
| ダッシュボード | エグゼクティブ→サービスの階層で設計 |
チェックリスト
- 実際のサービスに対してSLIを設計できた
- データに基づいたSLO目標値を設定できた
- PromQLでBurn-Rateアラートを記述できた
- SLOダッシュボードの構成を設計できた
次のステップへ
次は理解度チェッククイズです。Step 2で学んだSLI/SLO設計の理解度を確認しましょう。
推定読了時間: 60分