| |
— | wiki:articles:logrotate [10/01/2014 12:16] (текущий) – создано - внешнее изменение 127.0.0.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 "произошли изменения в ротации логов" >> /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 | - Обсуждаем на форуме -]] |
| |