Введение
Systemd-journald — это системный сервис для сбора и управления логами в современных дистрибутивах Linux. Со временем журналы могут занимать значительный объем дискового пространства, особенно на системах с высокой нагрузкой или длительным временем работы. Это руководство покажет вам, как безопасно очистить логи, настроить их автоматическое обслуживание и предотвратить проблемы с нехваткой места.
Проверка текущего состояния журналов
Перед любыми действиями по очистке рекомендуется проверить текущее состояние логов.
Просмотр размера журналов
Чтобы узнать, сколько места на диске занимают ваши логи journald, выполните:
sudo journalctl --disk-usage
Пример вывода:
Archived and active journals take up 1.2G in the file system.
Просмотр старых записей
Чтобы увидеть самые старые записи в журнале:
sudo journalctl --list-boots | head -5
Эта команда покажет список сеансов загрузки системы с их ID и временными метками.
Методы очистки логов journald
1. Очистка по времени
Удалите все записи журнала старше указанного периода:
# Удалить записи старше 2 дней
sudo journalctl --vacuum-time=2d
# Удалить записи старше 6 месяцев
sudo journalctl --vacuum-time=6months
# Удалить записи старше 1 года
sudo journalctl --vacuum-time=1years
Доступные единицы времени: seconds, minutes, hours, days, weeks, months, years.
2. Очистка по размеру
Ограничьте общий размер журналов, удалив самые старые записи при превышении лимита:
# Ограничить общий размер до 500 МБ
sudo journalctl --vacuum-size=500M
# Ограничить до 1 ГБ
sudo journalctl --vacuum-size=1G
Доступные единицы размера: K, M, G, T.
3. Очистка по количеству файлов
Ограничьте количество файлов журналов, сохраняя только последние N файлов:
# Сохранить только 5 последних файлов журнала
sudo journalctl --vacuum-files=5
4. Полная очистка (с осторожностью!)
Внимание: Эта команда удалит ВСЕ архивные журналы, оставив только активный журнал. Используйте с осторожностью!
# Удалить все архивные журналы
sudo journalctl --vacuum-files=0
# Альтернативный метод (более агрессивный)
sudo journalctl --rotate
sudo journalctl --vacuum-time=1s
Настройка автоматического обслуживания
Конфигурация journald.conf
Основной файл конфигурации находится по пути /etc/systemd/journald.conf. Отредактируйте его для автоматического управления логами:
sudo nano /etc/systemd/journald.conf
Важные параметры для управления размером:
[Journal]
# Максимальный размер хранилища журналов (по умолчанию 10% от раздела)
SystemMaxUse=1G
# Максимальный размер для постоянного хранилища
SystemKeepFree=15%
# Максимальный возраст записей
MaxRetentionSec=1month
# Максимальный размер каждого файла журнала
SystemMaxFileSize=100M
# Максимальное количество файлов журнала
SystemMaxFiles=10
Применение изменений конфигурации
После изменения конфигурации перезагрузите службу journald:
sudo systemctl restart systemd-journald
Проверьте статус службы:
sudo systemctl status systemd-journald
Работа с постоянным хранилищем журналов
Включение постоянного хранения
По умолчанию journald хранит логи только в памяти (/run/log/journal/). Для сохранения логов между перезагрузками:
# Создать директорию для постоянного хранения
sudo mkdir -p /var/log/journal
# Установить правильные права
sudo chown root:systemd-journal /var/log/journal
sudo chmod 2755 /var/log/journal
# Перезапустить journald
sudo systemctl restart systemd-journald
Отключение постоянного хранения
Если вы хотите вернуться к хранению только в памяти:
sudo rm -rf /var/log/journal
sudo systemctl restart systemd-journald
Просмотр и фильтрация логов
Полезные команды для работы с журналом
# Просмотр логов в реальном времени
sudo journalctl -f
# Просмотр логов за последний час
sudo journalctl --since "1 hour ago"
# Просмотр логов конкретной службы
sudo journalctl -u nginx.service
# Просмотр логов с приоритетом ошибок и выше
sudo journalctl -p err
# Экспорт логов в файл
sudo journalctl --since "2024-01-01" --until "2024-01-31" > january-logs.txt
Поиск в логах
# Поиск по ключевому слову
sudo journalctl -g "error"
# Поиск по идентификатору процесса
sudo journalctl _PID=1234
# Комбинированная фильтрация
sudo journalctl -u sshd _PID=1182 --since today
Мониторинг и автоматизация
Создание задачи cron для регулярной очистки
Добавьте в crontab регулярную задачу очистки:
sudo crontab -e
Добавьте строку для еженедельной очистки логов старше 2 недель:
# Очищать логи journald каждое воскресенье в 3:00
0 3 * * 0 /usr/bin/journalctl --vacuum-time=2weeks
Скрипт для мониторинга размера логов
Создайте скрипт для проверки и уведомления о большом размере логов:
#!/bin/bash
# /usr/local/bin/check-journal-size.sh
THRESHOLD=800M
CURRENT_SIZE=$(journalctl --disk-usage | awk '{print $7$8}' | sed 's/\.//')
# Преобразуем порог в байты для сравнения
if [[ "$THRESHOLD" == *G ]]; then
THRESHOLD_BYTES=$(echo ${THRESHOLD%G}*1024*1024*1024 | bc)
elif [[ "$THRESHOLD" == *M ]]; then
THRESHOLD_BYTES=$(echo ${THRESHOLD%M}*1024*1024 | bc)
fi
if [ $(echo "$CURRENT_SIZE > $THRESHOLD_BYTES" | bc) -eq 1 ]; then
echo "Внимание: Логи journald превысили порог $THRESHOLD"
echo "Текущий размер: $CURRENT_SIZE"
# Здесь можно добавить отправку email или другое уведомление
fi
Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/check-journal-size.sh
Устранение неполадок
Логи не очищаются после выполнения команд
Если место на диске не освободилось после очистки:
- Проверьте, не заблокированы ли файлы журналов:
sudo lsof /var/log/journal/
- Перезапустите службу journald:
sudo systemctl restart systemd-journald
- Проверьте, нет ли жестких ссылок:
sudo find /var/log/journal -type f -links +1
Ошибка "No space left on device"
Если система сообщает о нехватке места из-за логов:
- Очистите логи в аварийном режиме:
# Переключиться в single-user mode
sudo systemctl rescue
# Принудительно очистить логи
sudo journalctl --vacuum-size=100M
- Или очистите через временное перенаправление:
sudo journalctl --vacuum-size=100M 2>/dev/null || true
Лучшие практики
- Регулярный мониторинг: Раз в неделю проверяйте размер логов.
- Сезонная настройка: Увеличивайте лимиты в периоды высокой нагрузки.
- Резервное копирование: Перед массовой очисткой экспортируйте важные логи.
- Документирование: Записывайте все изменения конфигурации.
- Тестирование: Проверяйте команды очистки на тестовой среде перед использованием в production.
Заключение
Правильное управление логами systemd-journald — важная часть администрирования Linux систем. Регулярная очистка и настройка автоматического обслуживания помогут предотвратить проблемы с нехваткой дискового пространства и сохранить систему в оптимальном состоянии. Используйте методы, описанные в этом руководстве, для поддержания баланса между доступностью исторических данных и эффективным использованием ресурсов.