Skip to content

GitOps интеграция

SLOzy поддерживает GitOps-подход к управлению SLO. Определения SLO хранятся в Git-репозитории в виде YAML-файлов, проходят валидацию в CI/CD и синхронизируются с платформой.

Рабочий процесс

Разработчик → PR в Git → CI валидация → Слияние → Синхронизация с SLOzy

Формат SLO в репозитории

SLO описываются в YAML-файлах в каталоге .slozy/ репозитория:

yaml
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 запускается вебхук, который:

  1. Клонирует репозиторий
  2. Парсит YAML-файлы из .slozy/
  3. Сравнивает с текущим состоянием в платформе
  4. Применяет изменения (создание/обновление/удаление SLO)

Валидация PR

В CI/CD пайплайне (GitHub Actions) выполняется предварительная валидация изменений SLO:

yaml
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:

sql
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 с уведомлением:

  1. Если синхронизация из Git конфликтует с ручным изменением в UI, создаётся предупреждение
  2. Изменение из Git применяется, ручное изменение фиксируется в истории версий
  3. Администратор получает уведомление о конфликте

CLI для GitOps

bash
# Синхронизация из Git
slozyctl sync --repo https://github.com/org/slo-configs --branch main

# Просмотр изменений без применения
slozyctl preview --path .slozy/ --base main

# Принудительная синхронизация с перезаписью
slozyctl sync --force --path .slozy/