У меня на запущенных заданиях flink было oop с пряжей в качестве менеджера ресурсов, где журналы TaskManager записываются в файл taskmanager.out на регулярной основе. Я хочу вращать журналы всякий раз, когда размер журналов превышает 50 МБ, и тот же файл не изменяется (изменение файла привело к тому, что приложение cra sh). Я попробовал следующие настройки logrotate, чтобы исправить смещение log-rotate, но, похоже, оно показывает ошибочное поведение
/var/log/hadoop-yarn/containers/application_1586151187384_0057/container_1586151187384_0057_01_000002/taskmanager.out {
missingok
rotate 0
size 50M
copytruncate
}
В соответствии с условием, он не должен сохранять новый файл, сформированный из поворота. Размер файла должен быть> 50 МБ, чтобы убедиться, что он вращается, и он не должен заменять текущий файл, а скорее копировать и затем обрезать. Я пробовал это и похоже, что при каждом повороте у меня есть повернутый файл, добавляемый к содержимому более старого файла, а также размеры журнала не уменьшаются, что противоречит ожидаемым результатам.
Input Command: cat /etc/logrotate.d/mylogrotatefile
/var/log/.../taskmanager.out {
missingok
rotate 0
size 50M
copytruncate
}
Input Command: du * -sh
4.0K taskmanager.err
16M taskmanager.out
Input Command: logrotate --debug /etc/logrotate.d/mylogrotatefile
reading config file /etc/logrotate.d/mylogrotatefile
reading config info for /var/log/....0057_01_000002/taskmanager.out
Handling 1 logs
rotating pattern: /var/log/....0057_01_000002/taskmanager.out 52428800 bytes (no old logs will be kept)
empty log files are rotated, old logs are removed
considering log /var/log/....0057_01_000002/taskmanager.out
log does not need rotating
Input Command: du * -sh
4.0K taskmanager.err
32M taskmanager.out
Через некоторое время, когда размер файла достиг 50 МБ, поведение завершается неожиданно.
Input Command: du * -sh
4.0K taskmanager.err
81M taskmanager.out
Input Command: ls -ls
total 82948
4 -rw-r--r-- 1 yarn yarn 698 Apr 15 20:07 taskmanager.err
82944 -rw-r--r-- 1 yarn yarn 52432238 Apr 15 20:32 taskmanager.out
Input Command: logrotate -d /etc/logrotate.d/mylogrotatefile
reading config file /etc/logrotate.d/mylogrotatefile
reading config info for /var/log/....0057_01_000002/taskmanager.out
Handling 1 logs
rotating pattern: /var/log/....0057_01_000002/taskmanager.out 52428800 bytes (no old logs will be kept)
empty log files are rotated, old logs are removed
considering log /var/log/....0057_01_000002/taskmanager.out
log needs rotating
rotating log /var/log/....0057_01_000002/taskmanager.out, log->rotateCount is 0
dateext suffix '-20200415'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/....0057_01_000002/taskmanager.out.1 to /var/log/....0057_01_000002/taskmanager.out.2 (rotatecount 1, logstart 1, i 1),
renaming /var/log/....0057_01_000002/taskmanager.out.0 to /var/log/....0057_01_000002/taskmanager.out.1 (rotatecount 1, logstart 1, i 0),
copying /var/log/....0057_01_000002/taskmanager.out to /var/log/....0057_01_000002/taskmanager.out.1
truncating /var/log/....0057_01_000002/taskmanager.out
removing old log /var/log/....0057_01_000002/taskmanager.out.2
Input Command: logrotate /etc/logrotate.d/mylogrotatefile
input: ls -ls
total 54088
4 -rw-r--r-- 1 yarn yarn 698 Apr 15 20:07 taskmanager.err
96 -rw-r--r-- 1 yarn yarn 55344534 Apr 15 20:34 taskmanager.out
53988 -rw-r--r-- 1 yarn yarn 55282411 Apr 15 20:34 taskmanager.out.1
Input Command: du * -sh
4.0K taskmanager.err
480K taskmanager.out
53M taskmanager.out.1
Input Command: du * -sh
4.0K taskmanager.err
2.0M taskmanager.out
53M taskmanager.out.1
Input Command: logrotate -d /etc/logrotate.d/mylogrotatefile
reading config file /etc/logrotate.d/mylogrotatefile
reading config info for /var/log/....0057_01_000002/taskmanager.out
Handling 1 logs
rotating pattern: /var/log/....0057_01_000002/taskmanager.out 52428800 bytes (no old logs will be kept)
empty log files are rotated, old logs are removed
considering log /var/log/....0057_01_000002/taskmanager.out
log needs rotating
rotating log /var/log/....0057_01_000002/taskmanager.out, log->rotateCount is 0
dateext suffix '-20200415'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/....0057_01_000002/taskmanager.out.1 to /var/log/....0057_01_000002/taskmanager.out.2 (rotatecount 1, logstart 1, i 1),
renaming /var/log/....0057_01_000002/taskmanager.out.0 to /var/log/....0057_01_000002/taskmanager.out.1 (rotatecount 1, logstart 1, i 0),
copying /var/log/....0057_01_000002/taskmanager.out to /var/log/....0057_01_000002/taskmanager.out.1
truncating /var/log/....0057_01_000002/taskmanager.out
removing old log /var/log/....0057_01_000002/taskmanager.out.2
Input Command: du * -sh
4.0K taskmanager.err
8.0M taskmanager.out
53M taskmanager.out.1
Input Command: logrotate /etc/logrotate.d/mylogrotatefile
Input Command: du * -sh
4.0K taskmanager.err
4.0K taskmanager.out
58M taskmanager.out.1
Input Command: ls -ls
total 59912
4 -rw-r--r-- 1 yarn yarn 698 Apr 15 20:07 taskmanager.err
1004 -rw-r--r-- 1 yarn yarn 60868154 Apr 15 20:38 taskmanager.out
58904 -rw-r--r-- 1 yarn yarn 60315992 Apr 15 20:38 taskmanager.out.1
Похоже, что при каждом повороте размер фактического файла журнала становится равным 0, а содержимое добавляется в новый файл taskmanager.out. 1 и новый файл никогда не усекается, и со временем он постоянно увеличивается в размере.
Input Command: truncate -s 0 taskmanager.out.1
input: du * -sh
4.0K taskmanager.err
2.0M taskmanager.out
0 taskmanager.out.1
Теперь еще более удивительно, когда новый файл был усечен с помощью команды truncate:
Input Command: truncate -s 0 taskmanager.out.1
Input Command: logrotate /etc/logrotate.d/mylogrotatefile
Input Command: du * -sh
4.0K taskmanager.err
80K taskmanager.out
63M taskmanager.out.1
Пожалуйста, исправьте меня, но, насколько я понимаю, новые журналы (taskmanager.out. 1) не должен был прийти к старому размеру, после того, как было запущено усечение с последующим logrotate.
Позже я тоже попробовал это
Input Command: rm taskmanager.out.1
Input Command: ls
taskmanager.err taskmanager.out
Input Command: du * -sh
4.0K taskmanager.err
2.0M taskmanager.out
Input Command: logrotate /etc/logrotate.d/mylogrotatefile
Input Command: du * -sh
4.0K taskmanager.err
112K taskmanager.out
75M taskmanager.out.1
Я также пробовал разные комбинации minsize, maxsize и rotate 1 в файле logrotate, но ничего не получалось, как ожидалось. Моя версия logrotate
version : logrotate 3.7.8
Я что-то упустил?