ステージグループ向けエンジニアリングエラーバジェット

ステージグループ別のエンジニアリングエラーバジェットの例

ステージグループ向けエラーバジェット(実例)

エラーバジェットは Apdex とエラーレートの2つのコンポーネントで構成されます。

Apdex 成功率: 成功し、かつ適切なパフォーマンスで完了したオペレーションの割合。

「適切なパフォーマンス」のしきい値はサービスごとに異なります。

現在はサービスごとのグローバルしきい値ですが、ステージグループは近い将来エンドポイントごとにカスタマイズできる機能を利用できるようになります。

エラーレート: エラーが発生したオペレーションの割合。

開発者向けドキュメントには、バジェットがどこで消費されているかを確認するための詳細な手順が記載されています。

SLI、SLO、SLA とは?

これらはサービスレベル指標(Indicators)、目標(Objectives)、および契約(Agreements)の略称です。

SLA は、あるグループが別のグループと合意した提供サービスのレベルに関する契約です。 私たちはお客様と毎月一定の可用性レベルを達成するための SLA を締結しています。お客様ごとのサービスレベル契約はハンドブックに定義されています。

SLI は目標を達成できるかどうかを判断するために使用する指標であり、システムのパフォーマンスを測定するものです。

SLO はいくつかの SLI に対して設定された目標値です。SLI が SLO を下回るとアラートが発報されます。ステージグループのエラーバジェットにおける SLO は 99.95% であり、ステージグループがこの目標値を下回った場合、その原因を調査する必要があります。

計算に使用するデータの保存

このセクションでは、Web および API エンドポイントの Apdex について説明します。

すべてのエンドポイントはフィーチャーカテゴリに紐づけられています。 これはインシデント対応の支援と、エラーバジェットの消費を適切なステージグループに帰属させるために活用されます。

すべてのリクエストについて、以下を含むログ情報を保存します:

  • リクエストされたエンドポイント
  • その時点でエンドポイントを所有していたフィーチャーカテゴリ
  • レスポンスの生成と配信にかかった時間
  • その他のリソースへのクエリに費やした時間
  • レスポンスのステータスコード
  • (その他さまざまな情報)

最も細かい粒度のデータはログに保存されますが、大量に生成されるためこのデータを長期間保持することはできません。ログ情報は7日間保持されます。

また、より長期間にわたって粒度の低いメトリクスも保存します。保存するメトリクスの一つはレスポンス時間です。

サイズの制約から、メトリクスにリクエストの正確な時間を保存することはできません。代わりに、[-Inf, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, +Inf] のバケットを持つヒストグラムを使用します。これらはメトリクスカタログに定義されています。 リクエストが 0.6s かかった場合、それより速いバケット([+Inf, 5.0, 2.5, 1.0])がインクリメントされます。

また、リクエストがそのエンドポイントのリクエスト時間しきい値より速いか遅いかも保存します。これは Application SLI を使用して行われます。これにより、ユーザーへの重要性に基づいて SLI をカスタマイズできます。たとえば、rails_request の緊急度は、ユーザーがそのエンドポイントをどのように体験するかを反映するようカスタマイズできます。

メトリクス情報

メトリクスは Prometheus にカウンターとして保存します。

Apdex

  • operation-counter: 成功したすべてのリクエスト(エラーなし)でインクリメントされるカウンター。
  • success-counter: 5秒未満で完了した成功したすべてのリクエストでインクリメントされるカウンター。

エラー

  • operation-counter: すべてのリクエストでインクリメントされるカウンター。
  • error-counter: 5xx のすべてのレスポンスでインクリメントされるカウンター。

カウンターは以下のラベルで分類されます:

  • component: この SLI が参照するコンポーネント(例: ‘puma’ は puma が処理したリクエストを示す)
  • environment: ‘gstg’、‘gprd’ など。エラーバジェットには本番環境のみが含まれますが、他の環境用も存在します。
  • feature_category: このリクエストが対象とするフィーチャー。後で stages.yml の情報に基づいてグループにマッピングするために使用されます(インポート時)。
  • type: このリクエストが対象とするサービス(例: puma コンポーネントの場合は ‘api’、‘web’、または ‘git’)。

計算の実行

ステージグループダッシュボードを確認してエラーバジェットを確認する際、保持しているリクエストのパフォーマンスメトリクスを使用して計算を実行します。

前のページの計算式を使用して、28日間すべての成功したオペレーションの割合を使用します。

この計算に使用するしきい値が変更された場合、保存されたデータ全期間の合計を使用しているため、効果が現れるまでに28日かかります。