Вопрос или проблема
Содержимое /var/log на моей системе занимает 80% жесткого диска, и это вызывает много проблем.
Поэтому мне нужно очистить все старые содержимое, но по какой-то причине sudo rm -rf "*.gz"
не удаляет эти старые файлы. Также странно то, что я не на 100% уверен, что все журналируемые файлы, которые я вижу, на самом деле составляют такое огромное использование дискового пространства, с которым я сталкиваюсь. Почему инструмент анализа использования диска показывает более 600 ГБ использованного места в /var/log, когда я не могу найти такое использование с помощью ls?
Кроме того, в будущем я хотел бы убедиться, что этого больше не произойдет, поэтому я хочу изменить политику хранения или ротации журналов (как бы они ни назывались).
ИЗМЕНЕНИЕ: команда du
показывает мне, что syslog.1 занимает 597 ГБ. Как мне изменить способ работы какого-либо компонента, который создает этот журнал, чтобы избежать этого?
Edit2: Я думаю, что эта ссылка показывает истинную причину, но я не знаю, что с этим делать. https://www.mail-archive.com/[email protected]/msg386959.html
Начните с изучения журнала и выясните, что его заполняет. Затем решите эту проблему.
ВСЕ журналы в /var/log/, которые заканчиваются на .gz, являются старыми сжатыми журналами и могут быть удалены с помощью
sudo rm -rf *.gz
Это оставит текущие журналы нетронутыми. Они ДОЛЖНЫ заканчиваться на .log
. Если журнал, заканчивающийся на цифру, получает добавления строк (где он должен добавлять их в *.log
), вам нужно будет изучить программное обеспечение, которое добавляет в этот журнал. Ошибка будет в одном из конфигурационных файлов.
Убедитесь, что права доступа к *.log правильные. Это также может быть проблемой.
syslog
должен быть-rw-r----- 1 root adm
mysql.log
должен быть-rw-r----- 1 mysql adm
apache2
является каталогом и должен бытьdrwxr-x--- 2 root adm
Два файла в нем должны быть-rw-r----- 1 root adm
Если вам нужно очистить АКТИВНЫЕ журналы, не используйте rm
, а используйте > /var/log/{logfile}
. Это сохранит права доступа к файлу, очистит его и сохранит файл на диске.
Тем, кто интересуется этой темой, я предлагаю взглянуть на
Очистка журнала systemd
Вы можете безопасно удалить журналы старше X дней (например: 10 дней).
$ journalctl --vacuum-time=10d
или удалить журналы, чтобы оставаться ниже определенного предела хранения (например, 2 ГБ)
$ journalctl --vacuum-size=2G
Тем не менее, перед этим очищающим действием вы можете захотеть изучить свой журнал, чтобы понять, что его заполняет, и почему журналы не ротаются и автоматически не очищаются.
-
Для чтения файлов журнала:
journalctl --file /path/to/some/file.journal
-
Для очистки журнала: вы можете начать свой поиск с
/etc/cron.daily/logrotate
Ответ или решение
Для безопасной очистки архивных содержимого каталога /var/log
и изменения политики хранения логов, следуйте представленным шагам.
1. Определение корня проблемы
Первым делом, вам необходимо выяснить, что вызывает чрезмерное накопление логов. Вы уже заметили, что файл syslog.1
занимает 597 ГБ, что явно указывает на аномальную ситуацию. Логи могут накапливаться по причинам:
- Неправильно настроенная служба (например, служба, генерирующая сообщения об ошибках без ограничения).
- Отсутствие ротации логов, что обычно управляется с помощью
logrotate
или системного менеджераsystemd
.
2. Очистка существующих логов
Очищая каталоги логов, убедитесь, что вы удаляете только старые архивные данные. Использование команды:
sudo rm -rf *.gz
может быть неэффективным, если вы вызываете ее в неправильно настроенной директории; поэтому выполните её в каталоге /var/log
.
Если вы хотите очистить активные лог-файлы, примените команду:
> /var/log/syslog
Это сохранит права на файл и очистит его содержимое без удаления файла.
3. Проверка прав доступа к логам
Убедитесь, что права доступа к логам настроены верно. Например:
- Для
syslog
: должна быть-rw-r----- 1 root adm
- Для
mysql.log
:-rw-r----- 1 mysql adm
- Для каталога
apache2
:drwxr-x--- 2 root adm
Неправильные права доступа могут предотвратить корректную ротацию или отключить запись логов.
4. Изменение политики ротации логов (logrotate)
Политика ротации логов управляется файлом конфигурации /etc/logrotate.conf
и файлами в каталоге /etc/logrotate.d/
. Откройте основной файл для редактирования:
sudo nano /etc/logrotate.conf
Здесь можно настроить глобальные параметры, такие как период ротации (например, еженедельно), количество хранимых резервных копий и общие часы распределения. Например:
weekly
rotate 4
compress
delaycompress
missingok
notifempty
create 0640 root adm
Кроме этого, для индивидуальной настройки определенных логов, откройте соответствующие файлы в /etc/logrotate.d/
. Например, для rsyslog
, файл может выглядеть следующим образом:
/var/log/syslog
{
rotate 7
daily
compress
missingok
notifempty
create 0640 syslog adm
sharedscripts
postrotate
/usr/bin/systemctl reload rsyslog > /dev/null 2>&1 || true
endscript
}
5. Использование системного журнала (systemd journal)
Если ваша система использует systemd
, попробуйте следующие команды для очистки журнала:
sudo journalctl --vacuum-time=10d
sudo journalctl --vacuum-size=2G
Эти команды позволят вам очистить логи старше указанного времени или ограничить размер журнала до 2 ГБ.
6. Заключение
По мере применения указанных шагов, продолжайте следить за логами, чтобы гарантировать, что проблема не повторяется. Регулярная проверка состояния логов и их ротация могут избежать накопления данных и перерасхода дискового пространства. Не забудьте также исследовать службу или приложение, которое генерирует обширные логи, и исправить его конфигурацию, если это необходимо.
Если у вас возникнут дополнительные вопросы или потребуется насыщенная консультация, не стесняйтесь обращаться за помощью!