architect/standards/3-process/process-log-archiving.md

type: standard
aspect: process
title: "Стандарт архивирования логов"
version: 1.0.0
date: 2026-02-19
status: active


Стандарт архивирования логов

Версия: 1.0.0
Дата: 2026-02-14
Уровень: У1 (Стандарт)


ПРИНЦИП

Логи за неделю  АКТИВНЫЕ (в /var/log)
Логи старше недели  АРХИВ (в S3)

Система автоматически архивирует старые логи, предотвращая переполнение диска.


ПРАВИЛО ХРАНЕНИЯ

Период Где Формат Доступ
0-7 дней /var/log raw + gzip Мгновенный
>7 дней $INFRA/logs/archive/YYYY-MM/ gzip Архив
Journal ограничен 500MB systemd journalctl

АВТОМАТИЗАЦИЯ

Скрипт

Файл: infra/scripts/archive-logs.sh

Что делает:
1. Находит логи старше 7 дней
2. Копирует в архив $INFRA/logs/archive/YYYY-MM/
3. Удаляет оригиналы
4. Очищает journal до 500MB

Запуск: Автоматически через system/scheduler

Расписание

Файл: system/scheduler/schedule.yaml

archive_logs:
  description: "Еженедельное архивирование логов старше 7 дней"
  command: "bash infra/scripts/archive-logs.sh"
  cron: "0 3 * * 0"    # воскресенье 03:00
  enabled: true

Когда: Каждое воскресенье в 03:00


СТРУКТУРА АРХИВА

$INFRA/logs/archive/
├── 2026-01/
│   ├── syslog.1.gz
│   ├── auth.log.1.gz
│   └── ...
├── 2026-02/
│   ├── syslog.1.gz
│   ├── kern.log.2.gz
│   └── ...
└── ...

Организация: По месяцам (YYYY-MM)


ЧТО АРХИВИРУЕТСЯ

Автоматически

НЕ архивируется


РУЧНОЕ ИСПОЛЬЗОВАНИЕ

Архивировать сейчас

bash infra/scripts/archive-logs.sh

Посмотреть что будет архивировано

find /var/log -type f \( -name "*.log.*" -o -name "*.gz" \) -mtime +7

Восстановить из архива

# Найти файл
ls -la $INFRA/logs/archive/2026-02/

# Распаковать
gunzip $INFRA/logs/archive/2026-02/syslog.1.gz

# Или посмотреть без распаковки
zcat $INFRA/logs/archive/2026-02/syslog.1.gz | less

МОНИТОРИНГ

Проверить архивирование

# Последний запуск
grep "archive_logs" /var/log/claude-scheduler.log | tail -20

# Размер архива
du -sh $INFRA/logs/archive/

Проверить место

# Логи в /var/log
du -sh /var/log

# Архив
du -sh $INFRA/logs/archive/

# Journal
journalctl --disk-usage

ВОССТАНОВЛЕНИЕ ПОСЛЕ СБОЯ

Если архив не создался

  1. Проверить что INFRA примонтирован:
mountpoint $INFRA
systemctl status infra-mount.service
  1. Запустить вручную:
bash infra/scripts/archive-logs.sh

Если диск переполнен

  1. Экстренная очистка:
# Удалить старые rotated логи БЕЗ архивирования
find /var/log -name "*.gz" -mtime +7 -delete
journalctl --vacuum-size=100M
  1. Создать архив:
bash infra/scripts/archive-logs.sh

ОТКЛЮЧЕНИЕ/ВКЛЮЧЕНИЕ

Временно отключить

# Редактировать schedule.yaml
vim system/scheduler/schedule.yaml

# Изменить enabled: true → enabled: false
archive_logs:
  enabled: false

Изменить частоту

# Ежедневно в 03:00
archive_logs:
  at: "03:00"

# Раз в 2 недели
archive_logs:
  cron: "0 3 * * 0/2"  # каждое 2-е воскресенье

СВЯЗЬ С ДРУГИМИ ПРОЦЕССАМИ

Процесс Связь
cleanup Очистка /tmp и старых файлов
backup_rotate Бэкапы тоже ротируются (7d/1m/12y)
monitor Следит за заполнением диска

Последовательность:

02:00  backup_L1_system
03:00  archive_logs (это)
03:00  backup_rotate

ИСТОРИЯ ИЗМЕНЕНИЙ

2026-02-14 (v1.0.0): Первая версия
- Создан скрипт infra/scripts/archive-logs.sh
- Добавлена задача в scheduler
- Создан стандарт


ССЫЛКИ

Реализация:
- Скрипт: infra/scripts/archive-logs.sh
- Расписание: system/scheduler/schedule.yaml

Связанные стандарты:
- process-backup.md — Бэкапы
- ../4-policy/policy-infra.md — Политика инфраструктуры
- process-resource-check.md — Проверка ресурсов

Документация:
- system/scheduler/CLAUDE.md — Работа scheduler


Версия: 1.0.0