Это старая версия документа!
Управление сервисами в т.ч. и логами в системе, происходит системой инициализации systemd.
Хранит журналы в бинарном виде. Находится выше по иерархии чем syslogd и принимает события от него в т.ч.
Задается максимальное доступное место на диске, по достижении, сообщения удаляются с конца.
Задается в параметрах SystemMaxUse= и RuntimeMaxUse= в файле /etc/systemd/journal.conf.
Оф сайт
Тут тоже неплохая дока
Rsyslog на Debian, настройка сервера сбора логов
Конфигурация Rsyslog
Заменитель свойств
Замена старой syslog, принимает и обрабатывает лог-записи, есть несколько вариантов входа, в основном псевдоустройство /dev/log, так же может брать из файлов, сети и т.д., регулируется подключаемыми модулями
Конфигурация в файле /etc/rsyslog.conf, либо «/etc/rsyslog.d/50-default.conf», так же подтягиваются файлы *.conf из папки /etc/rsyslog.d, для пользовательской конфигурации.
При сетевой передаче рекомендуется использовать протокол Relp, специальный для этой утилиты, более надежный в сравнении с tcp.
Формат RainerScript позволяет задавать С-подобные правила обработки сообщений. Со старыми директивами могут быть проблемы, поэтому не следует использовать его с устаревшими директивами
Обработка происходит в блоках RuleSet, все что не входит в эти блоки, входит в блок по умолчанию.
Так же, поступающие сообщения парсятся, так же есть парсер по умолчанию, извлекает части сообщения, типа $msg, $rawmsg, $fromhost, $syslogtag, $programname и т.д.
Для остановки процесса после обработки команда stop
Некоторые модули для использования в действиях ()
Запишите все сообщения средств auth и authpriv в файл /var/log/auth.logи продолжите обработку этих сообщений:
# legacy auth,authpriv.* /var/log/auth.log # modern if ( $syslogfacility-text == "auth" or $syslogfacility-text == "authpriv" ) then { action(type="omfile" file="/var/log/auth.log") }
Записать все сообщения с именем программы, начинающимся с «haproxy» в файл /var/log/haproxy.log, не сбрасывать буфер после каждого сообщения и прекратить дальнейшую обработку:
# legacy (note the minus sign in front of filename - it disables buffer flush) :programname, startswith, "haproxy", -/var/log/haproxy.log & ~ # modern if ( $programname startswith "haproxy" ) then { action(type="omfile" file="/var/log/haproxy.log" flushOnTXEnd="off") stop } # we can mix legacy and modern if $programname startswith "haproxy" then -/var/log/haproxy.log &~
Простой вариант условия
if $syslogtag == 'example' then /var/log/test/out.log # Либо легаси подход :programname, contains, "MyProgram" /var/log/MyProgram.log
Для вывода сообщений можно использовать шаблон, задается директивой (Тут есть описание)
Вариант чтения всех файлов по маске и сохранения оригинального имени на выходе
input(type="imfile" File="/srv/myapp/logs/*.log" Tag="myapp__" Ruleset="myapp_logs" addMetadata="on") ruleset(name="myapp_logs") { set $.suffix=re_extract($!metadata!filename, "(.*)/([^/]*)", 0, 2, "all.log"); # Либо можно функцией field() #set $.originfilename=field($!metadata!filename, 47, 7); call sendToLogserver }
Динамические имена файлов на выходе
# Легаси подход $template DynFile, "/var/log/test/test-%syslogtag%.log" *.* ?DynFile;myTemlpate # Новый подход template (name="DynFile" type="string" string="/var/log/test/test-%syslogtag%.log") action(type = "omfile" dynaFile="DynFile" template="myTemlpate")
Утилита Logrotate, основная конфигурация /etc/logrotate.conf, в папке /etc/logrotate.d/ отдельные конфиги
Сама утилита запускается раз в день, в планировщике есть файл- /etc/cron.daily/logrotate
Без порядковых номеров ротация перестает работать
Поэтому часовой интервал игнорируется, для меньшего интервала нужно создать отдельный конфиг (в другом месте для того чтобы не пересекаться с ежедневным), смысл в том чтобы запускать ее через крон самостоятельно, для этого настроим задачу:
# Создали файл конфига nano /home/sammy/logrotate.conf # Запускаем вручную (-d для тестирования) logrotate /home/sammy/logrotate.conf # Добавляем в крон "15 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf"
Ротировать можно как регулярно (по времени) так и по размеру файла
Можно выполнять скрипты до и после ротации
/var/log/messages # файл для работы, можно указать маску { daily rotate 3 # хранить 3 последних файла size 10M # при условии что файл не меньше 10мб compress # сжимать delaycompress # кроме последнего и предпоследнего }
Для самостоятельного запуска, переименовываем файл после ротации. Его нужно перемещать создавать копию, без номеров ротация перестает работать
/usr/zxbcps/files/zx.tar { rotate 3 sharedscripts # Для того чтобы скрипт выполнялся один раз postrotate mv /usr/zxbcps/files/zx.tar.1 /usr/zxbcps/files/zzx_$(date +%Y-%m-%d_%H:%M).tar endscript }