Tomcat + Logrotate ( Организация ротации журналов событий «Apache Tomcat» внешним инструментом. )
23 июня 2017 (обновлено 22 января 2018)
OS: Linux Debian 9, Linux Ubuntu 16 LTS.
Applications: Logrotate и BASH.
Задача: организация высыпающихся из web-сервера и контейнеризатора «Tomcat (Catalina)» журнальных файлов, не затрагивая при этом конфигурацию такового.
По моим наблюдениям разработчики и сопровожденцы web-приложений на «Java», созданных для запуска в контейнерах «Tomcat», весьма беззаботны и настройку параметров нарезки и ротации файлов журналов событий не практикуют вообще. В результате, через полгода-год после начала эксплуатации сервиса в директории журналов скапливается мешанина из тысяч файлов от несущего сервера «Tomcat», менеджера компонентов, контейнеризатора, а также от каждого контейнера по отдельности по состоянию и событиям доступа пользователей. Упорядочим их, разделив работу на два этапа.
Настраиваем нарезку журнала запуска «Tomcat».
Чаще всего подсистему запуска «Tomcat»-а настраивают так, что сообщения этого этапа выводятся в определяемый переменной окружения «$CATALINA_OUT» специальный журнальный файл, называемый как-то вроде «console.log» или «catalina.out». В него много чего вываливается и он разрастается бесконтрольно, в отличии от файлов журналов событий инициируемых уже внутри самого «Tomcat»-а. Для начала наладим его ротацию по аналогии с соседними журналами, для чего натравим на него системное средство «Logrotate».
Есть две методики нарезания журналов на куски: по временным диапазонам и предельному размеру файла. Лично я стараюсь использовать второй способ, из соображений более просто просчитываемого расхода файлового пространства. Однако почти во всех встречающихся мне инсталляциях «Tomcat» журналы уже нарезаются на суточные сегменты в соответствии с настройками «по умолчанию», так что выбирать не приходится — тоже будем усекать файлы ежедневно.
Создаем конфигурационный файл ротации журнала событий запуска «Tomcat»:
# Перечень подлежащих нарезке и ротации журналов.
/var/log/tomcat/catalina.out /var/log/tomcat/console.log <
# Указываем производить ротацию журнала ежедневно.
daily
# Количество хранимых страниц журнала (один месяц, по файлу на день).
rotate 30
# Велим не считать ошибкой отсутствие файла.
missingok
# Ничего не делаем, если файл журнала пуст.
notifempty
# «Tomcat» логи не сжимает, ну и мы не будем делать этого.
nocompress
# Добавляем к имени файла архива журнала дату («по умолчанию» формат «-YYYYMMDD»).
dateext
# Корректируем формат подставляемой даты, приводя её к принятому в «Tomcat».
dateformat .%Y-%m-%d
# Указываем копировать данные журнала в архивный и зачищать действующий.
# (это не требует перезапуска приложения для перехода на новый файл)
copytruncate
# Указываем пользователя, от имени которого мы манипулируем файлами журналов.
su tomcat tomcat
>
Проверяем корректность конфигурационного файла:
Здесь мы сделали малое из задуманного — привели к единообразному для всех «Tomcat»-овских журналов формату имени один или два выбивающихся из ряда вон.
Налаживаем ротацию журналов «Tomcat».
Вторая и основная часть задачи заключается в аккуратном удалении старых журналов событий и попутном архивировании оставляемых на хранение.
Разумеется, проще всего было бы опираться на «метки» времени создания или изменения файла, задаваемые операционной системой, но они могут быть изменены уже после последней записи приложением в журнал — например при перемещении набора журналов в новое место файловой системы или даже профилактического изменения прав доступа, не говоря уже о случайной корректировке в процессе изучения содержимого. Потому, учитывая некоторую нестабильность свойства метки времени самого файла, я предпочитаю использовать дату указанную непосредственно в имени файла журнала, задаваемом приложением при его создании (именно потому ранее при настройке утилиты «Logrotate» мы подгоняли вид указываемой даты под принятый в «Apache Tomcat»).
Мне привычнее перебирать файлы посредством BASH-скрипта:
# # Прореживаем журналы, удаляя всё старее заданной даты, архивируя остальное и незадействованное. # #
# # Опираемся на имена файлов, содержащие даты в формате «YYYY-MM-DD», а не на время создания таковых! # #
# Проверяем корректность вводных.
if [ «$(ls -d $<1>)» == «» -o «$(echo $ <2>| grep -E ‘^2+$’)» == «» ]; then
echo «This is a self-made script thinning and archiving event logs like Apache Tomcat server.»
echo «Usage: $(basename $0) \»/PATH/TO/LOGS\» \»DAY AGE\»»
echo «(sample: $(basename $0) /var/lib/tomcat/logs 180)»
exit 1
fi
# Определяем набор переменных.
DPATH=$<1>
AGE=$<2>
LOG=»$
# Фиксируем время запуска процедуры прореживания файлов журналов.
echo >> $
# Перебираем все файлы внутри заданной директории журналов:
cd «$
for I in *
do
# Пропускаем файлы, в именах которых не обнаружено строки даты заданного формата.
[ $ >-ne 0 -o «$
# Фильтруем файлы, отбирая те, в именах которых даты ближе заданного к текущей и точно не меньше одного месяца (перестраховываемся), а остальные подавая на удаление.
if [ $(date +%s -d «$
then
# (ветвь удаления старых журналов)
else
# Удаляем устаревшие файлы
echo «removing: $
rm —force «$
fi
done
Запускать архивацию и прореживание журналов можно с разной периодичностью — лично я делаю это раз в три-четыре дня, ближе к утру воскресенья и среды:
Итак, в два простых этапа мы привели именование файлов журналов событий «Tomcat» к более единообразному виду и ограничили их разрастание определённым временным лимитом.
Обращаю внимание на то, что всего этого можно было достигнуть путём корректировки конфигурационных файлов компонентов «Tomcat», а выбранный путь решения задачи обусловлен отсутствием возможности изменять настройки приложений в чужой зоне ответственности.
P.S. Для сведения — мне сказали, что обе задачи можно реализовать через функционал системной утилиты «logrotate», но наверное я тупой, потому что за пару дней чтения инструкции и перебора вариантов настроек у меня ровным счётом ничего не получилось.
[ уже посетило: 5003 ] [ интересно! / нет ]
Поблагодарить автора ( сделайте свой денежный вклад в хорошее настроение )
Источник
Linux ротация логов tomcat
Помогите пожалуйста сделать ротацию логов tomcat.
Проблема в том что лог stdout растёт до неимоверных размеров и пишется он в один файл, и начинает писать в другой файл только при перезапуске томката что очень неудобно, так как файл вырастает до нескольких гигобайт.
но ситуация не поменялась stdout всё равно пишется в один файл.
может ктото сталкивался с подобной проблемой?
log4j.properties у меня такой
# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=$
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
log4j.appender.CATALINA.MaxFileSize=1024KB
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern=’.’yyyy-MM-dd’.log’
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File=$
log4j.appender.LOCALHOST.Append=true
log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.DatePattern=’.’yyyy-MM-dd’.log’
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File=$
log4j.appender.MANAGER.Append=true
log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.DatePattern=’.’yyyy-MM-dd’.log’
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.HOST-MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File=$
log4j.appender.HOST-MANAGER.Append=true
log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.DatePattern=’.’yyyy-MM-dd’.log’
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.MaxFileSize=1024KB
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=\
INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=\
INFO, HOST-MANAGER
Оглавление |
|
Сообщения по теме | [Сортировка по времени | RSS] |
1 . «Вопрос по ротации логов Apache Tomcat» | + / – | |
Сообщение от Andrey Mitrofanov on 29-Июл-15, 12:09 | ||
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору |
2 . «Вопрос по ротации логов Apache Tomcat» | + / – | |
Сообщение от KPD (ok) on 29-Июл-15, 12:27 | ||
У меня томкат на Windows | ||
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору |
3 . «Вопрос по ротации логов Apache Tomcat» | + / – | |
Сообщение от KPD (ok) on 29-Июл-15, 12:45 | ||
Что могут значит такие варнинго в логах? log4j:WARN No such property [maxFileSize] in org.apache.log4j.DailyRollingFileAppender. | ||
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору |
4 . «Вопрос по ротации логов Apache Tomcat» | + / – | |
Сообщение от fail on 29-Июл-15, 13:33 | ||
нет таких свойтсв в классе(ах) пример, вот здесь верхний регистр в первой букве Max | ||
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору |
5 . «Вопрос по ротации логов Apache Tomcat» | + / – | |
Сообщение от KPD (ok) on 29-Июл-15, 14:52 | ||
Может есть более простой способ сделать ротацию этого лога чем log4, совсем не пойму где найти документацию именно к моей версии томката и log4j | ||
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору |
6 . «Вопрос по ротации логов Apache Tomcat» | + / – | |
Сообщение от eRIC (ok) on 29-Июл-15, 16:59 | ||
логированием tomcat занимается или ваше приложение в томкате? log4j полностью название jar файла скиньте(если ваше приложение то jar в webapps/имя_приложения/WEB-INF/lib/), в ней и будет версия библиотеки и по этой версии можно будет в документации самого log4j посмотреть и поправить | ||
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору |
7 . «Вопрос по ротации логов Apache Tomcat» | + / – | |
Сообщение от KPD (ok) on 30-Июл-15, 09:11 | ||
Томкат. Никакого приложения нет. Томкат просто перебрасывает траффик с одного порта на другой. Томкат у меня версии 6.0.13 | ||
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору |
8 . «Вопрос по ротации логов Apache Tomcat» | + / – | |
Сообщение от eRIC (ok) on 30-Июл-15, 09:53 | ||
tomcat лочит файл когда записывает в него и чтобы произвести ротацию требуется перезапустить tomcat или отправить сигнал, чтобы он свободил lock на файл. в UNIX ротация логов выполяется с logrotate Источник |