Error Budget (Бюджет ошибок)

Error Budget — это расчетное количество ошибок или времени простоя, которое допустимо согласно SLO без негативного влияния на бизнес и пользователей. Бюджет ошибок помогает командам балансировать между внедрением новых функций и поддержанием стабильности системы.

Как рассчитывается Error Budget

Бюджет ошибок = 100% - SLO

  • SLO 99.9% → Error Budget 0.1% (43 минуты в месяц)
  • SLO 99.5% → Error Budget 0.5% (3.6 часа в месяц)
  • SLO 99% → Error Budget 1% (7.2 часа в месяц)

Практическое применение

 1# Пример расчета и мониторинга Error Budget
 2from datetime import datetime, timedelta
 3import logging
 4
 5class ErrorBudgetCalculator:
 6    def __init__(self, slo_percentage, period_days=30):
 7        self.slo = slo_percentage
 8        self.period_days = period_days
 9        self.total_budget_minutes = self._calculate_total_budget()
10        self.consumed_minutes = 0
11        
12    def _calculate_total_budget(self):
13        """Рассчитать общий бюджет ошибок в минутах"""
14        total_minutes = self.period_days * 24 * 60
15        error_budget_percentage = (100 - self.slo) / 100
16        return total_minutes * error_budget_percentage
17        
18    def add_incident(self, duration_minutes):
19        """Добавить инцидент к потребленному бюджету"""
20        self.consumed_minutes += duration_minutes
21        remaining_percentage = self.get_remaining_percentage()
22        
23        if remaining_percentage < 10:
24            logging.warning(f"Error budget critically low: {remaining_percentage:.1f}% remaining")
25            
26    def get_remaining_percentage(self):
27        """Получить оставшийся процент бюджета ошибок"""
28        if self.total_budget_minutes == 0:
29            return 100
30        remaining = (self.total_budget_minutes - self.consumed_minutes) / self.total_budget_minutes * 100
31        return max(0, remaining)
32        
33    def should_halt_releases(self):
34        """Определить, нужно ли остановить релизы"""
35        return self.get_remaining_percentage() < 5
36
37# Пример использования
38budget_calc = ErrorBudgetCalculator(slo_percentage=99.9, period_days=30)
39budget_calc.add_incident(duration_minutes=30)  # 30-минутный инцидент
40
41print(f"Remaining error budget: {budget_calc.get_remaining_percentage():.1f}%")
42
43# Установка мониторинга через pip
44pip install prometheus-client alertmanager-api
45
46# Установка через poetry
47poetry add prometheus-client alertmanager-api

Политика использования Error Budget

  • Бюджет > 50% — можно ускорить релизы и эксперименты
  • Бюджет 10-50% — обычный темп разработки
  • Бюджет < 10% — замедлить релизы, фокус на стабильности
  • Бюджет исчерпан — полная остановка новых релизов

FAQ

Что делать, если бюджет ошибок исчерпан?

Нужно замедлить или остановить релизы новых функций и сфокусироваться на повышении стабильности системы до восстановления бюджета.

Как восстановить бюджет ошибок?

Бюджет ошибок восстанавливается автоматически с течением времени, если система работает стабильно и не происходит новых инцидентов.