Различия

Показаны различия между двумя версиями страницы.


wiki:articles:logrotate [10/01/2014 12:16] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +^**Управление логами в среде Linux**^
 +
 +//**В качестве краткого обзора. Операционная система: SlackWare 13.1**//
 +
 +=====Использование Logrotate=====
 +
 +<note tip>**Logrotate** – приложение, разработанное для облегчения управления файлами журналов (лог-файлами) о ведении деятельности различных программ. Особенно //Logrotate// (далее – ротатор) полезен там, где создается большое количество лог-файлов. Утилита позволяет в автоматическом режиме архивировать, удалять, очищать и отправлять на e-mail лог-файлы. Этот процесс обычно называется //ротацией лог файлов.//</note>
 +В стандартном режиме (с использованием конфигурационного файла ///etc/logrotate.conf//) //Logrotate// выполняет ротацию в ежедневном, еженедельном и ежемесячном режиме. Запуск ротатора происходит минимум ежедневно в автоматическом режиме с помощью планировщика //Crontab//, о чем говорит содержимое файла ///etc/cron.daily/logrotate//:
 +
 +<code>#!/bin/sh
 + 
 +test -x /usr/sbin/logrotate || exit 0
 +/usr/sbin/logrotate /etc/logrotate.conf</code>
 +
 +В этот момент происходит считывание файла настроек ротатора, в котором описаны параметры ротации по умолчанию. Кроме этих параметров здесь присутствует строка //include /etc/logrotate.d//, – папка, в которой находятся индивидуальные файлы настроек ротации для отдельно взятой программы в системе. Содержимое этих файлов перекрывает общие настройки ротации файла ///etc/logrotate.conf//. Данный подход является безусловно удобным, – существует возможность запускать ротацию индивидуально для каждой программы, не перегружая основной конфиг ротатора.
 +
 +Имена файлов в директории ///etc/logrotate.d// могут быть произвольными, чаще отражают название самой логируемой программы.
 +Пусть в системе у нас присутствует программа //Motiw//, которая в процессе работы ведет системный журнал, создавая файл ///var/log/motiw/motiw.log//. Данный файл, может вырасти до больших размеров, что определенно будет создавать трудности при его чтении, а также – перегрузке системы, ведь при новой записи в такой файл, система должна будет его открыть. Наша задача – каждый день резать такой файл на части, архивировать каждую часть, а на четвертый день, удалять самый старый архив (созданный три дня назад).
 +Рассмотрим, содержание файла ///etc/logrotate.d/motiw//:
 +
 +<code>/var/log/motiw/*.log {
 +    daily
 +    missingok
 +    rotate 3
 +    compress
 +    notifempty
 +    create    
 +    sharedscripts
 +    postrotate
 +        echo  "произошли изменения в ротации логов" &gt;&gt; /home/user/motiw.txt
 +    endscript
 +}</code>
 +
 +Итак, планировщик, благодаря содержимому ///etc/cron.daily/logrotate// ежедневно запускает ротатор. В первую очередь считываются настройки ///etc/logrotate.conf//, затем содержимое файлов директории ///etc/logrotate.d///, в том числе –// /etc/logrotate.d/motiw//, где сказано:
 +
 +<code>
 +/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. Позволяет выполнять любые команды оболочки после выполнения ротации.</code>
 +
 +По сути ротатор //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// (режим отладки):
 +
 +<code>logrotate -d /etc/logrotate.d/motiw</code>
 +Если диагностика прошла успешно, запускаем ротатор на постоянную работу (ключ //v// выведет на экран сообщения о проделываемых операциях, а //f// – форсирует ротатор, то есть указанные директивы выполнятся в момент запуска):
 +
 +<code>logrotate -v -f /etc/logrotate.d/motiw</code>
 +
 +=====Использование Newsyslog=====
 +
 +Ротатор логов из среды //*BSD//, где установлен по умолчанию. При установке в среде //Linux//, возник ряд проблем. Кратко:
 +
 +  - При конфигурировании необходимо обязательно указывать дополнительные опции. Иначе, ротатор потеряет возможность архивации и не создаст свой конфиг и его придется создавать вручную в //*BSD// стандарте ///usr/local/etc/newsyslog.conf//.
 +  - Даже при явном указании на создание //pid// файла, последний не создается. Видимо, проблема в требовании стандартной //*BSD// директории ///etc/rc.d///. На работе программы это никак не отражается, если постоянно запускать программу из-под крона с форсированием, кроме постоянных сообщений о том, что не найден //pid// файл. Однако, встает вопрос о накоплении зависших процессов.
 +  - Исходники с сайта производителя не содержат в своем составе //man// страниц (в //*BSD// они входят в пакет поставки дистрибутива), потому перед сборкой, нужно либо положить 2 файла мануалов в 5-ый и 8-ой блоки man-библиотеки //Linux//, либо удалить напоминание о них в файле ///usr/src/newsyslog-1.1/Makefile// после конфигурирования. Если этого не проделать, сборка вылетает с //Error 1//.
 +  - Неадекватно отношение ротатора к собственному конфигу ///etc/newsyslog.conf//. Иногда, он упрямо не хочет понимать форматы времени в конфе. Ни формата //ISO-8601//, ни *BSD-шного.
 +
 +Единственным **преимуществом**, в сравнении с //Logrotate//, можно считать возможность складирование логов в субдиректорию и дописывание строки времени создания архива вовнутрь свернутого лога, хотя при несложных манипуляциях это легко можно проделать используя //Logrotate//.
 +
 +======Использование Logpipe=====
 +
 +Этот ротатор создан на основе //Newsyslog//, но с адекватной поддержкой линуксового //epoll//, что вызывает минимум трудностей в использовании в этой среде. Конфигурационный файл ротатора, что естественно, очень напоминает ньюсислоговский, кроме того, что в него нельзя включить флаги по включению/отключения создания чистого лог файла, включения/выключения архивирования и так далее.
 +Можно было бы считать это недостатком, однако программа поставляется в виде одного единственного исходника на С, который можно изменить по своему усмотрению.
 +
 +После компиляции не произошло архивирования, что легко решилось изменением параметра директивы <code>#define C_ARCHIVER_BINARY</code>
 +Кроме того, программа имеет следующие преимущества:
 +  - Возможность использования времени формата времени //ISO-8601//, где можно использовать точное время архивации. В тесте я использовал //@20101025T202200 – 25 октября 2010 года в 20:22:00//.
 +  - Для регулярной ротации можно использовать формат //$DWM// (день, неделя, месяц);
 +  - После запуска, ротатор обретает режим демона, что позволяет его использовать без вмешательства планировщика. (Объем памяти 0,1%);
 +  - Возможность группировки абсолютно независимых ротаций, запуская более, чем один процесс.
 +  - Ротатор подключаясь, к потоку данных не прерывает его (опция по умолчанию), отрезая последнюю часть от исходного лог-файла.
 +  - Существует возможность ротации при переполнении лога.
 +
 +Замеченные **недостатки**:
 +  - При выставлении директивы на объем содержимого, если объем лог-файла больше числа, указанного в директиве конфига, при запуске, ротатор не режет его, а начисто сносит содержимое;
 +  - Ротатор запускается по шаблону //logpipe logfile configfile// (//logpipe /var/log/motiw/motiw.log /etc/logpipe.conf//). Таким образом, в одном конфиг файле можно указать только один лог-файл, соответственно.
 +
 +=====Другие программы=====
 +
 +Следующий ряд программ не тестировался, но описание которых заслуживает внимания:
 +  - **Cronolog**. Ротатор, который умеет создавать папки для архивов, по дате среза (///var/log/motiw/2010/10/25/motiw.log//)
 +  - **Rsyslog**. //Syslog// демон с возможностью хранения логов на удаленном сервере в //MySQL// и с web-интерфейсом на //PHP// для выборки информации из логов. Позволяет гибко определять формат хранимых логов.
 +  - **Logrotator**. Программа для периодического “обрезания” лог файлов и их сохранения в сжатом виде. Режимы работы: //mothly, weekly, daily, bysize and byday//.
 +  - **Securesyslog**. //Syslog// c шифрованием данных, используется криптографический протокол //PEO-1//.
 +
 +----
 +Автор: [[http://wiki.slackware.su/wiki:user:pilgrim | pilgrim]]\\
 +Под редакцией: [[http://wiki.slackware.su/wiki:user:bormant | bormant]]\\
 +[[http://slackware.su/forum/index.php/topic,426.0/topicseen.html | - Обсуждаем на форуме -]]  
  
Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:logrotate (generated for current page)