Аналитика
SLOzy предоставляет автоматическое обнаружение аномалий и рекомендации по настройке SLO на основе анализа исторических метрик.
Обнаружение аномалий
Аномалии выявляются с помощью функций в internal/analytics/detector.go и сохраняются в таблице anomaly_detections (миграция 000011):
CREATE TABLE anomaly_detections (
id SERIAL PRIMARY KEY,
slo_id INT NOT NULL REFERENCES slos(id),
detection_time TIMESTAMPTZ NOT NULL,
anomaly_type VARCHAR(50) NOT NULL CHECK (anomaly_type IN (
'burn_rate_spike', 'latency_degradation',
'error_budget_critical', 'metrics_unavailable',
'unexpected_pattern'
)),
severity VARCHAR(20) CHECK (severity IN ('low', 'medium', 'high', 'critical')),
confidence_score NUMERIC(5,4),
current_value NUMERIC(20,6),
baseline_value NUMERIC(20,6),
anomaly_reason TEXT,
is_resolved BOOLEAN DEFAULT FALSE
);Типы аномалий
| Тип | Описание | Пример |
|---|---|---|
burn_rate_spike | Резкий рост скорости сгорания error budget | Burn rate > 2× за 5 минут |
latency_degradation | Деградация задержек | P95 latency > 2× baseline |
error_budget_critical | Error budget на исходе | Осталось < 10% бюджета |
metrics_unavailable | Метрики перестали поступать | Отсутствие данных > 5 минут |
unexpected_pattern | Нехарактерный паттерн метрик | Суточная аномалия в трафике |
Система сравнивает текущие значения с baseline — скользящим средним за 7 дней. Коэффициент уверенности (confidence_score) от 0 до 1 показывает, насколько отклонение статистически значимо.
Рекомендации SLO
На основе анализа аномалий и общей производительности система генерирует рекомендации в таблице slo_recommendations (миграция 000012):
CREATE TABLE slo_recommendations (
id SERIAL PRIMARY KEY,
slo_id INT NOT NULL REFERENCES slos(id),
recommendation_type VARCHAR(50) CHECK (recommendation_type IN (
'target_adjustment', 'threshold_adjustment',
'metric_query_optimization', 'alert_threshold_change',
'monitoring_frequency_change'
)),
severity VARCHAR(20) DEFAULT 'info',
message TEXT NOT NULL,
recommended_value VARCHAR(255),
rationale TEXT,
expires_at TIMESTAMPTZ DEFAULT NOW() + INTERVAL '30 days'
);Типы рекомендаций
| Тип | Описание |
|---|---|
target_adjustment | Корректировка целевого значения SLO |
threshold_adjustment | Изменение порогов healthy/warning/critical |
metric_query_optimization | Оптимизация PromQL запроса |
alert_threshold_change | Изменение порогов срабатывания алертов |
monitoring_frequency_change | Изменение частоты опроса метрик |
Пример генерации рекомендации
INSERT INTO slo_recommendations (
slo_id, recommendation_type, severity,
message, recommended_value, rationale
) VALUES (
1, 'target_adjustment', 'medium',
'Цель 99.9% не достигалась последние 30 дней. Рассмотрите снижение до 99.5%.',
'99.5',
'Текущая доступность за 30 дней: 99.3% при цели 99.9%. Цель превышает возможности сервиса.'
);Рекомендации автоматически истекают через 30 дней. Функция cleanup_expired_recommendations() удаляет устаревшие записи. Пользователь может отклонить или принять рекомендацию — в случае принятия изменения применяются к SLO автоматически.
Получение аналитики через API
# Аномалии для SLO
curl /api/v1/analytics/anomalies?slo_id=1&severity=high
# Рекомендации
curl /api/v1/analytics/recommendations?slo_id=1
# Принять рекомендацию
curl -X POST /api/v1/analytics/recommendations/5/apply