GitOps интеграция
SLOzy поддерживает GitOps-подход к управлению SLO. Определения SLO хранятся в Git-репозитории в виде YAML-файлов, проходят валидацию в CI/CD и синхронизируются с платформой.
Рабочий процесс
Разработчик → PR в Git → CI валидация → Слияние → Синхронизация с SLOzyФормат SLO в репозитории
SLO описываются в YAML-файлах в каталоге .slozy/ репозитория:
apiVersion: slozy.io/v1
kind: SLO
metadata:
name: api-availability
team: platform
spec:
target: 99.9
timeWindow: 30d
metricType: availability
metricQuery: |
sum(rate(http_requests_total{
status=~"2.."
}[5m]))
/
sum(rate(http_requests_total[5m]))
description: Доступность публичного APIСинхронизация с Git
SLOzy может быть настроен на автоматическую синхронизацию с одним или несколькими Git-репозиториями. При каждом пуше в main запускается вебхук, который:
- Клонирует репозиторий
- Парсит YAML-файлы из
.slozy/ - Сравнивает с текущим состоянием в платформе
- Применяет изменения (создание/обновление/удаление SLO)
Валидация PR
В CI/CD пайплайне (GitHub Actions) выполняется предварительная валидация изменений SLO:
name: SLO Validation
on: [pull_request]
jobs:
validate-slos:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate SLO definitions
run: |
docker run --rm -v $(pwd):/workspace \
ghcr.io/slozy/validator:latest \
validate --path .slozy/
- name: Dry-run sync
run: |
slozyctl preview --path .slozy/ --base mainВалидатор проверяет:
- Корректность синтаксиса YAML
- Типы метрик (допустимы
availability,latency,throughput) - Целевые значения в диапазоне 0–100
- Разрешение имён команд
- Отсутствие дублирующихся имен SLO
История версий
Все изменения, прошедшие через GitOps-пайплайн, фиксируются в таблице slo_versions:
CREATE TABLE slo_versions (
id SERIAL PRIMARY KEY,
slo_id INT NOT NULL REFERENCES slos(id),
diff_type VARCHAR(20) CHECK (diff_type IN ('create', 'update', 'delete')),
changes JSONB NOT NULL,
snapshot JSONB NOT NULL,
git_commit VARCHAR(40),
created_at TIMESTAMPTZ DEFAULT NOW()
);Поле git_commit связывает версию SLO с конкретным коммитом в Git.
Разрешение конфликтов
При параллельных изменениях (через Git и через UI) SLOzy использует стратегию last-writer-wins с уведомлением:
- Если синхронизация из Git конфликтует с ручным изменением в UI, создаётся предупреждение
- Изменение из Git применяется, ручное изменение фиксируется в истории версий
- Администратор получает уведомление о конфликте
CLI для GitOps
# Синхронизация из Git
slozyctl sync --repo https://github.com/org/slo-configs --branch main
# Просмотр изменений без применения
slozyctl preview --path .slozy/ --base main
# Принудительная синхронизация с перезаписью
slozyctl sync --force --path .slozy/