Назад | Перейти на главную страницу

Как logrotate работает с copytruncate?

Я понимаю, что 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 для обсуждения ротации журналов.