Linux ротация логов tomcat

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»).

Читайте также:  Install windows program linux

Мне привычнее перебирать файлы посредством 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=»$/thinning.log»

# Фиксируем время запуска процедуры прореживания файлов журналов.
echo >> $; echo «Thinning start at $(date +%Y-%m-%d/%H:%M)» | tee -a $

# Перебираем все файлы внутри заданной директории журналов:
cd «$«
for I in *
do

# Пропускаем файлы, в именах которых не обнаружено строки даты заданного формата.
[ $ -ne 0 -o «$» == «» ] &&

# Фильтруем файлы, отбирая те, в именах которых даты ближе заданного к текущей и точно не меньше одного месяца (перестраховываемся), а остальные подавая на удаление.
if [ $(date +%s -d «$«) -gt $(date +%s -d «$ day ago») -o $(date +%s -d «$«) -gt $(date +%s -d «1 month ago») ]
then

# (ветвь удаления старых журналов)
else

# Удаляем устаревшие файлы
echo «removing: $/$» | tee -a $
rm —force «$/$»
fi
done

Запускать архивацию и прореживание журналов можно с разной периодичностью — лично я делаю это раз в три-четыре дня, ближе к утру воскресенья и среды:

Итак, в два простых этапа мы привели именование файлов журналов событий «Tomcat» к более единообразному виду и ограничили их разрастание определённым временным лимитом.

Обращаю внимание на то, что всего этого можно было достигнуть путём корректировки конфигурационных файлов компонентов «Tomcat», а выбранный путь решения задачи обусловлен отсутствием возможности изменять настройки приложений в чужой зоне ответственности.

P.S. Для сведения — мне сказали, что обе задачи можно реализовать через функционал системной утилиты «logrotate», но наверное я тупой, потому что за пару дней чтения инструкции и перебора вариантов настроек у меня ровным счётом ничего не получилось.

[ уже посетило: 5003 ] [ интересно! / нет ]

Поблагодарить автора ( сделайте свой денежный вклад в хорошее настроение )

Источник

Linux ротация логов tomcat

Помогите пожалуйста сделать ротацию логов tomcat.

Проблема в том что лог stdout растёт до неимоверных размеров и пишется он в один файл, и начинает писать в другой файл только при перезапуске томката что очень неудобно, так как файл вырастает до нескольких гигобайт.

но ситуация не поменялась stdout всё равно пишется в один файл.

Читайте также:  Mac os run docker daemon

может ктото сталкивался с подобной проблемой?

log4j.properties у меня такой

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=$/logs/catalina.
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=$/logs/localhost.
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=$/logs/manager.
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=$/logs/host-manager.
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

Ответить | Правка | Cообщить модератору

Оглавление

  • Вопрос по ротации логов Apache Tomcat, Andrey Mitrofanov, 12:09 , 29-Июл-15, ( 1 )
    • Вопрос по ротации логов Apache Tomcat, KPD, 12:27 , 29-Июл-15, ( 2 )
    • Вопрос по ротации логов Apache Tomcat, KPD, 12:45 , 29-Июл-15, ( 3 )
      • Вопрос по ротации логов Apache Tomcat, fail, 13:33 , 29-Июл-15, ( 4 )
        • Вопрос по ротации логов Apache Tomcat, KPD, 14:52 , 29-Июл-15, ( 5 )
          • Вопрос по ротации логов Apache Tomcat, eRIC, 16:59 , 29-Июл-15, ( 6 )
            • Вопрос по ротации логов Apache Tomcat, KPD, 09:11 , 30-Июл-15, ( 7 )
              • Вопрос по ротации логов Apache Tomcat, eRIC, 09:53 , 30-Июл-15, ( 8 )
                • Вопрос по ротации логов Apache Tomcat, KPD, 11:42 , 30-Июл-15, ( 9 )

Сообщения по теме [Сортировка по времени | RSS]

> Помогите пожалуйста сделать ротацию логов tomcat.
> Проблема в том что лог stdout растёт до неимоверных размеров и пишется
> он в один файл, и начинает писать в другой файл только

1 . «Вопрос по ротации логов Apache Tomcat» + / –
Сообщение от Andrey Mitrofanov on 29-Июл-15, 12:09
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2 . «Вопрос по ротации логов Apache Tomcat» + / –
Сообщение от KPD (ok) on 29-Июл-15, 12:27

>> Помогите пожалуйста сделать ротацию логов tomcat.
>> Проблема в том что лог stdout растёт до неимоверных размеров и пишется
>> он в один файл, и начинает писать в другой файл только
> Да, сколько ж http:/openforum/vsluhforumID9/10023.html#1 вас.
> :
> http://smarden.org/runit/runscripts.html#tomcat
> http://smarden.org/runit/faq.html#createlog
> duckduckgo.com/?q=tomcat+log4j+to+stderr

У меня томкат на Windows

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3 . «Вопрос по ротации логов Apache Tomcat» + / –
Сообщение от KPD (ok) on 29-Июл-15, 12:45

>> Помогите пожалуйста сделать ротацию логов tomcat.
>> Проблема в том что лог stdout растёт до неимоверных размеров и пишется
>> он в один файл, и начинает писать в другой файл только
> Да, сколько ж http:/openforum/vsluhforumID9/10023.html#1 вас.
> :
> http://smarden.org/runit/runscripts.html#tomcat
> http://smarden.org/runit/faq.html#createlog
> duckduckgo.com/?q=tomcat+log4j+to+stderr

Что могут значит такие варнинго в логах?

log4j:WARN No such property [maxFileSize] in org.apache.log4j.DailyRollingFileAppender.
log4j:WARN No such property [maxFileSize] in org.apache.log4j.ConsoleAppender.
log4j:WARN No such property [maxRollingFileCount] in org.apache.log4j.ConsoleAppender.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4 . «Вопрос по ротации логов Apache Tomcat» + / –
Сообщение от fail on 29-Июл-15, 13:33

> Что могут значит такие варнинго в логах?
> log4j:WARN No such property [maxFileSize] in org.apache.log4j.DailyRollingFileAppender.
> log4j:WARN No such property [maxFileSize] in org.apache.log4j.ConsoleAppender.
> log4j:WARN No such property [maxRollingFileCount] in org.apache.log4j.ConsoleAppender.

нет таких свойтсв в классе(ах)
maxFileSize
&
maxRollingFileCount
смотреть в доках(по соответсвующим версиям log4j & tomcat) внимательно, может они в по другому называются(, чуствительность к регистру и т.д.)

пример, вот здесь верхний регистр в первой букве Max
>>log4j.appender.CONSOLE.MaxFileSize=1024KB

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5 . «Вопрос по ротации логов Apache Tomcat» + / –
Сообщение от KPD (ok) on 29-Июл-15, 14:52

>[оверквотинг удален]
>> log4j:WARN No such property [maxFileSize] in org.apache.log4j.ConsoleAppender.
>> log4j:WARN No such property [maxRollingFileCount] in org.apache.log4j.ConsoleAppender.
> нет таких свойтсв в классе(ах)
> maxFileSize
> &
> maxRollingFileCount
> смотреть в доках(по соответсвующим версиям log4j & tomcat) внимательно, может они в
> по другому называются(, чуствительность к регистру и т.д.)
> пример, вот здесь верхний регистр в первой букве Max
>>>log4j.appender.CONSOLE.MaxFileSize=1024KB

Может есть более простой способ сделать ротацию этого лога чем log4, совсем не пойму где найти документацию именно к моей версии томката и log4j

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6 . «Вопрос по ротации логов Apache Tomcat» + / –
Сообщение от eRIC (ok) on 29-Июл-15, 16:59

> Может есть более простой способ сделать ротацию этого лога чем log4, совсем
> не пойму где найти документацию именно к моей версии томката и
> log4j

логированием tomcat занимается или ваше приложение в томкате?

log4j полностью название jar файла скиньте(если ваше приложение то jar в webapps/имя_приложения/WEB-INF/lib/), в ней и будет версия библиотеки и по этой версии можно будет в документации самого log4j посмотреть и поправить

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7 . «Вопрос по ротации логов Apache Tomcat» + / –
Сообщение от KPD (ok) on 30-Июл-15, 09:11

>> Может есть более простой способ сделать ротацию этого лога чем log4, совсем
>> не пойму где найти документацию именно к моей версии томката и
>> log4j
> логированием tomcat занимается или ваше приложение в томкате?
> log4j полностью название jar файла скиньте(если ваше приложение то jar в webapps/имя_приложения/WEB-INF/lib/),
> в ней и будет версия библиотеки и по этой версии можно
> будет в документации самого log4j посмотреть и поправить

Томкат. Никакого приложения нет. Томкат просто перебрасывает траффик с одного порта на другой.

Томкат у меня версии 6.0.13
Log4j 1.2.17

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8 . «Вопрос по ротации логов Apache Tomcat» + / –
Сообщение от eRIC (ok) on 30-Июл-15, 09:53

> Томкат. Никакого приложения нет. Томкат просто перебрасывает траффик с одного порта на
> другой.
> Томкат у меня версии 6.0.13
> Log4j 1.2.17

tomcat лочит файл когда записывает в него и чтобы произвести ротацию требуется перезапустить tomcat или отправить сигнал, чтобы он свободил lock на файл. в UNIX ротация логов выполяется с logrotate

Источник

Читайте также:  Беспроводная сеть нет подключения windows 10 как исправить
Оцените статью