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