Управление логами в среде Linux |
---|
В качестве краткого обзора. Операционная система: SlackWare 13.1
Использование Logrotate
В стандартном режиме (с использованием конфигурационного файла /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, возник ряд проблем. Кратко:
- При конфигурировании необходимо обязательно указывать дополнительные опции. Иначе, ротатор потеряет возможность архивации и не создаст свой конфиг и его придется создавать вручную в *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, что вызывает минимум трудностей в использовании в этой среде. Конфигурационный файл ротатора, что естественно, очень напоминает ньюсислоговский, кроме того, что в него нельзя включить флаги по включению/отключения создания чистого лог файла, включения/выключения архивирования и так далее. Можно было бы считать это недостатком, однако программа поставляется в виде одного единственного исходника на С, который можно изменить по своему усмотрению.
После компиляции не произошло архивирования, что легко решилось изменением параметра директивы
#define C_ARCHIVER_BINARY
Кроме того, программа имеет следующие преимущества:
- Возможность использования времени формата времени 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.
Автор: pilgrim
Под редакцией: bormant
- Обсуждаем на форуме -