Конфигурация базы данных
SLOzy использует PostgreSQL в качестве основной базы данных и Redis для кэширования результатов Prometheus-запросов.
PostgreSQL
Подключение
Подключение настраивается через DATABASE_URL либо через отдельные переменные POSTGRES_*. Строка подключения собирается в формате:
host={host} port={port} dbname={db} user={user} password={password} sslmode={sslmode}Библиотека подключения — pgx v5 через пул соединений pgxpool.
Пул соединений
Настройки пула задаются в коде и переопределяются через переменные окружения:
config.MaxConns = int32(cfg.PostgresMaxOpenConns) // 25 по умолчанию
config.MinConns = int32(cfg.PostgresMaxIdleConns) // 10 по умолчанию
config.MaxConnLifetime = 1800 * time.Second // 30 минут
config.MaxConnIdleTime = 600 * time.Second // 10 минут
config.HealthCheckPeriod = 1 * time.MinuteПул проверяет здоровье соединений каждую минуту. Соединения, превысившие MaxConnLifetime или MaxConnIdleTime, автоматически закрываются и заменяются новыми.
Параметры пула
| Параметр | По умолчанию | Описание |
|---|---|---|
POSTGRES_MAX_OPEN_CONNS | 25 | Максимальное количество соединений в пуле |
POSTGRES_MAX_IDLE_CONNS | 10 | Минимальное количество idle-соединений |
POSTGRES_CONN_MAX_LIFETIME | 1h | Время жизни соединения |
POSTGRES_CONN_MAX_IDLETIME | 10m | Время простоя до закрытия |
Миграции
Миграции выполняются библиотекой golang-migrate/migrate. Файлы миграций находятся в директории migrations/ в корне проекта:
migrations/
000001_create_users.up.sql
000001_create_users.down.sql
000002_create_slos.up.sql
000002_create_slos.down.sql
...Миграции запускаются при старте приложения вызовом RunMigrations():
func RunMigrations(databaseURL string) error {
m, err := migrate.New("file://migrations", databaseURL)
if err != nil {
return err
}
defer m.Close()
if err := m.Up(); err != nil && err != migrate.ErrNoChange {
return err
}
return nil
}Если миграции уже применены, повторный запуск игнорируется (ErrNoChange).
SSL
Режим SSL для PostgreSQL задаётся через POSTGRES_SSL_MODE:
disable— без SSL (по умолчанию для development)require— обязательное SSL-соединениеverify-full— полная проверка сертификата (рекомендуется для production)
В production-окружении типичная строка подключения выглядит так:
DATABASE_URL=postgres://postgres:postgres@postgres-service:5432/slozy_db?sslmode=requireRedis
Redis используется для:
- Кэширования результатов вычислений SLO
- Хранения сессий пользователей
- Дедупликации оповещений
- Очередей фоновых задач
Конфигурация Redis
| Переменная | По умолчанию | Описание |
|---|---|---|
REDIS_HOST | localhost | Хост Redis |
REDIS_PORT | 6379 | Порт |
REDIS_PASSWORD | — | Пароль |
REDIS_DB | 0 | Номер базы данных |
REDIS_TLS_ENABLED | false | Включение TLS |
Параметры кэша
| Переменная | По умолчанию | Описание |
|---|---|---|
CACHE_ENABLED | true | Включение кэширования |
CACHE_DEFAULT_TTL | 300 (5 минут) | TTL записей по умолчанию (в секундах) |
CACHE_MAX_ENTRIES | 10000 | Максимальное количество записей |
CACHE_COMPRESSION | true | Сжатие значений |