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 として紹介されていた他の機能も利用可能となったら、色々やってみたいと思います!