Datadog を利用して SLO を管理しよう! #datadog
こんにちは 園部です。
今日は Datadog SLO を利用して、SLO や ERROR BUDGET(エラーバジェット)を管理したいと思います。
その前に
今回、取り上げる SLO を含めて、サービスレベル・品質に関連する用語を振り返っておきます。
(以下の文献を参考・引用しています)
SLI ( Service-Level Indicator: サービスレベル指標 )
利用者へ提供しているサービスの状況・品質を測る指標です。
リクエストレイテンシやエラー率、スループットなどの Work Metrics からサービスの重視される指標が用いられます。
SLO ( Service-Level Objective: サービスレベル目標 )
SLI で定義した指標の許容される値・範囲です。 例えば、平均レイテンシを 100ms 以下が、月間 99.5 % 満たされる。
SLA ( Service-Level Agreement: サービスレベル契約 )
利用者との SLO を達成または未達成となった場合の規程(ペナルティや払い戻し)に関する契約です。 AWS でも複数のサービスで SLA が定義されています。
ERROR BUDGET
ある期間内でサービスの信頼がどの程度損なわれても許容できるかを示す指標です。
例えば、ある SLI に対して、SLO を以下のように定義した場合、99.0% では、7.2時間 は目標を満たさない状態であることが許容されます。その期間を利用して、新しい機能リリースやシステム改善などを実施します。
SLO | ERROR BUDGET(許容時間/月) |
---|---|
99.0 % | 7.2 時間 |
99.5 % | 3.6 時間 |
99.95 % | 0.4 時間 |
個人的には、この考え方はとても興味深いものです。 SLO は 100% に近いほど良いもので、「目指せ 100% !!」 と考えがちですが、そうではなく障害などによる未達部分を除いた時間を余力・機会とし、本番環境でのリリース作業や改善を施すことが出来る数値的な目安とすることは、関係者間(開発者・運用者・ビジネスサイド)での合意形成をスムーズにさせてくれるはずです。
やってみる
Web サービスからの レスポンスタイムを SLI とし、平均 5ms が 1ヶ月で 99.5% 満たすことを SLO とします。
Datadog Synthetics 作成
Synthetics API Test を利用して対象となる Web サービスを外形監視します。(手順は割愛します)
Datadog Monitor 作成
SLO を利用するには、Monitor の作成が必要となります。
Monitors
> Manage Monitors
> New Monitor +
> Metric
しばらくすると一覧で、 STATUS が OK に変わります。
Datadog SLO 作成
Monitors
> Service Level Objectives
> New SLO +
Monitor Based
を選択すると、Datadog Monitor にあるメトリクスから選択出来ます。
Event Based
では、分母と分子を指定して、計算式を指定出来ます。
SLO と期間を指定します。 Time Window
は 7 Days, 30 Days, 90 Days が選択できます。
Save
を選択します。
一覧に表示されます。
Dashboard
Screenboard でも表示させてみます。
time window
は三つまで選択可能のようです。
このようなグラフが作成できます!
ERROR BUDGET を消費
意図的に、 SLO を達成できない状況とし、ERROR BUDGET の変化を見ていきます。
先に、期間( time window )を 30 Days → 7 Days へ変更します。
SLO は 100% 、ERROR BUDGET は 100%(50m 24s) となっています。
レスポンスタイムを遅延させるために、 Synthetics の Location を Tokyo から Sao Paulo へ変更します。
Synthetics としては、正常のままです。
レスポンスタイムを設定した Monitor ではアラート(赤色の部分)となっています。
SLO は 98% 、ERROR BUDGET は 77%(38m 48s) へ変化しました。 つまり、約 12分間 SLO が未達状況となっており、 この 7日間で 99.5 % をキープするには 未達状況は 38分以内とする必要があります。(あと37分はOKという見方も出来ます)
さいごに
サービスレベルを定量的に管理する方法として、SLO や ERROR BUDGET は有効な手段です。それらをライトに作成でき、かつダッシュボードとして多くの関係者へ共有出来る本サービスは非常に有益ではないかと思います。
先日、Meetup で Beta として紹介されていた他の機能も利用可能となったら、色々やってみたいと思います!