Я понимаю, что copytruncate - не идеальная установка, но это те карты, с которыми я имею дело ...
У меня есть служба, которая отслеживает данные из journalctl и передает их в файл.
Настройка для поворота файла ...
/var/log/xxxxxx/xxxxxx.log {
size 100M
copytruncate
rotate 5
compress
compresscmd /bin/xz
}
Когда я смотрю на местоположение / var / log / xxxxxx /, я вижу, что xxxxxx.log занимает 8 ГБ, но я также вижу xxxxxx.log-20181125.gz и так далее ... что означает, что происходит ротация.
У меня вопрос: не должен ли основной xxxxxx.log быть на 100 МБ, почему он 8 ГБ? А также, если это 8 ГБ, которые вызывают срабатывание правила logrotate, означает ли это, что он также постоянно пытается обработать этот файл размером 8 ГБ, так что ресурсы по существу расходуются впустую?
ОБНОВИТЬ Есть сервис, который запускается: /bin/sh -c '/bin/journalctl --since="5 minutes ago" --no-tail --follow --unit="xxxxxx*.service" >> /var/log/xxxxxx/xxxxxx.log 2>&1'
При беге logrotate -v /etc/logrotate.d/xxxxxx
logrotate указывает, что он усек файл, но на самом деле это не так. Я остановил службу и снова запустил ее вручную, и она сработала.
Запуск: CentOS Linux версии 7.5.1804 (Core)
Обнаружил проблему ... Итак, я настроил свою систему по этой ссылке: https://github.com/dcos/dcos-docs/blob/master/1.9/monitoring/logging/aggregating/elk.md
Обратите внимание здесь ...
...
-u dcos-logrotate-master.service \
> /var/log/dcos/dcos.log 2>&1'
ExecStartPre=/usr/bin/journalctl
Отсутствует>. С тех пор их документы были исправлены. Но поскольку я сделал этот шаг один раз, когда впервые установил, проблема была скрыта, пока мы не заметили, что журналы растут, а не усекаются ...
Попробуйте запустить такой инструмент, как wc
чтобы узнать, сколько данных находится в файле. Вы можете получить разреженный файл со следующей записью в позиции файла сразу после позиции, где был файл, когда он был усечен, и ничего до этого. Некоторые службы сохраняют свою позицию в файле и пишут в этой позиции. Это не работает при использовании copytruncate
чтобы повернуть файл журнала.
Некоторые приложения повторно открывают свои файлы при отправке сигнала, и обычно logrotate разрешает перемещать и воссоздавать файл, поскольку данные журнала будут продолжать записываться в файл журнала, пока он не будет повторно открыт. Использовать delaycompress
при использовании этого метода. Спецификация logrotation для демона syslog является хорошим примером этого.
См. Страницу руководства по logrotate для обсуждения ротации журналов.