Логи – это основной источник информации о работе серверов, приложений и сетевого оборудования. Правильная выгрузка (экспорт) архивов логов позволяет:
- Проводить детальный аудит и расследование инцидентов;
- Хранить данные в соответствии с требованиями регуляторов;
- Освобождать место на диске, перемещая старые файлы в безопасное хранилище;
- Автоматизировать процесс резервного копирования.
Содержание статьи
- Что такое архивы логов и где они находятся
- Подготовка к выгрузке: проверка прав и планирование
- Сжатие логов (tar, gzip, bzip2, xz)
- Перенос архивов (scp, rsync, sftp, FTP)
- Автоматизация процесса (cron, systemd‑timer, скрипты)
- Безопасность и шифрование
- Очистка старых логов и политика хранения
- Устранение типичных проблем
Что такое архивы логов и где они находятся
В большинстве UNIX‑подобных систем логи собираются в каталоге /var/log. Примеры типовых файлов:
syslog– системные сообщения;auth.log– события аутентификации;daemon.log– сообщения фоновых служб;nginx/.log,apache2/.log– веб‑серверы;- Логи приложений, находящиеся в их собственных каталогах.
Для экономии места большинство дистрибутивов используют logrotate, который автоматически переименовывает текущий файл в имя.log.1, имя.log.2.gz и т.д. Таким образом «архивы логов» – это уже сжатые файлы, созданные этим механизмом.
Подготовка к выгрузке: проверка прав и планирование
Перед тем как приступить к выгрузке, убедитесь, что у вас есть необходимые привилегии:
- Для чтения большинства системных логов требуется пользователь
rootили член группыadm/systemd-journal. - Если вы работаете через
sudo, проверьте, что ваш пользователь включён в файл/etc/sudoersс нужными правами.
Определите политику хранения:
- Сколько дней хранить оригиналы?
- Какой объём данных можно отправлять в удалённый центр?
- Требуется ли шифрование при передаче?
Сжатие логов (tar, gzip, bzip2, xz)
Хотя logrotate уже сжимает отдельные файлы, часто удобнее собрать набор логов в один архив. Ниже – примеры команд.
Создание tar‑архива без сжатия
tar -cvf logs_$(date +%Y%m%d).tar /var/log/.log Сжатие gzip (быстро, хорошее соотношение)
tar -czvf logs_$(date +%Y%m%d).tar.gz /var/log/.log Сжатие bzip2 (лучшее сжатие, но медленнее)
tar -cjvf logs_$(date +%Y%m%d).tar.bz2 /var/log/.log Сжатие xz (самое эффективное, но требует больше CPU)
tar -cJvf logs_$(date +%Y%m%d).tar.xz /var/log/.log Для автоматической очистки старых архивов удобно использовать параметр --remove-files (удалит исходные файлы после упаковки) или добавить отдельный find‑скрипт.
Перенос архивов
Выбор метода зависит от доступных сервисов и требований к безопасности.
SCP (простой и безопасный)
scp /path/to/logs_$(date +%Y%m%d).tar.gz user@remote.example.com:/backup/logs/ RSYNC (инкрементальная передача, проверка целостности)
rsync -avz /path/to/logs_$(date +%Y%m%d).tar.gz user@remote.example.com:/backup/logs/ SFTP (через скрипт)
#!/bin/bash
HOST="remote.example.com"
USER="user"
REMOTE_DIR="/backup/logs"
LOCAL_FILE="/path/to/logs_$(date +%Y%m%d).tar.gz"
sftp ${USER}@${HOST} < FTP (не рекомендуется без TLS)
Если используете только FTP, обязательно включите ftps или ftp over TLS. Пример с lftp:
lftp -u user,password ftps://remote.example.com -e "mirror -R /local/path /remote/path; quit" Автоматизация процесса
Самый надёжный способ – использовать cron или systemd‑timer. Ниже – пример cron‑задачи, выполняющей выгрузку каждый день в 02:00.
Скрипт /usr/local/bin/export_logs.sh
#!/bin/bash
LOG_DIR="/var/log"
ARCHIVE_DIR="/var/backups/logs"
REMOTE_USER="backup"
REMOTE_HOST="backup.example.com"
REMOTE_DIR="/remote/logs"
mkdir -p "${ARCHIVE_DIR}"
DATE=$(date +%Y%m%d)
ARCHIVE="${ARCHIVE_DIR}/logs_${DATE}.tar.gz"
tar -czf "${ARCHIVE}" -C "${LOG_DIR}" . --exclude=".gz" --exclude=".xz"
scp "${ARCHIVE}" ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/
find "${ARCHIVE_DIR}" -type f -name "logs_.tar.gz" -mtime +30 -delete
Сделайте скрипт исполняемым:
chmod +x /usr/local/bin/export_logs.sh Добавляем запись в crontab (root)
0 2 * * /usr/local/bin/export_logs.sh >> /var/log/export_logs.log 2>&1 Альтернатива: systemd‑timer
Создайте файл /etc/systemd/system/export-logs.service:
[Unit]
Description=Export and upload system logs
[Service]
Type=oneshot
ExecStart=/usr/local/bin/export_logs.sh
И таймер /etc/systemd/system/export-logs.timer:
[Unit]
Description=Run export-logs.service daily at 02:00
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
Активируем:
systemctl daemon-reload
systemctl enable --now export-logs.timer Безопасность и шифрование
- SSH‑ключи вместо паролей – более безопасный способ аутентификации.
- Если требуется дополнительное шифрование файлов, используйте
gpg:gpg --symmetric --cipher-algo AES256 "${ARCHIVE}"При этом будет создан файл
logs_20260710.tar.gz.gpg. - Для передачи больших объёмов данных рекомендуется использовать VPN или IPsec‑туннель.
- Проверьте права доступа к архиву:
chmod 600и владельцаroot:root.
Очистка старых логов и политика хранения
Политика хранения определяется требованиями бизнеса и нормативами (например, GDPR, PCI‑DSS). Пример типовой стратегии:
| Тип логов | Хранить (дней) | Метод архивации |
|---|---|---|
| Системные (syslog, auth) | 90 | gzip + перенос в удалённый хост |
| Приложения (nginx, mysql) | 30 | gzip, хранение локально |
| Аудит (auditd) | 180 | xz, шифрование, хранение в безопасном хранилище |
Автоматическое удаление реализуется через logrotate и find‑скрипты, как показано в разделе Автоматизация.
Устранение типичных проблем
- Ошибка «Permission denied» при чтении логов – проверьте, что скрипт запускается от root или пользователя из группы
adm. - Недостаточно места на диске – сначала сжимайте файлы, а затем удаляйте оригиналы. Можно использовать
tmpfsдля временного хранения. - Сбой передачи по SCP – проверьте, открыт ли порт 22, и корректность SSH‑ключей. При больших файлах используйте опцию
-C(сжатие) илиrsync -P(продолжение прерванных передач). - Логи «залипают» в /var/log и не ротируются – убедитесь, что конфигурация
/etc/logrotate.d/*корректна и что процессlogrotateзапускается (обычно через cron.daily). - Файлы не шифруются – проверьте, установлен ли пакет
gnupgи что у вас есть права на запись в текущий каталог.
Выгрузка архивов логов терминала – это не просто копирование файлов, а целый процесс, включающий:
- Подготовку и проверку прав доступа;
- Эффективное сжатие и упаковку;
- Безопасную передачу на удалённые хранилища;
- Автоматизацию с помощью cron или systemd‑timer;
- Соблюдение политик безопасности и хранения.
Следуя рекомендациям, изложенным в этой статье, вы сможете построить надёжную и масштабируемую систему резервного копирования логов, которая будет отвечать требованиям как бизнеса, так и регуляторов.