SLI (Service Level Indicator)
SLI — это специфицированная метрика, которая показывает фактическое значение производительности системы. SLI являются основой для определения SLO и контроля качества сервиса.
Типы SLI
- Доступность — процент успешных запросов
- Latency — время отклика системы
- Throughput — количество обработанных запросов в секунду
- Процент ошибок — доля неуспешных запросов
- Качество данных — корректность обработанных данных
Примеры SLI
1# Пример сбора SLI метрик
2from prometheus_client import Counter, Histogram, Gauge
3import time
4
5# Метрики для SLI
6REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP requests', ['method', 'endpoint', 'status'])
7REQUEST_LATENCY = Histogram('http_request_duration_seconds', 'HTTP request latency')
8ERROR_RATE = Gauge('http_error_rate', 'HTTP error rate percentage')
9
10class SLICollector:
11 def __init__(self):
12 self.total_requests = 0
13 self.successful_requests = 0
14 self.latencies = []
15
16 def record_request(self, status_code, latency):
17 """Записать метрики запроса"""
18 self.total_requests += 1
19 REQUEST_COUNT.labels(method='GET', endpoint='/api', status=status_code).inc()
20 REQUEST_LATENCY.observe(latency)
21
22 if 200 <= status_code < 300:
23 self.successful_requests += 1
24
25 self.latencies.append(latency)
26
27 def get_availability_sli(self):
28 """Рассчитать SLI доступности"""
29 if self.total_requests == 0:
30 return 100.0
31 return (self.successful_requests / self.total_requests) * 100
32
33 def get_latency_sli(self, percentile=95):
34 """Рассчитать SLI latency (95-й процентиль)"""
35 if not self.latencies:
36 return 0
37 sorted_latencies = sorted(self.latencies)
38 index = int(len(sorted_latencies) * percentile / 100)
39 return sorted_latencies[index]
40
41# Установка мониторинга через pip
42pip install prometheus-client grafana-api
43
44# Установка через poetry
45poetry add prometheus-client grafana-api
Четыре золотых сигнала
Google SRE выделяет четыре ключевых SLI:
- Latency — время обработки запросов
- Traffic — количество запросов к системе
- Errors — процент неуспешных запросов
- Saturation — насыщенность ресурсов системы
FAQ
Какие бывают SLI?
Основные типы: доступность, latency, throughput, процент ошибок, качество данных, время восстановления.
Как часто собирать SLI?
SLI должны собираться в реальном времени, обычно с интервалом от секунд до минут, в зависимости от критичности сервиса.