Настройка logrotate + доступ для сбора логов по SFTP
У меня стояла задача: настроить сжатие логов DNS сервера Unbound, с возможностью удобного сбора этих бэкапов в коллектор. Также требовалось ограничить права доступа, чтобы с коллектора можно было зайти только в дирректорию, где хранятся бэкапы логов. Указанные действия проводил на CentOS 7 Minimal и CentOS 6.6 Minimal.
1) Сперва создаем группу пользователей, для которой будет ограничен доступ только по SFTP:
2) Далее правим конфигурацию ssh:
Требуется в самом конце закомментировать строку #Subsystem sftp /usr/libexec/openssh/sftp-server и ограничить доступ для группы пользователей sftpd только по SFTP и только в домашнюю директорию. Для этого нужно добавить в конце следующие строки:
3) Создаем пользователя dnslog, назначаем ему домашнюю папку и права на эту папку. Владелец должен быть root, никто другой не должен иметь прав на запись в эту папку, иначе ничего не получится:
4) Создаем папку, внутри домашней директории нашего пользователя, для которой у logrotate будут права на запись.
Доступ для коллектора организован, теперь можно подключиться по SFTP и проверить, что все работает. Далее настроим ротацию логов:
5) Создаем в папке /etc/logrotate.d/ файл, в котором будут прописаны настройки ротации наших логов.
Настройки примерно такие:
Далее я установил время ротации через крон.
6) В файле /etc/crontab добавил следующую строку:
23 * * * * root run-parts /etc/cron.hourly
И перезагружаем крон:
Ротация будет осуществляться каждый час в 23 минуты.
7) В папке /etc/cron.hourly/ создаем файл с любым именем, где пишем скрипт, который будет выполняться при наступлении времени ротации, с таким содержимым:
Вот и все. Логи будут автоматически складываться в папку /home/dnslog/logs/
Проверить настройки ротации можно командой:
Также, стоит отметить, что в Unbound существует два способа ведения логов: средствами Unbound и через syslog. Через syslog — лучший способ, так как не так тормозит работу Unbound. В указанном примере описана ротация логов средствами Unbound. Чтобы настроить логгирование через syslog, в конфигурации Unbound нужно включить параметр:
Источник
Настройка Logrotate
В Linux, большинство сервисов и программ, которые работают в фоне, таких как Apache, Nginx, Postfix и других записывают информацию о своем состоянии, результатах работы и ошибках в лог файлы. Стандартное расположение логов или как их еще называют — журналов — в папке /var/log.
С помощью анализа логов вы можете понять что работает не так, почему произошла ошибка и как решить возникшую проблему. Но тот кроется одна проблема. Размер логов постоянно растет и они занимают все больше и больше места на диске, поэтому необходимо вовремя чистить логи и удалять устаревшие записи, чтобы они не мешали нормально работать. Это можно делать вручную время от времени или настроить скрипты Cron, но есть еще более простой вариант — утилита logrotate. В этой статье будет рассмотрена настройка logrotate и ее использование.
Как работает Logrotate?
Утилита Logrotate предназначена для автоматизации обработки журналов. Она может выполнять с ними необходимые действия в зависимости от определенных условий и правил соответствия. Например, можно сжимать журналы в архив или отправлять на другой сервер когда они достигают определенного размера, возраста, или других параметров.
Проверку условий можно настроить ежедневно, еженедельно или ежемесячно. Это позволяет создать схему ротации логов, удобную именно для вас и вашего сервера. Также ротация логов может быть полезна на домашнем компьютере, но здесь она не так важна как на серверах, где только в логи Apache могут записываться до сотен тысяч строк ежедневно.
Настройка Logrotate
Logrotate — это популярная утилита, поэтому в большинстве дистрибутивов она поставляется по умолчанию. Вы можете убедиться, что программа установлена в вашем дистрибутиве, попытавшись ее установить. Например, в CentOS:
sudo yum install logrotate
Или в Ubuntu и основанных на ней дистрибутивах:
sudo apt install logrotate
Теперь, даже если утилита не была установлена, вы ее установите. Все основные настройки программы находятся в файле /etc/logrotate.conf, дополнительные настройки, касаемо правил и других возможностей могут быть размещены в папке /etc/logroate.d/. Вы можете размещать все настройки logroatae прямо в основном конфигурационном файле, будет более правильно, если настройки для каждого отдельного сервиса будут находиться в отдельном файле, в папке /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:
Настройка Logrotate завершена, а вам осталось всего лишь расписать как будет выполняться ротация логов для каждого из журналов, которые занимают много места.
Выводы
В этой статье мы рассмотрели как выполняется настройка logrotate centos или в любом другом дистрибутиве Linux. Работа утилиты не сильно отличается в зависимости от дистрибутивов. Если у вас есть сервер с большой нагрузкой, вам обязательно необходимо настроить ротацию логов. Надеюсь, эта информация была полезной для вас. На завершение видео, о том как выполняется ротация логов в Ubuntu от LPIC:
И еще одно на английском:
Источник
Настройка ротации логов linux
logrotate — обращение, сжатие, и отправление электронной почтой файлов системных сообщений
СИНТАКСИС
logrotate [-dv] [-f|—force] [-s|—state файл] файл_конфигурации+
ОПИСАНИЕ
logrotate разработан для облегчения администрирования систем, которые порождают большое количество файлов журналов происходящих в системе событий. Утилита предоставляет автоматическое обращение, сжатие, удаление и отправление по электронной почте журналов системы. Каждый файл журнала сообщений может обрабатываться ежедневно, еженедельно, ежемесячно, либо когда увеличится в размерах выше указанного предела. Обычно logrotate выполняется в порядке ежедневного задания службы cron. В течении одного дня он не будет несколько раз изменять файл журнала сообщений, если критерий обработки для этого журнала не основан на размере файла и logrotate не запускается каждый день многократно; если не применяется опция -f или -force. В командной строке может быть задано любое количество конфигурационных файлов. Каждый последующий конфигурационный файл может переназначить настройки заданные в предыдущих файлах; таким образом, для logrotateважен порядок следования файлов конфигурации. Широко распространено применение единственного конфигурационного файла, включающего в себя другие используемые файлы настроек. О том, как это осуществить с помощью директивы include, смотрите ниже. Если в командной строке задан каталог, то все файлы, находящиеся в этом каталоге, используются в качестве конфигурационных. Если аргументы командной строки не заданы, то logrotate выведет информацию о версии программы, авторских правах и краткую справку об использовании. В случае возникновения любых ошибок при обработке журналов logrotate закончит работу с ненулевым значением кода возврата.
ОПЦИИ
ФАЙЛ КОНФИГУРАЦИИ
Всю необходимую информацию для обращения файлов журналов logrotate извлекает из группы конфигурационных файлов, заданных в командной строке. Каждый файл конфигурации может установить глобальные опции (вместе с тем, локальные значения опций переопределяют глобальные, а последующие определения замещают предыдущие) и определить обрабатываемый файл журнала. Простой конфигурационный файл содержит примерно следующее:
Первые несколько строк устанавливают глобальные опции; в данном примере после обращения журналы сжимаются. Стоит отметить, что вставлять комментарии в файл конфигурации можно в любой строке, первый символ которой, не являющийся пробелом — это символ «#».
Следующий раздел этого конфигурационного файла определяет обращение файла системных сообщений /var/log/messages. Журнал пройдёт через пятинедельный цикл обращений, прежде чем будет удалён. После обращения (циклического сдвига) журнала, но перед сжатием старого (сдвинутого) журнала, будет выполнена команда /sbin/killall -HUP syslogd.
В следующем разделе определяются параметры обращения для /var/log/httpd/access.log и /var/log/httpd/error.log. Эти файлы будут циклически сдвинуты по достижению размера в 100 Кб, а старые файлы журналов будут извлечены из архивов и отправлены электронной почтой на адрес my@example.com после 5 обращений (циклических сдвигов), прежде чем будут удалены. Параметр sharedscripts означает, что скрипт postrotate будет выполнятся только один раз, а не после обработки каждого файла. Заметьте, что двойные кавычки вокруг первого имени файла в начале раздела, позволяют logrotate обращаться с именами файлов журналов, содержащими пробелы. Поддерживаются обычные правила цитирования командной оболочки shell с употреблением символов ‘, » и \.
В последнем разделе определены параметры для все файлов, находящихся в /var/log/news. Обращение всех файлов производится ежемесячно. Это предусматривает единые указания для обращения, и в случае возникновения ошибки при обработке больше чем одного файла сжатие файлов журналов не будет произведено.
Далее представлена информация о директивах, которые могут быть указаны в конфигурационном файле logrotate:
compress Старые версии файлов журналов будут сжаты (по умолчанию gzip). См. также nocompress. compresscmd Позволяет указать команду для сжатия файлов журналов. По умолчанию gzip. См. также compress. uncompresscmd Директива позволяет указать команду для декомпрессии файлов журналов. По умолчанию gunzip. compressext Если используется сжатие, определяет расширение сжатых файлов журналов. По умолчанию определяется из настроек команды сжатия. compressoptions Программе сжатия может быть передана опция командной строки, если та их использует. Стандартно для gzip применяется «-9» (максимальное сжатие). copy Создать копию файла журнала, не изменяя оригинал вовсе. Этот параметр может быть использован, например, для создания моментального снимка (среза) текущего файла журнала, или когда некоторой другой утилите требуется обрезать или подчистить файл. При использовании этого параметра не имеет силы директива create, так как старый файл журнала остаётся на своём месте. copytruncate После создания копии, обрезать исходный файл журнала взамен перемещения старого файла журнала и создания нового. Это может найти применение в том случае, когда некоторой программе нельзя указать закрыть её журнал, и таким образом можно постоянно продолжать запись (добавление) в существующий файл журнала. Примите во внимание, что хотя между копированием файла и его обрезанием очень маленький промежуток времени, некоторая часть журналируемых данных может быть потеряна. При использовании этого параметра, не имеет силы директива create, так как старый файл журнала остаётся на своём месте. create режим владелец группа Непосредственно после обращения (перед выполнением скрипта postrotate) создать файл журнала (с тем же именем, что и только что сдвинутый журнал). Аргумент режим определяет режим доступа к файлу журнала в восьмеричном виде (единообразный с chmod(2)), владелец определяет имя пользователя, владеющего создаваемым файлом журнала, и группа определяет группу, к которой будет принадлежать файл журнала. Любые из этих атрибутов могут быть опущены; в этом случае вместо них для нового файла будут использованы атрибуты, имеющие те же значения, что и первоначальный файл журнала. Этот параметр может быть отключен использованием директивы nocreate. daily Ежедневное обращение файлов журналов. delaycompress Отложить сжатие предыдущего файла журнала до следующего циклического сдвига. Эта директива имеет силу только в комбинации с compress. Это может быть использовано в том случае, если некой программе нельзя указать закрыть её файл журнала, и таким образом, можно некоторое время продолжать запись в предыдущий файл журнала. extension расширение Файлы журналов после обращение получат заданное расширение. Если используется сжатие, то после указанного расширения программа сжатия добавит ещё одно (обычно .gz). ifempty Сдвигать файл журнала, даже если он пустой; это поведение можно изменить, применив директиву notifempty (по умолчанию активна ifempty). include файл_или_каталог Читает файл, переданный в качестве аргумента, так, как будто он включен построчно в тело конфигурационного файла с того места, где указана директива include. Если задан каталог, то содержащиеся в нём файлы будут прочитаны в алфавитном порядке, прежде чем переданы на обработку для включения. Файлы, не являющиеся обычными (такие как каталоги и именованные каналы), а также файлы, оканчивающиеся запрещёнными расширениями (определёнными параметром tabooext) — будут проигнорированы. Директива include не может использоваться внутри определения файла журнала. mail адрес По окончании цикла обращения журнал будет отправлен электронной почтой на адрес. Если для отдельных журналов это не требуется, то можно применить директиву nomail. mailfirst При использовании команды mail, посылать только что сдвинутый файл, а не закончивший цикл обращения файл журнала. maillast При использовании команды mail, посылать не только что сдвинутый файл, а закончивший цикл обращения файл журнала (это задано по умолчанию). missingok В случае отсутствия файла журнала перейти к обработке следующего не выдавая сообщения об ошибке. См. также nomissingok. monthly logrotate будет сдвигать файлы журналов раз в месяц (обычно первого числа каждого месяца). nocompress Не сжимать с помощью gzip старые версии файлов журналов. См. также compress. nocopy Не копировать исходный файл журнала и оставить его в штатном местоположении (это переопределяет параметр copy). nocopytruncate После создания копии, не обрезать исходный файл журнала в его штатном местоположении (это переопределяет параметр copytruncate). nocreate Не создавать новый файл журнала (это переопределяет директиву create). nodelaycompress Не откладывать сжатие сдвинутого файла журнала до следующего цикла обращения (это переопределяет директиву delaycompress). nomail Не отправлять старые файлы журналов почтой. nomissingok Если файл журнала не существует, выдать ошибку. Это установлено по умолчанию. noolddir После обращения, журналы остаются в том же каталоге, где расположены текущие журналы (это переопределяет директиву olddir). nosharedscripts Выполнять скрипты prerotate и postrotate для каждого обработанного журнала (это поведение задано по умолчанию, его можно переопределить параметром sharedscripts). notifempty Не сдвигать журнал, если он пуст (это переопределяет параметр ifempty). olddir directory Переместить сдвинутые журналы в каталог. Заданный каталог должен размещаться на том же физическом устройстве, что и обращаемый файл журнала. При использовании этого параметра все старые версии журнала будут попадать в каталог. Этот параметр может быть переопределён параметром noolddir. postrotate/endscript Строки с директивами, находящиеся между postrotate и endscript (которые сами должны располагаться на отдельных строках), будут выполнены после обращения журнала. Эти директивы могут находиться только внутри определения файла журнала. См. также prerotate. prerotate/endscript Строки с директивами, находящиеся между prerotate и endscript (которые сами должны располагаться на отдельных строках), будут выполнены перед обращением журнала и только в случае если журнал действительно будет сдвинут. Эти директивы могут находиться только внутри определения файла журнала. См. также postrotate. rotate раз Файл журнала будет сдвинут заданное количество раз, прежде чем будет удалён или послан по электронной почте на адрес, указанный в директиве mail. Если указано 0 раз, то старый журнал вместо обращения будет удалён. size размер Файлы журналов будут сдвинуты, когда станут больше указанного размера в байтах. Если размер оканчивается символом M, то размер интерпретируется в мегабайтах. Если использовать k, то можно задать размер в килобайтах. Таким образом, директивы size 100, size 100k, и size 100M являются верными. sharedscripts Обычно скрипты prescript и postscript выполняются для каждого обрабатываемого журнала; это значит, что один и то же скрипт может выполняться несколько раз для одной конфигурационной записи, которая охватывает множество файлов (как в примере /var/log/news/*). Если параметр sharedscript указан, то скрипты будут выполнены только один раз, вне зависимости от количества журналов, подходящих под заданный шаблон. Однако если ни один из журналов, соответствующих шаблону, не требует обращения, то скрипты не будут выполнены вовсе. Этот параметр переопределяет директиву nosharedscripts. start число Заданное число — то, с которого начнётся счёт обращений. Например, если указать 0, после первого обращения (сдвига оригинального файла журнала) журналам будет присвоено расширение .0. Если указать 9, файлы журналов будут создаваться с расширением .9, пропустив 0-8. Файлы по-прежнему будут обращаться (сдвигаться) столько раз, сколько указано в директиве count. tabooext [+] список_расширений Изменяет текущий список запрещённых расширений (см. include). Если списку расширений предшествует знак +, то этот список прибавится к текущему, иначе заместит его. При первоначальном запуске список содержит следующие расширения: .rpmorig, .rpmsave, ,v, .swp, .rpmnew и
. weekly Файлы журналов будут сдвинуты, если текущий день недели меньше дня недели, в который произошло последнее обращение журнала, или если с тех пор прошло больше недели. Это почти то же самое, что и обращение журналов по понедельникам, но работает лучше, если logrotateне запускается каждую ночь.
Источник