
Один из самых интересных (и, возможно, один из самых важных) каталогов в системе Linux - это /var/log
. Согласно Стандарт иерархии файловой системы, активность большинства служб, запущенных в системе, записывается в файл внутри этого каталога или одного из его подкаталогов.
Такие файлы известны как журналы и являются ключом к изучению того, как работает система (и как она вела себя в прошлом). Журналы также являются первым источником информации, куда обращаются администраторы и инженеры при устранении неполадок.
Если мы посмотрим на содержимое /var/log
на CentOS / RHEL / Fedora и Debian / Ubuntu (для разнообразия) мы увидим следующие файлы журналов и подкаталоги.
Обратите внимание, что результат может несколько отличаться в вашем случае в зависимости от служб, запущенных в вашей системе (ах), и времени, в течение которого они были запущены.
# ls / var / log.
# ls / var / log.
В обоих случаях мы можем заметить, что некоторые имена журналов заканчиваются, как ожидалось, на
"бревно", в то время как другие переименовываются с использованием даты (например, maillog-20160822 на CentOS) или сжатый (рассмотрим auth.log.2.gz и mysql.log.1.gz на Debian).Это не поведение по умолчанию на основе выбранного распределения но может быть изменен по желанию с помощью директив в файлах конфигурации, как мы увидим в этой статье.
Если бы журналы хранились вечно, они в конечном итоге заполнили бы файловую систему, где /var/log проживает. Чтобы этого не произошло, системный администратор может использовать красивую утилиту под названием logrotate для периодической очистки журналов.
В нескольких словах, logrotate переименовывает или сжимает основной журнал при выполнении условия (подробнее об этом через минуту), чтобы следующее событие было записано в пустой файл.
Кроме того, он удалит "Старый" log-файлы и будут хранить самые свежие. Конечно, мы сами решаем, что "Старый" означает и как часто мы хотим, чтобы logrotate очищал журналы за нас.
Установить logrotate, просто используйте свой менеджер пакетов:
В Debian и Ubuntu # aptitude update && aptitude install logrotate На CentOS, RHEL и Fedora # yum update && yum install logrotate.
Стоит отметить, что файл конфигурации (/etc/logrotate.conf
) может указывать на то, что на отдельных .conf
файлы внутри /etc/logrotate.d.
Это будет так, если и только если следующая строка существует и не закомментирована:
включить /etc/logrotate.d.
Мы будем придерживаться этого подхода, так как он поможет нам поддерживать порядок и использовать Дебиаn для следующих примеров.
Будучи очень универсальным инструментом, logrotate предоставляет множество директив, которые помогают нам настроить, когда и как будут вращаться журналы, а также что должно происходить сразу после этого.
Давайте вставим в /etc/logrotate.d/apache2.conf (обратите внимание, что, скорее всего, вам придется создать этот файл) и изучите каждую строку, чтобы указать ее назначение:
apache2.conf
/ var / log / apache2 / * {еженедельно чередовать 3 размера 10M сжатие delaycompress. }
Первая строка указывает, что директивы внутри блока применяются ко всем журналам внутри /var/log/apache2:
Давайте выполним пробный прогон, чтобы увидеть, что будет делать logrotate, если бы он действительно был выполнен сейчас. Использовать -d
option, за которым следует файл конфигурации (вы можете запустить logrotate, пропустив эту опцию):
# logrotate -d /etc/logrotate.d/apache2.conf.
Результаты показаны ниже:
Вместо сжатия журналов мы могли бы переименовать их после Дата когда они были повернуты. Для этого мы будем использовать dateext
директива. Если наш формат даты отличается от формата по умолчанию ггггммдд, мы можем указать его, используя Формат даты.
Обратите внимание, что мы можем даже предотвратить ротацию, если журнал пуст с помощью непустой. Кроме того, пусть logrotate отправит обновленный журнал по почте системному администратору ([электронная почта защищена] в этом случае) для его / ее справки (для этого потребуется почтовый сервер будет настроен, что выходит за рамки данной статьи).
Если вы хотите получать электронные письма о logrotate, вы можете настроить почтовый сервер Postfix, как показано здесь: Установить почтовый сервер Postfix
На этот раз мы будем использовать /etc/logrotate.d/squid.conf только вращать /var/log/squid/access.log:
squid.conf
/var/log/squid/access.log {ежемесячно создавать 0644 root root rotate 5 size = 1M dateext dateformat -% d% m% Y notifempty mail [электронная почта защищена]
}
Как видно на изображении ниже, этот журнал не нужно было поворачивать. Однако при соблюдении условия размера (размер = 1 млн) повернутый журнал будет переименован access.log-25082020 (если бревно было повернуто на 25 августа 2020 г.) и основной журнал (access.log) будет воссоздан с правами доступа, установленными на 0644 и с корень как владелец и владелец группы.
Наконец, когда количество журналов наконец достигнет 6, самый старый журнал будет отправлен по адресу [электронная почта защищена].
Теперь предположим, что вы хотите запустить пользовательскую команду, когда происходит ротация. Для этого поместите строку с такой командой между директивами postrotate и endcript.
Например, предположим, что мы хотим отправить электронное письмо root, когда любой из журналов внутри /var/log/myservice поворачивается. Давайте добавим красные линии к /etc/logrotate.d/squid.conf:
squid.conf
/ var / log / myservice / * {ежемесячно создавать 0644 root root rotate 5 size = 1M postrotate echo «Произошла ротация». | корень почты endcript }
И последнее, но не менее важное: важно отметить, что параметры, представленные в /etc/logrotate.d/*.conf
переопределить те, что в основном файле конфигурации, в случае конфликтов.
По умолчанию установка logrotate создает внутри файла crontab. /etc/cron.daily названный logrotate. Как и в случае с другими файлами crontab внутри этого каталога, он будет выполняться ежедневно, начиная с 6:25 утра если анакрон не установлен.
В противном случае казнь начнется около 7:35 утра. Для проверки обратите внимание на строку, содержащую cron.daily в любом /etc/crontab или /etc/anacrontab.
В системе, которая генерирует несколько журналов, администрирование таких файлов можно значительно упростить с помощью logrotate. Как мы объясняли в этой статье, он будет автоматически чередовать, сжимать, удалять и отправлять журналы по почте на периодической основе или когда файл достигает заданного размера.
Просто убедитесь, что он настроен на запуск как задание cron, и logrotate упростит вам задачу. Для получения дополнительных сведений см. Справочную страницу.
У вас есть вопросы или предложения по этой статье? Не стесняйтесь сообщить нам, используя форму комментариев ниже.