Управление логами в среде Linux

В качестве краткого обзора. Операционная система: SlackWare 13.1

Использование Logrotate

Logrotate – приложение, разработанное для облегчения управления файлами журналов (лог-файлами) о ведении деятельности различных программ. Особенно Logrotate (далее – ротатор) полезен там, где создается большое количество лог-файлов. Утилита позволяет в автоматическом режиме архивировать, удалять, очищать и отправлять на e-mail лог-файлы. Этот процесс обычно называется ротацией лог файлов.

В стандартном режиме (с использованием конфигурационного файла /etc/logrotate.conf) Logrotate выполняет ротацию в ежедневном, еженедельном и ежемесячном режиме. Запуск ротатора происходит минимум ежедневно в автоматическом режиме с помощью планировщика Crontab, о чем говорит содержимое файла /etc/cron.daily/logrotate:

#!/bin/sh
 
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

В этот момент происходит считывание файла настроек ротатора, в котором описаны параметры ротации по умолчанию. Кроме этих параметров здесь присутствует строка include /etc/logrotate.d, – папка, в которой находятся индивидуальные файлы настроек ротации для отдельно взятой программы в системе. Содержимое этих файлов перекрывает общие настройки ротации файла /etc/logrotate.conf. Данный подход является безусловно удобным, – существует возможность запускать ротацию индивидуально для каждой программы, не перегружая основной конфиг ротатора.

Имена файлов в директории /etc/logrotate.d могут быть произвольными, чаще отражают название самой логируемой программы. Пусть в системе у нас присутствует программа Motiw, которая в процессе работы ведет системный журнал, создавая файл /var/log/motiw/motiw.log. Данный файл, может вырасти до больших размеров, что определенно будет создавать трудности при его чтении, а также – перегрузке системы, ведь при новой записи в такой файл, система должна будет его открыть. Наша задача – каждый день резать такой файл на части, архивировать каждую часть, а на четвертый день, удалять самый старый архив (созданный три дня назад). Рассмотрим, содержание файла /etc/logrotate.d/motiw:

/var/log/motiw/*.log {
    daily
    missingok
    rotate 3
    compress
    notifempty
    create    
    sharedscripts
    postrotate
        echo  "произошли изменения в ротации логов" >> /home/user/motiw.txt
    endscript
}

Итак, планировщик, благодаря содержимому /etc/cron.daily/logrotate ежедневно запускает ротатор. В первую очередь считываются настройки /etc/logrotate.conf, затем содержимое файлов директории /etc/logrotate.d/, в том числе – /etc/logrotate.d/motiw, где сказано:

/var/log/motiw/*.log #заглянуть в директорию /var/log/motiw/, найти там все файлы по маске *.log
daily #ежедневно выполнять нижеследующие операции (в данном случае параметр daily соответствует ежедневному запуску планировщика, а значит – все нижеследующее должно выполнится в момент каждого запуска ротатора)
missingok	 #Параметр, не позволяющий зависнуть ротатору или вызвать ошибку, если по каким-то причинам лог-файл motiw.log отсутствует
rotate 3	 #ротация логов будет производится 3 раза, то есть при первом запуске (день первый) будет создан архив /var/log/motiw/motiw.log.1.gz из имеющегося лога. При втором запуске (день второй) произойдет непосредственно ротация – первый архив станет вторым	 (/var/log/motiw/motiw.log.2.gz), а	первым архивом станет содержимое исходного лог файла. На третьем круге (день третий)- второй архив, станет третьим, первый – вторым, первым – исходный лог. На четвертый день третий архив не переименовывается в четвертый, а удаляется. Ротация имен архивов повторяется. Другими словами, показатель rotate, указывает сколько дней (при указании ежедневной ротации) нужно хранить архивы логов.
compress	 #при ротации сжимать (архивировать) содержимое лог-файла
notifempty	 #не производить ротацию, если исходный файл пуст (объем 0 KiB)
create	 #исходный файл лога удаляется после архивации, директива create создает пустой файл /var/log/motiw/motiw.log с такими же правами на доступ, каким был предыдущий лог-файл.
sharedscripts	 #скрипт postrotate выполнится только один раз
postrotate	 #закрывающая директива endscript. Позволяет выполнять любые команды оболочки после выполнения ротации.

По сути ротатор Logrotate обладает впечатляющим набором возможностей. Ротацию логов можно производить еженедельно – директива weekly, ежемесячно – директива monthly. Тогда при сочетании weekly и rotate 4 можно будет хранить архивированные логи только за прошедший месяц. А при сочетании monthly и rotate 12 ротация будет происходит один раз в месяц (1-го числа), создавая архив месячного содержимого, а по истечении года с момента запуска, начнет удалять устаревшие архивы, начиная с первого созданного год назад.

Нет ограничений по содержимому лог-файлов, их объему и имени, ротатор, с помощью gzip заархивирует все, что архивируется. А архивируется, как известно, все. Достаточно указать маску /var/log/motiw/*. Благодаря этой строке можно провести избранную архивацию лог-файлов, это удобно, если в директории хранятся логи разных программ или разного содержания. Кроме того, лог-файлы можно вообще не архивировать или архивировать программой отличной от gzip (директива compresscmd).

Директива create по умолчанию создает пустой лог файл с теми же правами на доступ, что и предыдущий, но с помощью дополнительных опций данной директивы можно изменить ситуацию – create 740 motiw motiw. (create [режим владелец группа]). Если нужно запускать ротатор чаще, чем раз в день, достаточно прописать файл запуска в директорию /etc/cron.d/. Существует возможность ротации логов в зависимости от объема исходного лог-файла. Для чего существует директива size=5M. В данном случае, ротация логов, произойдет, если объем лог-файла превысит 5 мебайт.

Иногда, недопустимо удаление исходного лог-файла перед его архивацией. В таком случае полезна директива copytruncate. Ротатор поддерживает отсылку только что созданного архива на указанный в директиве mail user@mail.ru адрес (в сочетании с директивой mailfirst) либо – последнего архива, перед его удалением (умолчание). Стоит отметить, что это лишь минимальный набор всех возможностей Logrotate.

После настройки ротатора рекомендуется запустить его с ключом -d (режим отладки):

logrotate -d /etc/logrotate.d/motiw

Если диагностика прошла успешно, запускаем ротатор на постоянную работу (ключ v выведет на экран сообщения о проделываемых операциях, а f – форсирует ротатор, то есть указанные директивы выполнятся в момент запуска):

logrotate -v -f /etc/logrotate.d/motiw

Использование Newsyslog

Ротатор логов из среды *BSD, где установлен по умолчанию. При установке в среде Linux, возник ряд проблем. Кратко:

  1. При конфигурировании необходимо обязательно указывать дополнительные опции. Иначе, ротатор потеряет возможность архивации и не создаст свой конфиг и его придется создавать вручную в *BSD стандарте /usr/local/etc/newsyslog.conf.
  2. Даже при явном указании на создание pid файла, последний не создается. Видимо, проблема в требовании стандартной *BSD директории /etc/rc.d/. На работе программы это никак не отражается, если постоянно запускать программу из-под крона с форсированием, кроме постоянных сообщений о том, что не найден pid файл. Однако, встает вопрос о накоплении зависших процессов.
  3. Исходники с сайта производителя не содержат в своем составе man страниц (в *BSD они входят в пакет поставки дистрибутива), потому перед сборкой, нужно либо положить 2 файла мануалов в 5-ый и 8-ой блоки man-библиотеки Linux, либо удалить напоминание о них в файле /usr/src/newsyslog-1.1/Makefile после конфигурирования. Если этого не проделать, сборка вылетает с Error 1.
  4. Неадекватно отношение ротатора к собственному конфигу /etc/newsyslog.conf. Иногда, он упрямо не хочет понимать форматы времени в конфе. Ни формата ISO-8601, ни *BSD-шного.

Единственным преимуществом, в сравнении с Logrotate, можно считать возможность складирование логов в субдиректорию и дописывание строки времени создания архива вовнутрь свернутого лога, хотя при несложных манипуляциях это легко можно проделать используя Logrotate.

Использование Logpipe

Этот ротатор создан на основе Newsyslog, но с адекватной поддержкой линуксового epoll, что вызывает минимум трудностей в использовании в этой среде. Конфигурационный файл ротатора, что естественно, очень напоминает ньюсислоговский, кроме того, что в него нельзя включить флаги по включению/отключения создания чистого лог файла, включения/выключения архивирования и так далее. Можно было бы считать это недостатком, однако программа поставляется в виде одного единственного исходника на С, который можно изменить по своему усмотрению.

После компиляции не произошло архивирования, что легко решилось изменением параметра директивы

#define C_ARCHIVER_BINARY

Кроме того, программа имеет следующие преимущества:

  1. Возможность использования времени формата времени ISO-8601, где можно использовать точное время архивации. В тесте я использовал @20101025T202200 – 25 октября 2010 года в 20:22:00.
  2. Для регулярной ротации можно использовать формат $DWM (день, неделя, месяц);
  3. После запуска, ротатор обретает режим демона, что позволяет его использовать без вмешательства планировщика. (Объем памяти 0,1%);
  4. Возможность группировки абсолютно независимых ротаций, запуская более, чем один процесс.
  5. Ротатор подключаясь, к потоку данных не прерывает его (опция по умолчанию), отрезая последнюю часть от исходного лог-файла.
  6. Существует возможность ротации при переполнении лога.

Замеченные недостатки:

  1. При выставлении директивы на объем содержимого, если объем лог-файла больше числа, указанного в директиве конфига, при запуске, ротатор не режет его, а начисто сносит содержимое;
  2. Ротатор запускается по шаблону logpipe logfile configfile (logpipe /var/log/motiw/motiw.log /etc/logpipe.conf). Таким образом, в одном конфиг файле можно указать только один лог-файл, соответственно.

Другие программы

Следующий ряд программ не тестировался, но описание которых заслуживает внимания:

  1. Cronolog. Ротатор, который умеет создавать папки для архивов, по дате среза (/var/log/motiw/2010/10/25/motiw.log)
  2. Rsyslog. Syslog демон с возможностью хранения логов на удаленном сервере в MySQL и с web-интерфейсом на PHP для выборки информации из логов. Позволяет гибко определять формат хранимых логов.
  3. Logrotator. Программа для периодического “обрезания” лог файлов и их сохранения в сжатом виде. Режимы работы: mothly, weekly, daily, bysize and byday.
  4. Securesyslog. Syslog c шифрованием данных, используется криптографический протокол PEO-1.

Автор: pilgrim
Под редакцией: bormant
- Обсуждаем на форуме -

Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:logrotate (generated for current page)