ゴール
前回までにSAMを用いて構築したサンプルアプリ&Application Signalsを用いて
SLO監視を試してみます。
https://qiita.com/ColorfulWorld/items/5fabebf0d2de4f77605f
SLI / SLO / SLAとは
用語解説
SLI(Service Level Indicator)
サービスレベル指標=何を測るか?
サービス品質を測る指標そのものです。
例:
- 成功率 99.9%
- レイテンシ p95
- エラー率 0.1%
などです。
SLO(Service Level Objective)
サービスレベル目標=どこまで目指すか?
SLIに対して「どこまでを目標にするか」を期間付きで定義します。
例:
- 直近28日で成功率99.9%
- p95レイテンシ300ms以内を99%
などです。
SLA(Service Level Agreement)
サービス品質保証(の合意)=顧客との約束事項。守れなかったらどうするか?
顧客との契約上、達成すべきサービスの品質を取り決めたものです。
未達時の救済(返金/クレジット)や除外条件を含む法的・商用ドキュメントを指します。
エラーバジェット(Error Budget)
SLOを満たしつつ、どこまで失敗して良いかを数値化した残量(許容量)です。
バーンレート(Burn Rate)
エラーバジェットをどれだけの速さで消費しているかを表す指標です。
- 1より小さい場合、予算内で推移。
- 1なら予算通り
- 1より大きい場合、予算より早く消費。このままだと期間内に枯渇。
例示
サービスが正常に稼働する率を99.9%とした場合は、下記のとおりになります。
SLI
HTTPリクエストに対し、ステータスコード200をレスポンスする率(成功率)が99.9%
SLO
直近30日間の成功率が99.9%以上。
SLA
暦月の成功率が99.9%を下回ったら、料金の10%を返金。
運用上、直近30日ローリング(評価時点から常に30日遡った期間)の成功率が99.9%であることを監視します。
契約・報告上は暦月で集計・判定します。
エラーバジェット
成功率99.9%の場合、エラー率0.1%がバジェット。
バーンレート
SLO=99.9%(エラーバジェット=0.1%)で、直近のエラー率=2%なら
バーンレート = 0.02 ÷ 0.001 = 20。
SLOが 暦月(30日)で99.9%なら
約1.5日(=30÷20)で予算が尽きるペース。
Application Signalsによる設定
前回までに作成したサンプルアプリケーションにSLOを設定してみます。
CloudWatchのコンソールで[Application Signals]-[サービス]を開くと、
自動で検知されたサービスが一覧で表示されます。

この中から[sam-test-stack-Enqueue]の[SLOを作成]をクリックすると、
[サービスレベル目標(SLO)を作成]画面が表示されます。
まず、サービスレベル指標(SLI)を設定します。
例では、「sam-test-stack-Enqueue/FunctionHandlerリクエストは、5XX障害のないレスポンスがあれば、良好かつ正常であるとみなされます。」となりました。

次にサービスレベル目標(SLO)を設定します。
例では30日ローリングで達成目標を99.9%に設定しました。
合わせて、バーンレートを設定します。例ではルックバックウィンドウ(現在からどれくらい遡った期間を評価するか)に60分を指定しました。

SLOが作成できました。SLIステータス、達成度、エラーバジェットなどが確認できます。

おわりに
CloudWatchでは、ログのフィルタリング、カスタムメトリクスを駆使して、ダッシュボードやアラームを作成して監視していましたが、 ApplicationSignalsでは非常に簡単にそれらを実現することができ、かつ詳細なトレースまで実施することができました。
