Logrotate freebsd. как настроить ротацию логов во freebsd

FreeBSD: настройка newsyslog для ротации логов

Если ведением логов занимается демон syslog, то их ротацией — утилита newsyslog.

Демон syslog работает постоянно, и запускается при старте системы. Утилита newsyslog — запускается по cron-у, раз в час — если не указано иначе:

# cat /etc/crontab | grep log
# Rotate log files every hour, if necessary.
0       *       *       *       *       root    newsyslog

Настройки ротации логов хранятся в файле /etc/newsyslog.conf, к примеру:

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/all.log                        600  7     *    @T00  J
/var/log/amd.log                        644  7     100  *     J
/var/log/auth.log                       600  7     100  *     JC

Тут:

logfilename — обязательный параметр, полный путь к файлу лога, который необходимо проверять; owner:group — необязательный параметр, владелец/группа, которой принадлежит файл; mode — права доступа к файлу; count — сколько копий заархивированных файлов хранить; size — предельный размер файла лога в килобайтах, после которого он будет заархивирован и создан новый, для указания «любой размер» — установите *; when — время в часах, через которое файл будет заархивирован, даже если его размер не превысил заданный в size, что бы игнорировать опцию — установите *;

flags — флаги:

  • B — по умолчанию, newsyslog добавляет в новый лог-файл сообщение о том, что лог-файл был ротирован, но если лог-файл бинарный, то это сообщение испортит лог, с параметром B newsyslog не будет добавлять никаких сообщений в лог;
  • C — если лог-файл не существует, то его необходимо создать;
  • G — если указан данный флаг, то в названии лог-файла можно использовать стандартные шаблоны (например *);
  • J — сжимать лог-файл, используя bzip2;
  • N — не предупреждать никакой процесс, о ротации лог-файла;
  • W — если используются флаги Z или J, то newsyslog должен подождать, пока завершится процесс архивации;
  • Z — сжимать лог, используя gzip.

Далее:

[/pid_file] – необязательный параметр, определяющий путь к файлу, в котором хранится PID процесса приложения, работающего с данным логом.

Если он указан, то приложение будет оповещено о ротации посылкой сигнала, на что оно должно произвести соответствующие действия со своей стороны;
[sig_num] – необязательный параметр, определяющий номер сигнала, посылаемый приложению при ротации, чтобы произошло переоткрытие нового лог-файла для записи. По умолчанию используется SIGHUP, т. е.

«1» (в обычных случаях посылается с помощью kill -1 или kill -HUP). Некоторые демоны для переоткрытия лог-файлов требуют другого номера сигнала, как например, для nginx, php-fpm, sphinx нужен SIGUSR1, т. е. «30».

Теперь — добавим новую запись в настройку newsyslog.

Сначала — создадим файл, который будет ротироваться:

# touch /var/log/somesite.access.log

Установим ему размер в 10Кб:

# truncate -s 10240 /var/log/somesite.access.log

Проверим:

# ls -hl /var/log/somesite.access.log-rw-r—r—  1 root  wheel    10k Feb  1 12:55 /var/log/somesite.access.log

Теперь — добавляем новую строку в файл /etc/newsyslog.conf:

/var/log/somesite.access.log            600  7     1 *    ZC

Запустим newsyslog с ключём -n — в таком случае он не будет выполнять ротацию, а только отобразит — какие действия будут выполнены:

# newsyslog -n/var/log/somesite.access.log : trimming
rm -f /var/log/somesite.access.log.7
rm -f /var/log/somesite.access.log.7.gz
rm -f /var/log/somesite.access.log.7.bz2
rm -f /var/log/somesite.access.log.7.xz
ln /var/log/somesite.access.log /var/log/somesite.access.log.0
chmod 600 /var/log/somesite.access.log.0
mktemp /var/log/somesite.access.log.zXXXXXX
chmod 600 /var/log/somesite.access.log.zXXXXXX
mv /var/log/somesite.access.log.zXXXXXX /var/log/somesite.access.log
Signal all daemon process(es)…
kill -1 64569           # /var/run/syslog.pid
Compress all rotated log file(s)…
gzip /var/log/somesite.access.log.0
chmod 600 /var/log/somesite.access.log.0.gz

И запустим newsyslog с ключём -v для подробного режима:

# newsyslog -vProcessing /etc/newsyslog.conf
/var/log/all.log : does not exist, skipped.
/var/log/amd.log : does not exist, skipped.
/var/log/auth.log : size (Kb): 32 [100] —> skipping

/var/log/somesite.access.log : size (Kb): 10 [1] —> trimming log….
Signal all daemon process(es)…
Notified daemon pid 64569 = /var/run/syslog.pid
Pause 10 seconds to allow daemon(s) to close log file(s)
Compress all rotated log file(s)…

Посмотрим на файл теперь:

# ls -hl /var/log/ | grep somesite-rw——-  1 root      wheel      74B Feb  1 13:00 somesite.access.log
-rw——-  1 root      wheel     148B Feb  1 13:00 somesite.access.log.0
-rw——-  1 root      wheel     144B Feb  1 12:58 somesite.access.log.1.gz

Готово.

Примечание: Размещать файлы логов можно в любой директории — хоть в /home пользователя, newsyslog обработает их в любом случае.

Источник: http://adminunix.ru/freebsd-nastrojka-newsyslog-dlya-rotatsii-logov/

Настройка Logrotate

В Linux, большинство сервисов и программ, которые работают в фоне, таких как Apache, Nginx, Postfix и других записывают информацию о своем состоянии, результатах работы и ошибках в лог файлы. Стандартное расположение логов или как их еще называют — журналов — в папке /var/log.

С помощью анализа логов вы можете понять что работает не так, почему произошла ошибка и как решить возникшую проблему. Но тот кроется одна проблема.

Размер логов постоянно растет и они занимают все больше и больше места на диске, поэтому необходимо вовремя чистить логи и удалять устаревшие записи, чтобы они не мешали нормально работать.

Это можно делать вручную время от времени или настроить скрипты Cron, но есть еще более простой вариант — утилита logrotate. В этой статье будет рассмотрена настройка logrotate и ее использование.

  • Как работает Logrotate?
  • Настройка Logrotate
  • Выводы

Как работает Logrotate?

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

Проверку условий можно настроить ежедневно, еженедельно или ежемесячно. Это позволяет создать схему ротации логов, удобную именно для вас и вашего сервера. Также ротация логов может быть полезна на домашнем компьютере, но здесь она не так важна как на серверах, где только в логи Apache могут записываться до сотен тысяч строк ежедневно.

Logrotate — это популярная утилита, поэтому в большинстве дистрибутивов она поставляется по умолчанию. Вы можете убедиться, что программа установлена в вашем дистрибутиве, попытавшись ее установить. Например, в CentOS:

sudo yum install logrotate

Или в Ubuntu и основанных на ней дистрибутивах:

sudo apt install logrotate

Теперь, даже если утилита не была установлена, вы ее установите. Все основные настройки программы находятся в файле /etc/logrotate.

conf, дополнительные настройки, касаемо правил и других возможностей могут быть размещены в папке /etc/logroate.d/.

Вы можете размещать все настройки logroatae прямо в основном конфигурационном файле, будет более правильно, если настройки для каждого отдельного сервиса будут находиться в отдельном файле, в папке /etc/logrotate.d/.

Чтобы конфигурационные файлы из этой папки загружались программой, необходимо добавить в основной конфигурационный файл такую строчку:

vi /etc/logrotate.conf

include /etc/logrotate.d

Просто убедитесь что она там уже есть. Сначала давайте рассмотрим основные директивы, которые мы будем применять во время настройки. Здесь директивы выглядят не совсем обычно, сама директива и определяет что и когда нужно делать, а уже если нужно, ей передаются дополнительные параметры. Чтобы указать как часто нужно выполнять проверку совпадению условий используются такие директивы:

  • hourly — каждый час;
  • daily — каждый день;
  • weekly — каждую неделю;
  • monthly — каждый месяц;
  • yearly — каждый год.

Основные директивы управления и обработки логов:

  • rotate — указывает сколько старых логов нужно хранить, в параметрах передается количество;
  • create — указывает, что необходимо создать пустой лог файл после перемещения старого;
  • dateext — добавляет дату ротации перед заголовком старого лога;
  • compress — указывает, что лог необходимо сжимать;
  • delaycompress — не сжимать последний и предпоследний журнал;
  • extension — сохранять оригинальный лог файл после ротации, если у него указанное расширение;
  • mail — отправлять Email после завершения ротации;
  • maxage — выполнять ротацию журналов, если они старше, чем указано;
  • missingok — не выдавать ошибки, если лог файла не существует;
  • olddir — перемещать старые логи в отдельную папку;
  • postrotate/endscript — выполнить произвольные команды после ротации;
  • start — номер, с которого будет начата нумерация старых логов;
  • size — размер лога, когда он будет перемещен;

Это те основные директивы, которые мы будем использовать. В главном конфигурационном файле находится глобальная конфигурация, директивы, которые будут распространяться на все логи если не было отменено их действие. Каждый лог, который подлежит ротации описывается таким образом:

адрес_файла_лога {
директивы
}

Теперь давайте создадим файл rsyslog.conf в папке /etc/logrotate.d/ и поместим в него настройки для ротации этого лога:

/var/log/messages { daily rotate 3 size 10M compress delaycompress

}

Эти настройки означают, что ротация журналов будет выполняться ежедневно, и мы будем хранить три последних журнала, более старые копии будут автоматически удаляться.

Минимальный размер для ротации — 10 мегабайт, ротация не будет выполнена, если лог не занимает более 10 мегабайт. Будет использоваться сжатие, для всех журналов кроме последнего и предпоследнего.

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

Теперь осталось протестировать как работает наша конфигурация. Для этого запустим утилиту logrotate с опцией -d. Она выведет все, что планируется сделать, но не будет изменять файлы на диске. У нас есть файл /var/log/messages, размером 40 Мегабайт, посмотрим что будет делать утилита:

logrotate -d /etc/logrotate.d/rsyslog.conf

Как видите, программа обнаруживает файл лога и разделяет его на несколько частей. Вы можете убедиться, что logrotate будет запускаться как положено проверив расписание cron:

ls /var/cron.daily/

Настройка Logrotate завершена, а вам осталось всего лишь расписать как будет выполняться ротация логов для каждого из журналов, которые занимают много места.

Выводы

В этой статье мы рассмотрели как выполняется настройка logrotate centos или в любом другом дистрибутиве Linux. Работа утилиты не сильно отличается в зависимости от дистрибутивов.

Если у вас есть сервер с большой нагрузкой, вам обязательно необходимо настроить ротацию логов. Надеюсь, эта информация была полезной для вас.

На завершение видео, о том как выполняется ротация логов в Ubuntu от LPIC:

И еще одно на английском:

Источник: https://losst.ru/nastrojka-logrotate

Newsyslog — ротация логов

Опубликовано muff в Пнд, 2009-11-16 13:34

Вот на днях заметил лог-файл «дивного» обьема — 19,5 ГБ (сервер достался от предыдущего одмина, соответственно много чего интересного замечаю  ). Решил проинспектировать и нормально настроить ротацию логов. Ротацией логов во FreeBSD занимается newsyslog.

Newsyslog обычно запускается по cron’у раз в час, читает конфигурационный файл /etc/newsyslog.conf и определяет, когда лог-файлы нуждаются в архивировании и перегруппировке. logfile перемещается в logfile.0, logfile.0 перемещается в logfile.1, и так далее. Другое именование получится при архивировании с помощью gzip: logfile.0.gz, logfile.1.gz, и т.д.

Конфигурационный файл newsyslog.conf указывает, какие лог-файлы должны быть проинспектированы, сколько их должно быть сохранено, а также, когда они должны быть пересмотрены. Лог-файлы могут быть перегруппированы и/или заархивированы исходя из заданных параметров:

  • когда они достигнут определённого размера;
  • при достижении определённых даты/времени.

Для примера, «кусочек» newsyslog.conf на одном из серверов:

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]/var/log/all.log                        600  7     *    @T00  J/var/log/amd.log                        644  7     100  *     J/var/log/auth.log                       600  7     100  *     JC/var/log/console.log                    600  5     100  *     J/var/log/cron                           600  3     100  *     JC/var/log/daily.log                      640  7     *    @T00  JN/var/log/debug.log                      600  7     100  *     JC/var/log/kerberos.log                   600  7     100  *     J/var/log/lpd-errs                       644  7     100  *     JC/var/log/maillog                        640  7     *    @T00  JC/var/log/messages                       644  5     100  *     JC/var/log/monthly.log                    640  12    *    $M1D0 JN/var/log/pflog                          600  3     100  *     JB    /var/run/pflogd.pid/var/log/ppp.log        root:network    640  3     100  *     JC/var/log/security                       600  10    100  *     JC/var/log/sendmail.st                    640  10    *    168   B/var/log/weekly.log                     640  5     1    $W6D0 JN/var/log/wtmp                           644  3     *    @01T05 B/var/log/xferlog                        600  7     100  *     JC
Читайте также:  Вопросы и ответы на компьютерную тематику. faq по компьютерам и серверам

 Описание:

  • лог-файл – абсолютный путь к лог-файлу;
  • [владелец:группа] — необязательный параметр, который указывает newsyslog’у кто должен являться владельцом данного лог-файла ;
  • права — права, которые необходимо выставить на файл;
  • количество — максимальное количество заархивированных лог-файлов;
  • размер — по достижению какого размера архивировать лог-файл;
  • когда — время, через которое архивировать лог-файл;
  • флаги — некоторые дополнитпараметры, для лог-файлов:
    • B — по умолчанию, newsyslog добавляет в новый лог-файл сообщение о том, что лог-файл был ротирован, но если лог-файл бинарный, то это сообщение испортит лог, с параметром B newsyslog не будет добавлятьт никаких сообщений в лог
    • C — если лог-файл не существует, то его необходимо создать.
    • G — если указан данный флаг, то в названии лог-файла можно использовать стандартные шаблоны(например *)
    • J — сжимать лог-файл, используя bzip2
    • N — Не предупреждать никакой процесс, о ротации лог-файла
    • W — если используете флаги Z или J, то newsyslog должен подождать, пока заверщиться процесс архивации.
    • Z — сжимать лог, использую gzip.

Предлагаю рассмотреть более подробно синтаксис конфигурационного файла.

logfilename — указывается полное имя файла журнала, например /var/log/httpd-error.log. Здесь все понятно

[owner:group] — как уже писалось — необязательная опция. Это список из владельца и группы файла, разделенных двоеточием. Вот так: «root:wheel». Newsyslog может изменять владельца и группу также и старых файлов журналов. По умолчанию владельцем устаревших журналов является пользователь root, группы wheel.

Эту возможность вы можете с успехом применять на многопользовательских машинах. Также есть возможность указать изменение только владельца, или только группы. В этом случае необходимо использовать двоеточие с пустым местом там, где должен находиться неизменяемый параметр.

Например «:www» сменит группу на «www», а «username:» заменит владельца на «username».

mode — здесь проблем не должно быть. Указываем режим доступа к устаревшим файлам журналов в стандартном трехциферном Unix-формате.

count — счетчик, указывающий newsyslog на количество хранимых устаревших журналов. Newsyslog начинает отсчет файлов с нуля. В то время как большинство программ начинают считать с нуля, newsyslog включает 0 «по умолчанию», и считает файлы не учитывая нулевой. По умолчанию для журнала /var/log/massages счетчик равен пяти, при этом /var/log содержит следующие файлы:
 

messages messages.0.gz messages.1.gz messages.2.gz messages.3.gz messages.4.gz

messages.5.gz

Те из вас, кто может сосчитать количество файлов, видят, что их шесть, а не пять, плюс еще и текущий файл журнала. Как правило, иметь большее количество журналов лучше, чем испытывать в них недостаток .

В то же время, если присутствует недостаток свободного пространства на винчестере, то иногда вы будете испытывать искушение удалить один-два излишних журнала.

Похожая ситуация возникает в основном на веб-серверах, где размещено до нескольких сотен сайтов – несколько удаленных журналов каждого сайта в сумме могут составить достаточно большой объем свободного места.

size  и when — поля конфигурационной записи указывают newsyslog размер и/или  время, при наступлении которых указанный файл необходимо подвергнуть ротации.

Можно осуществлять ротацию по достижении определенного объема файла, или при наступлении определенного времени, или в обоих случаях.

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

Если размер или время не важны, то устанавливаем «*», то есть «любое значение». Например, если вы хотите проводить ротацию независимо от размера файла, то вместо указания размера необходимо поставить звездочку «*».

Поле size используется для указания размера в килобайтах. Когда newsyslog запускается он сравнивает размер файла с указанным, если файл больше, то производится его ротация.

Поле when, указывающее время, заставляет плакать новичков в системном администрировании. Поле времени может содержать данные четырех типов: «звездочку», число или два различных формата даты.

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

Если в поле будет число, то newsyslog будет проводить ротацию по прошествии указанного количества часов. Например, если вы хотите, что бы ротация проводилась каждые 24 часа, и вам не важно в какое именно время, то просто поставьте в это поле число «24».

Если поле начинается символом «@», то считается что время представлено в формате ISO-8601. Этот стандарт используется newsyslog в большинстве Unix-подобных операционных систем.

Этот формат использовался первой версией newsyslog разработанной в MIT (Массачусетский Технологический Институт – прим. переводчика). На первый взгляд этот формат не совсем понятен.

Но, поскольку это стандарт, FreeBSD его поддерживает.

Полная запись даты в формате ISO-8601 состоит из 16 цифр с буквой «T» в середине. Первые четыре цифры означают год, следующие две – месяц, и еще две – день месяца.

Буква «T» идет после даты, отделяя ее от времени, как десятичная точка в вещественных числах отделяет дробную часть от целой. После буквы «T» идут две цифры часа, затем две цифры минут и наконец две цифры секунд.

Например дата 2 февраля 2002 года, 21:15:08, в формате ISO-8601будет выглядеть следующим образом:

20020202T211508

Вы обязательно должны ставить букву «T» в ISO-8601-дате.

Указание полных дат в формате ISO-8601 просто и очевидно. Путаница начинается, когда вы не пишете полную дату. Вы можете указать поля даты только рядом с буквой «T», оставив остальное место незаполненным. Все неуказанные поля не будут учитываться при сравнении.

Например T23 значит – любой день в году, 23:00. Если вы напишете в newsyslog.conf @T23, то ротация этого журнала будет проводиться каждый день, ровно в 23:00. Запись 4T00 значит полночь 4 числа каждого месяца, таким образом @4T00 будет запускать ротацию в это время.

Так же как при работе с crontab вам следует уточнить часы ротации. Указание даты типа @7T будет запускать ротацию один раз в час, каждый час седьмого числа каждого месяца. Таким образом такая дата будет запускать ротацию раз в час на протяжении целого дня. Это может быть полезно для отладки, но вряд ли пригодится в реальной жизни.

Эта система имеет одну серьезную проблему – она не дает простого способа задавать ежедневно выполняемые задачи. Желание запустить ротацию журнала по понедельникам, не является чем-то необычным. Запустить ротацию журнала в последний день месяца таким образов вообще не удастся. Тут на помощь приходит второй формат времени.

Если запись времени начинается со знака доллара «$», то считается, что время задается в специфическом FreeBSD-формате «месяц-неделя-день». Это очень похоже на cron и позволяет вам установить конкретные дни недели для выполнения задачи.

Этот формат использует три буквенных идентификатора: M (день месяца), W (день недели), H (час дня). После каждого из них идет число, указывающее точное время запуска. Часы находятся в интервале от 0 до 23, дни недели от 0 (воскресенье), до 6 (суббота). Дни месяца: от 1 и до количества дней в конкретном месяце.

Например для запуска ротации каждое воскресение в 8 утра вам следует задать время как $W0H8. Если вы захотите ротировать журналы в полдень 5 числа каждого месяца, то напишите $M5H12.

Одна интересная функция этой системы позволяет вам автоматически задавать ротацию на последний день месяца используя специальный «день месяца» – «L» (от last – последний).

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

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

flags — это поле необязательно для большинства журналов, однако для некоторых оно жизненно важно.

Newsyslog вставляет сообщение «logfile turned over» в каждый вновь созданный файл журнала. Если журнал ведется в двоичном виде (как например /var/log/wtmp), то добавление такого сообщения обязательно его испортит. Флаг «B» запрещает newsyslog'у вставлять это сообщение.

Большинство журналов ведется в текстовом формате. Сжатие таких файлов сохранит много пространства на вашем диске. Флаг «Z» укажет newsyslog, что старые журналы следует сжать gzip'ом.

Одновременно допускается использовать только один из этих флагов.

[/pid_file] — задает путь к «pid-файлу» процесса пишущего журнал. Использование pid-файлов является простым способом записи поля ID процесса в системе, так что бы другие программы могли его легко прочитать. Большинство программ хранят свои pid-файлы в каталоге /var/run – поглядите них у себя на машине.

Если в этом поле вы укажете полный путь к pid-файлу, то newsyslog будет посылать сигнал этому процессу когда будет производиться ротация. Например веб-сервер Apache должен быть оповещен при ротации его журналов.

Записав в этом поле полный путь к его pid-файлу вы заставите newsyslog посылать процессу Apache сигнал kill -1, что бы он запустил свою часть обработки ротации журналов.

[sig_num]  — большинство программ поддерживают ротацию журналов сигналом kill -1 или SIGHUP. Некоторые программы требуют специального сигнала, когда их файлы ротируют. Если вы используйте программу такого типа, то укажите номер необходимого сигнала в последнем поле.

Давайте соберем все сказанное вместе, в самом худшем случае, в примере, в который трудно поверить. Итак у вас есть журнал базы данных, который вы хотите ротировать в 23 часа в последний день каждого месяца.

В документации базы данных сказано, что вы должны послать процессу базы сигнал прерывания (SIGINT или сигнал номер 2) после ротации. Вы хотите, что бы архивные журналы принадлежали пользователю «dbmanager» и читать их мог только он.

Более того, журналы – двоичные файлы и должны быть не тронуты newsyslog'ом. Ваш newsyslog.conf должен выглядеть следующим образом:

/var/log/database dbmanager: 600 30 * $MLH23 B /var/run/db.pid 2 

Источник: http://muff.kiev.ua/content/newsyslog-rotatsiya-logov

Opensource: практический опыт использования. Ротация логов на FreeBSD

Есть у меня один сервер, который был создан аж в 2003 году. Стоит на нем FreeBSD 4.9. С того момента все работало отлично, ну а зачем трогать работающую систему ? Однако захотелось большего. Дошло до меня, что логи nginx-а приходится просто раз в несколько месяцев грохать вручную. И решил я этот процесс автоматизировать, т.е. настроить ротацию.

Как этот процесс выглядит под Windows: находим небольшую бесплатную утилитку, ставим ее, конфигурим через простенький GUI. Весь процесс занимает минут 5. 

Ниже пойдет рассказ, как этот совсем простой процесс происходит на опенсорс системе не последней версии. Рекомендуемый способ ротации логов нашелся очень быстро. Есть утилита logrotate, которая входит в packages FreeBSD. Ее-то я и пытался установить… в течение целого дня.

Нахожу нужный package, набираю «make install clean». Идет обращение к куче разных серверов и… нету там этой программки. Точнее нет той версии, которая прописана в package 2003 года. Понимаю, что packages надо обновить.

Нахожу документацию по обновлению packages. Оно делается утилитами, которые опять же не установлены по умолчанию (представьте себе, что Windows Update придется откуда-то качать). Одна из трех утилит собралась. Это уже хорошо. Вытягиваю актуальные packages, обновляю. Наверно это единственный этап, который прошел без танцев с бубном.

Установилась новая версия package для logrotate. Запускаю make — на сервере файл находится. А потом выясняется, что просто так такую простую утилитку не собрать… Для нее надо столько всего, что я просто офигел. В первую очередь зависит она от библиотеки popt. Это просто набор функций, разбивающих командную строку на параметры. Но сколько же всего нужно этому, извиняюсь, попту…

Сначала попт ругнулся, что у меня не та версия libtool. Нашел в packages, что можно установить версию 2.2. Качаю, ставлю… make в какой-то момент ругается, что у меня нет «C99» компилятора. Лезу изучать что это такое… Да — gcc стоит версии 2.9.5, а C99 поддерживает версия 3.0. В packages полно версий gcc. Думаю, сейчас поставлю самый последний (4.6) и будет мне щастье… Ага — как же.

После 20 минут сборки получаю ту же ошибку — gcc 4.6 опять же надо собирать C99 компилятором. Это вам не Visual Studio 2010 поставить, это значительно сложнее. Ладно, пытаюсь собрать версию 3.2. В какой-то момент получаю еще какую-то невнятную ошибку от make. Лезу искать. Оказывается make почему-то решил, что в системе стоит 2 процессора и пытается запустить еще один тред для сборки.

Чтобы он этого не делал (ну это ведь так сложно — проверить количество процессоров), нужно в /etc/make.conf прописать соответствующую директиву. Пошла сборка gcc32… Оппа — не хватает какого-то bison-а. Нахожу что этот bison опять же есть новый, собираю вручную. Собрался gcc32 за 40 минут. Еще минут 15 ушло на изучение вопроса, как сделать, чтобы make вызывал его, а не старую версию.

Читайте также:  Hal.dll, hall.dll, на загружается система windows

Собираю libtool. Потом попт начинает требовать последнюю версию gettext (который создает библиотеку libintl). При этом так странно предупреждает, что «вы конечно можете установить последнюю версию». Не требует, не собирает автоматически, а именно предупреждает. Ладно, начинаю собирать gettext… А вот его почему-то выложили не в обычном «tar.

gz» формате, а в файле с расширением .lzma. Для открытия этих файлов нужен архиватор XZ. Он собрался автоматически, но, сцуко, не работает. Просто говорит «мне не хватает памяти» и ничего не делает. Поиском нашлось, что это жутко передовая технология, она использует очень много памяти, но при этом очень эффективно сжимает данные.

Может, говорят, и несколько гигабайт легко использовать для декомпрессии. Но мне от этого не легче — на моей машине оно просто не работает. Ради интереса посмотрел packages на другом сервере (там последняя версия FreeBSD стоит). А там этот package сделан нормально — в tar.gz.

Убираю из конфига «USE_XZ», прописываю новые контрольные суммы в другом конфиге. Оппа — скачался gettext. 

Но дальше ждет еще одна засада… gettext установил новую библиотеку libintl.so. Я это сразу понял, потому что перестал запускаться Midnight Commander. Говорит, нету libintl.so.5.

Лезу изучать этот вопрос… Оказывается «по науке» после установки новой версии libintl нужно пересобрать весь софт, который ее использует. Поскольку эта перспектива мне не очень понравилась, лезу изучать дальше.

Нахожу совет умного человека: найди эту библиотеку и просто сделай хард линк. Нахожу, что теперь она называется libintl.so.9, делаю линк. Все заработало !

Так, чем мы там изначально занимались ? Я уже и подзабыл. Ах да — мы пытались собрать popt, который требует logrotate. И он собрался. Все собралось, кроме его внутреннего теста.

А на внутреннем тесте линкер просто не находит пару функций, работающих с юникодом. Оказывается, ядро у меня собрано без поддержки юникода. Плюнул я на это дело, ядро пересобирать не стал.

Просто за 15 минут написал скриптик для шелла, который архивирует логи. Не такой продвинутый, как пресловутая утилита logrotate, но мне хватает.

Зачем обычной крутилке логов поддержка юникода, куча библиотек и прочего, я не понимаю. Видимо не дорос я еще до религии Opensource.

Да — на сервере с последней версией FreeBSD эта утилита собралась за 10 минут.

Источник: https://blog.malyshev.com/?p=802

Установка Logrotate для управления логами в Unix/Linux

Logrotate – это программа которая дает возможность управлять логами в системы Unix/Linux. Утилита выполняет автоматическую ротацию, удаление или сжатие логов. Logrotate помогает сохранять место на диске. Утилиту довольно просто настроить и сейчас, вы убедитесь в этом.

Я приведу наглядные примеры использования на различных Unix/Linux ОС.

Установка Logrotate для управления логами в Debian/Ubuntu

Обновим пакеты в ОС:

# apt-get update -y

Для установки используем:

# apt-get install logrotate -y

После чего, переходим к настройке и запуску логротейта.

Установка Logrotate для управления логами в CentOS/Fedora/RedHat

Обновим пакеты в ОС:

# yum update -y

Для установки используем:

# yum install logrotate -y

После чего, переходим к настройке и запуску логротейта.

Установка Logrotate для управления логами в Mac OS X

Выполняем установку HomeBrew — Установка Homebrew на Mac OS X и, выполним поиск пакета:

$ brew search logrotate

Для установки, служит команда:

$ brew install logrotate

После чего, переходим к настройке и запуску logrotate.

Настройка Logrotate для управления логами в Unix/Linux

Конфигурационный файл можно найти в :

# vim /etc/logrotate.conf

Мой конфиг выглядит следующим образом:

weekly create rotate 4 dateext include /etc/logrotate.d /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }

Логи уровня приложения (заменяющие настройки по умолчанию в случае необходимости) хранятся в:

/etc/logrotate.d/

Я не буду заморачиваться и пропишу один конфиг для всей ротации ( можно настраивать для каждого отдельно):

# vim /etc/logrotate.d/For_ALL

Прописываем:

/var/log/*.log { monthly size 100M rotate 7 compress delaycompress missingok notifempty create 644 root root }

Я беру все логи которые имеют любое название и заканчиваются на .log и отслеживаю их в интервале — месяц ( служит директива monthly). Если превышает размер лога (size 100M), то выполнить ротацию Ротация происходит после 7 дней ( файлы сохраняются 7 дней). Лог-файлы я сжимаю ( директива compress).

Опция delaycompress задерживает выполнение сжатия до следующей ротации логов, но она работает только с параметром — compress. Параметр missingok дает возможность обрабатывать следующий лог если какой-то отсутствует и не выдавая об ошибке. С опций notifempty можно запретить ротацию пустых файлов.

 После ротации логов, все будет удалено и чтобы выполнялось сохранение логов, нужно создать файлы снова. Так вот, create позволяет это делать.

Если в конфиге используется опция size и интервал ротации (например, monthly), то именно опция size превзойдет опцию интервала ротации, — это означает что что логи будут ротироваться, как только размер файла превысит указанное значение, не дожидаясь истечения срока.

После чего, можно выполнить проверку того, что создали ( без его выполнения, только тест):

# logrotate -d /etc/logrotate.d/For_ALL

Если отладка не показала ничего плохого, можно запустить ротацию:

# logrotate -f -v /etc/logrotate.d/For_ALL

Вместо того, чтобы сжимать логи, можно переименовать их. Для этого есть директива dateext. Если наш формат даты отличается от yyyymmdd по умолчанию, мы можем указать его с помощью dateformat:

dateext dateformat -%d%m%Y notifempty

Так же, можно по окончанию,  отправить письмо на указанный емейл:

mail mail_user@linux-notes.org

Если не хотите чтобы создавались пустые файлы после ротации, используйте:

nocreate

Не откладывать сжатие файла на следующий цикл

nodelaycompress

Если не хотите отправлять старые логи на почту, то юзайте:

nomail

Сохранять все логи в одной и той же папке:

noolddir

Интервалы для ротации:

daily weekly monthly yearly

Размеры для ротации (после превышения указанного размера, будет выполнятся ротация):

size 6k size 66M size 66G

Можно посылать произвольные команды после выполнения ротации, например:

postrotate echo «Ротация выполнена!» | mail root endscript

Данную утилиту, нужно запускать:

# logrotate /etc/logrotate.d/For_ALL

Можно автоматизировать и закинуть «logrotate» команду в crontab.

PS: По умолчанию, это возможно уже сделано:

# ls /etc/cron.daily/ cups logrotate makewhatis.cron mlocate.cron prelink readahead.cron tmpwatch

Например, файл конфигурации для apache2 выглядит следующим образом:

/var/log/apache2/*.log { weekly missingok rotate 2 compress delaycompress notifempty create 640 root root sharedscripts postrotate if [ -f «`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`» ]; then /etc/init.d/apache2 reload > /dev/null fi endscript }

Ротация производится раз в неделю. При отсутствии лога — не выводить ошибку. Сохранять 2 последних ротированных фалов и конечно же, сжимать их, но для пустых файлов никаких действий не выполнять. После того, как ротация прошла, создавать пустой файл с указанными правами.

Опции Logrotate

Наиболее часто использующиеся опции:

-d — Данная опция, дает возможность включить отладочный режим, который использует «-v» параметр. В этом режиме, ничего не будет выполнятся и применятся.

-f, —force — Данная опция, дает возможность принудительно запустить logrotate и запустить ротацию логов. Иногда бывает полезным, например — когда добавили новый функционал в конфиг или старые логи удалены вручную и чтобы не создавать новые файлы вручную, можно запустить логротейт с данной опцией.

-m, —mail command — Позволяет указывать команду для отправки лог-файлов по почте и она должна содержать входные параметры:

  • заголовок письма
  • получателя письма

После выполнения, логи будут отправлены на указанное мыло ( команда читает данные со стандартного входа STDIN), а командой по умолчанию — /usr/bin/mail -s.

-s, —state statefile — Данная опция позволяет задавать произвольный файл с состоянием. Это хорошо использовать тогда, когда в системе имеется несколько пользователей, которые работают ( запускают) с logrotate. По умолчанию, данный фал сохраняется в  /var/lib/logrotate/status.

—usage — Показать мануал по использованию данной утилиты.

-v, —verbose — Данная опция, позволяет выводит все происходящее на экран ( весь вывод).

Вот и все, статья «Установка Logrotate для управления логами в Unix/Linux» завершена!

Источник: https://linux-notes.org/ustanovka-logrotate-dlya-upravleniya-logami-v-unix-linux/

logrotate: настройка ротации логов

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

Кроме этого, логи можно автоматически сжимать и информировать по почте о ротации с отсылкой свежего лога, либо последнего, который удален при последней ротации.

В данный момент logrotate является самой распространенной системой ротации логов, поскольку широко используется в операционных системах на базе ядра linux, которые доминируют в сфере серверов по всему миру.

Конфигурация logrotate

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

d», подключающая конфигурационные файлы из директории /etc/logrotate.d. Таким образом, для создания нового задания ротации вам достаточно создать конфигурационный файл и поместить его в эту директорию.

Название файла желательно задавать такое же, как и название сервиса, логи которого будут ротироваться.

Вот пример конфигурационного файла /etc/logrotate.conf:

# rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp, or btmp — we'll rotate them here /var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly create 0660 root utmp rotate 1 }

Как вы понимаете, ротироваться могут не только файлы логов, но и любые другие файлы. К примеру, можно таким образом делать ежедневные резервные копии какого-то определенного файла. Но ротация логов — это именно та основная задача, которую изначально решает программа, и решает хорошо.

Каждый файл в директории /etc/logrotate.d может включать одну или несколько секций. Каждая секция выглядит в общем виде так:

название-файла-лога { параметры ротации }

Параметры ротации — это именно то, что обеспечивает гибкость ротации. У logrotate достаточно много опций, но их можно разбить на несколько групп. Вот опции, которые могут быть использованы в конфигурационных файлах:

Опции, определяющие интервал ротации:

hourly daily weekly monthly

yearly

Ротировать файл лога каждый час, каждый день, каждую неделю, каждый месяц, каждый год. Запуск ротации обеспечивается обычно при помощи ежедневного запуска cron (файл /etc/cron.daily/logrotate), поэтому, если вам необходимо запускать ротацию каждый час, необходимо перенастроить запуск на запуск каждый час.
Читайте также:  Rsync server: настройка синхронизации на centos и ubuntu

Опции сжатия логов:

compress Сжимать логи при ротации.

По умолчанию для сжатия используется gzip

compresscmd Команда/программа, которая будет использоваться для сжатия логов
compressoptions Опции команды ротации, которые будут использоваться при сжатии логов
uncompresscmd Команда разархивации логов. По умолчанию gunzip
compressext Указать расширение файлов, которое будет указываться для сжатых логов
delaycompress Отложить сжатие лога до следующей ротации. Таким образом последняя версия лога после ротации будет несжатой, а более ранние — сжатыми
nocompress Не сжимать логи при ротации
nodelaycompress Не откладывать сжатие до следующей итерации ротации. Эта опция перегружает опцию delaycompress

Опции копирования:

copy Копировать лог-файл, но не изменять оригинал. Эту опцию можно использовать, когда надо создать снимок лога на определенный момент, вместо ротации, либо когда для усечения лога используется внешняя программа.

Если используется опция copy, то опция create, если она указана, не будет иметь никакого эффекта, так как старый лог остается.

copytruncate Урезать оригинальный файл до нулевого размера после создания копии вместо переименования оригинального файла и создания нового.

Эта опция используется тогда, когда программе, записывающей лог, нельзя указать, что нужно закрыть связанный с файлом лога дескриптор и открыть новый. Такая программа может продолжать писать в старый файл.

При использовании этой опции есть один момент, связанный с тем, что на копирование требуется некоторое время и поэтому файл не может быть скопирован мгновенно. За время копирования в лог могут быть добавлены записи, которые будут утеряны при усечении файла до нулевого размера.

При использовании этой опции опция create также не будет иметь эффекта, так как старый файл остается на месте

nocopy Не копировать оригинальный лог-файл. Эта опция перегружает опцию copy
nocopytruncate Не усекать оригинальный лог-файл после создания копии. Эта опция перегружает опцию copytruncate

Опции создания нового лог-файла (после ротации старого):

create права владелец группа
create владелец группа
Указать права доступа, владельца и группу владения нового свежесоздаваемого лог-файла сразу после его создания. Как уже упоминалось, если используются опции copy и copytruncate, то create не имеет смысла, так как старый файл остается на месте, новый файл не создается.

Чтобы опция create отработала, файл должен отсутствовать. Права указываются восьмеричными значениями в таком же виде, как и при использовании программы chmod. Например, 644 или 600. Если какое-то значение (права/владелец/группа) опущено, то оно будет таким же, как у оригинального файла

nocreate Новые лог-файлы не создаются.

Эта опция перегружает опцию create

Опции, связанные с удалением файла лога:

shred Удалять лог-файл при помощи программы команды «shred -u». По умолчанию используется unlink
shredcycles количество Указать количество циклов перезаписи содержимого файла до его удаления.

Если опция не указана, будет использовано значение по умолчанию

noshred Не использовать shred для удаления
maxage количество Удалять файлы логов, которые старше, чем указанное количество дней. Возраст файлов проверяется только когда происходит ротация.

Файлы высылаются по электронной почте на сконфигурированный адрес, если указаны опции mail и maillast

Опции, связанные с датами:

dateext Использовать в названии старых лог-файлов дату вместо номера. При использовании номера названия выглядят так: logfile.1.gz, logfile.2.gz и так далее
nodateext Не использовать дату в названиях старых лог-файлов.

Эта опция перегружает опцию dateext

dateformat форматная-строка Указать форматную строку для даты, которая будет добавляться к названию лога.

Форматная строка похожа на используемую в команде date, но допустимы только шаблоны %Y(четырехзначный номер года), %m(двузначный номер месяца), %d(двузначный номер дня месяца) и %s(unix time, количество секунд с 00:00 01.01.1970).

Значение по умолчанию «-%Y%m%d», минус также включен в шаблон, при задании шаблона его можно упустить. Нужно отметить, что logrotate использует сортировку для определения более старых файлов, которые необходимо удалить, поэтому строка даты должна учитывать корректную сортировку.

Именно поэтому вначале пишется обычно год, затем месяц и только затем день.

dateyesterday Использовать вчерашнюю дату при ротации. Таким образом, дата в названии файла будет соответствовать дате файла, который находится внутри архива

Опции, связанные с рассылкой логов:

mail адрес Указать адрес, на который будет выслан старый лог после ротации
nomail Не отправлять старые логи по электронной почте.
mailfirst Отправлять самый свежий файл после ротации
maillast Отправлять самый старый файл после ротации. Этот вариант используется по умолчанию

Опции, связанные с размером и существованием файла лога:

maxsize размер Лог ротируется, когда его размер превысит указанный, еще до наступления следующего интервала ротации (daily, weekly, monthly, yearly). Поскольку такая ротация не зависит от времени, поэтому использовать в названии файла дату не имеет смысла.

minsize размер Лог ротируется, когда его размер больше указанного, но не ранее, чем наступает соответствующий временной интервал ротации (daily, weekly, monthly, yearly)
size размер Лог ротируется, когда его размер больше указанного количества байт.

Если после размера указана буква k, размер считается в килобайтах, если M — в мегабайтах, если G — в гигабайтах. Например, 1G или 10M.

ifempty Ротировать файл лога, даже если он пуст. Используется по умолчанию.
notifempty Не ротировать файл лога, если он пуст. Перегружает опцию ifempty.

missingok Если файл лога отсутствует, перейти к следующему без сообщения об ошибке
nomissingok Если файл лога отсутствует, возникнет ошибка. Этот параметр установлен по умолчанию.

Опции, связанные с директориями, в которых хранятся логи:

olddir директория Директория, в которую будут перемещаться логи при ротации. Эта директория должна находиться на том же устройстве, что и ротируемый файл лога. Путь к директории можно указывать как абсолютный, так и без полного пути. Во втором случае он будет считаться поддиректорией директории, в которой хранится оригинальный файл лога.

Когда эта опция указана, все старые версии логов попадают в эту директорию. Опция может быть перегружена опцией noolddir

noolddir Логи ротируются в той же директории, где находится оригинальный файл

Файлы настроек для logrotate позволяют выполнять скрипты в процессе ротации логов.

Таким образом можно выполнить какие-то действия на каждом этапе ротации.

Опции выполнения скриптов:

postrotate/endscript Строки, находящиеся между словами postrotate и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh после ротации файла лога. Обычно скрипту в качестве первого аргумента передается полное имя файла лога с путем. Если указана директива sharedscripts, то передается список файлов.

Таким образом можно выполнить скрипт для всех файлов сразу

prerotate/endscript Строки, находящиеся между словами prerotate и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh перед ротацией файла лога. Обычно скрипту в качестве первого аргумента передается полное имя файла лога с путем.

Если указана директива sharedscripts, то передается список файлов.

sharedscripts В обычном режиме скрипты выполняются по одному разу на каждый файл, указанный для ротации. Таким образом скрипты могут быть выполнены несколько раз, по разу для каждого файла, указанного для ротации.

Если указана директива sharedscripts, то скрипты выполняются по одному разу, но в качестве аргументов им передается список файлов. Если же ни один файл лога не ротируется, скрипты выполнены не будут. Если в процессе выполнения скрипта возникнет ошибка, то действие не будет завершено для всех логов.

nosharedscripts Запускать prerotate и postrotate скрипты для каждого лога, который ротируется. Это значение по умолчанию, кроме того, эта директива перегружает sharedscripts. Скриптам передается абсолютный путь к файлам логов. Если во время выполнения скрипта возникнет ошибка, то действие не будет завершено только для одного текущего файла лога.

preremove/endscript Строки, находящиеся между словами preremove и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh перед удалением старого файла лога.

logrotate передаст название файла, который будет удален, скрипту в качестве аргумента

firstaction/endscript Строки, находящиеся между словами firstaction и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh один раз до того, как лог-файлы будут ротированы и еще до того, как будет выполнена секция prerotate.

Это произойдет только в том случае, если хотя бы один лог-файл будет действительно ротироваться. Скрипту передается весь список файлов текущей секции в качестве аргументов. Если скрипт заканчивает работу с ошибкой, другого запуска не будет.

lastaction/endscript Строки, находящиеся между словами lastaction и endscript, каждое из которых должно находиться в отдельной строке, выполняются с использованием /bin/sh один раз только после того, как лог-файлы будут ротированы и даже после того, как будет выполнена секция postrotate. Это произойдет только в том случае, если хотя бы один лог-файл ротирован. Скрипту передается весь список файлов текущей секции в качестве аргументов. Если скрипт заканчивает работу с ошибкой, другого запуска не будет.

Опции общего назначения:

extention расширение Лог-файлы с указанным расширением могут сохранять его после ротации. Если используется компрессия, то расширение с типом архива (обычно .gz) появляется после расширения. Например, если у вас файл лога называется mylog.foo и вы хотите получить при ротации файл mylog.1.foo.gz, а не mylog.foo.1.

gz

rotate количество Лог-файлы ротируются указанное количество раз до удаления или отправки на адрес, указанный в директиве mail. Если количество равно 0, старые версии просто удаляются вместо ротации.
start номер Указать номер, используемый как база для нумерации при ротации.

Например, если вы указываете 0, то оригинальный файл будет ротироваться в файл с окончанием .0, и далее по увеличению, если указать 9, то нумерация начнется с .9. Файлы в любом случае будут ротироваться такое количество раз, которое указано в директиве count.

su пользователь группа Выполнять ротацию логов под указанным пользователем и группой вместо пользователя по умолчанию (обычно root). Если у пользователи или группы недостаточно прав для осуществления ротации, возникнет ошибка.

include файл-или-директория logrotate считывает указанный файл и вставляет его как есть в конфигурационный файл в место вставки директивы include. Если указана директория, файлы из нее сортируются по алфавиту и затем вставляются в конфигурацию. При этом, если файлы не являются обычными файлами, они игнорируются.

Это могут быть, например, именованные пайпы или директории. Также игнорируются файлы, имеющие расширения, указанные в директории tabooext.

tabooext [+] список Изменение текущего списка игнорируемых расширений. Если перед списком стоит +, то текущий список дополняется указанным. Если + не указан, то список заменяется.

По умолчанию список изначально включает следующие расширения: .rpmsave, .rpmorig, ~, .disabled, .dpkg-old, .dpkg-dist, .dpkg-new, .cfsaved, .ucf-old, .ucf-dist, .ucf-new, .rpmnew, .swp, .cfsaved, .rhn-cfg-tmp-*

И напоследок простой пример.

/var/log/mydaemon/mydaemon.log /var/log/mydaemon/error.log{ # Ежедневная ротация daily # Начинать нумерацию с 0 start 0 # Ротировать 30 раз до удаления rotate 30 # Не генерировать ошибку, если файла лога нет missingok # Удалять логи при помощи команды shred shred # Делать 3 цикла перезаписи shredcycles 3 # Отложить сжатие последнего лога delaycompress # Выполнять postrotate только один раз sharedscripts # После ротации послать программе сигнал SIGHUP, в результате чего # будут переоткрыты дескрипторы логов # (многие программы поддерживают такое поведение) postrotate kill -SIGHUP $(cat /var/run/mydaemon.pid) endscript }

Если вы раньше не пользовались программой logrotate или пользовались, но никогда не настраивали тонко под себя, надеюсь эта информация вам поможет.

Источник: https://mnorin.com/logrotate-nastrojka-rotatsii-logov.html

Ссылка на основную публикацию