|
Bog BOS: rsyslog - сервер syslog
|
Последнее изменение файла: 2024.12.23
Скопировано с www.bog.pp.ru: 2025.01.18
Bog BOS: rsyslog - сервер syslog
rsyslog - сервер протокола syslog, обеспечивающий передачу и хранение сообщений.
Один из претендентов на замену "стандартного" сервера sysklogd в Linux (может быть полностью с ним совместим),
ответвился в 2004 году.
Позволяет принимать сообщения из множества типов источников, обрабатывать их и пересылать и/или записывать множеством способов
благодаря модульной структуре.
Среди возможностей:
- поддержка RFC 5424 с транспортом по UDP (RFC 5426) и TCP (RFC 6587, обе версии?) и TLS (RFC 5425)
- возможность использовать TCP для передачи сообщений
- возможность сжатия сообщений при передаче
- возможность шифрования и цифровой подписи при передаче сообщений (пакет rsyslog-gnutls)
- возможность шифрования журналов (пакет rsyslog-crypto)
- аутентификация и авторизация с использованием Kerberos (пакет rsyslog-gssapi)
- возможность обеспечения резервного сервера
- возможность хранения журналов в БД (MySQL/MariaDB - пакет rsyslog-mysql,
PostgreSQL - пакет rsyslog-pgsql, прочие СУБД - пакет rsyslog-elasticsearch)
- возможность использовать RELP (надёжный протокол передачи, TCP не гарантирует доставки,
т.к. неизвестно какие сообщения - до 1000 - потерялись при разрыве соединения)
для передачи и приёма сообщений (пакет rsyslog-relp)
- буферизация сообщений перед записью
- фильтрация и обработка сообщений, включая регулярные выражения и генерацию имён файлов
- возможность посылки e-mail и запуска скриптов по фильтру и посылки SNMP trap (пакет rsyslog-snmp)
- многозадачность и многопоточность
- управление нагрузкой и приоритетами
- отметки времени по ISO 8601 и RFC 3339
- самостоятельное ротирование журналов по размеру и времени
Продвигается (продвигался) фирмой Red Hat (теперь она продвигает systemd-journald),
в частности, в RHEL5 включены версии 3.22.1 и 5.8.12 как rsyslog5;
в RHEL6 (версии 5.8.10 и 7.4.10 как rsyslog7) и RHEL7 (версии 7.4.7 и 8.24.0 в RHEL 7.4) и RHEL8 (версия 8.2102.0) и RHEL9 (версия 8.2310.0) ставится по умолчанию.
Имеется платная поддержка (Adiscon). Лицензия - GPLv3 (часть ядра под LGPL).
Работает под Linux (Red Hat, Debian, Ubuntu, OpenSUSE, Gentoo), FreeBSD, Solaris, AIX (устаревшая информация).
Различные версии rsyslog (2, 3, 5, 7 и 8) имеют различный формат конфигурационного файла и архитектуру.
Несмотря на попытки обеспечить совместимость и совместное использование кусков конфигурационного файла в разных форматах
безопаснее рассматривать их как различные программы и по возможности не смешивать.
Имеется путаница с rsyslog и rsyslogd: SYSLOG_IDENTIFIER=rsyslogd и _COMM=rsyslogd (_EXE=/usr/sbin/rsyslogd, _CMDLINE=/usr/sbin/rsyslogd),
но _SYSTEMD_UNIT=rsyslog.service.
Сообщения поступают в rsyslogd с помощью модулей ввода (im*), поступившее сообщение (объект "input()") передаётся
препроцессору, результат препроцессирования попадает в главную очередь (main queue, MainMsg, в реальности очередь набора правил?
создаётся при разборе файла конфигурации), сообщения из главной очереди разбираются
(возможно, что многопоточно; размер пула рабочих потоков изменяется по потребности; риск потери порядка сообщений),
фильтруются и попадают в очереди действий (Action, создаётся при каждом использовании команды action).
При фильтрации и маршрутизации используется набор правил (ruleset), имеется набор правил по умолчанию (RSYSLOG_DefaultRuleset).
К набору правил привязывается модуль разбора (pm*), который переводит поступившее
сообщение (не транспортный кадр!) во внутренний формат (разбирает его на свойства) перед фильтрацией.
Модули разбора могут быть соединены в цепочку, элементы которой по очереди пытаются справиться с поступившим сообщением.
Каждое правило набора состоит из фильтра и списка действий (объект 'action(type="тип")').
Правила из набора проверяются на соответствие по очереди пока не будет достигнут конец набора
или не будет получена команда прекратить обработку сообщения (discard; в старых настройках - команда "stop" или "~").
Подходящие правила вызывают постановку сообщения в соответствующую очередь действия (или несколько очередей).
Менеджер очереди действия забирает очередное сообщение из очереди и вызывает обработчик действия (action),
который обрабатывает его с помощью модуля вывода (om*).
Менеджер очереди может быть привязан к набору правил.
Режимы обслуживания (QueueType) очереди:
- прямой (Direct, без буферизации, по умолчанию для очереди действия)
- очередь на диске (Disk, буферизация с использованием файловой системы, кусками по 10MB, надёжно, но очень медленно)
- очередь в памяти (LinkedList (список динамического размера) и FixedArray (массив фиксированного размера, 10000 элементов по умолчанию для главной очереди))
- очередь в памяти с опорой на файловую систему (disk-assisted memory mode (DA), определить очередь в памяти и задать файл для хранения)
Количество потоков обработки очереди выбирается автоматически
в зависимости от заполнения очереди (QueueWorkerThreadMinimumMessages, QueueWorkerThreads).
Ненужные более потоки уничтожаются при истечении времени неактивности (QueueWorkerTimeoutShutdown).
При катастрофическом переполнении очереди (QueueDiscardMark) менее приоритетные сообщения (QueueDiscardSeverity) выкидываются.
При длительном переполнении очереди приём новых сообщений останавливается полностью (QueueTimeoutEnqueue) и все входящие сообщения могут выкидываться.
Скорость обработки можно замедлять паузами между обработкой сообщений (QueueDequeueSlowdown).
В дополнение к традиционным для sysklogd фильтрам имеются управляющие структуры RainerScript (if, foreach, call, continue).
При обработке можно использовать внутренние переменные (Property) и операции над ними ("set $имя = выражение;", unset, reset).
Описания шаблонов (определяются статически при инициализации) позволяют задать для действия выходной формат сообщения
или имя файла в дополнение к встроенным шаблонам.
Программа имеет модульную структуру (/usr/lib64/rsyslog/):
- модули ввода - /usr/lib64/rsyslog/im*
- imfile - ввод сообщений из текстового файла
- imgssapi - Kerberos (rsyslog-gssapi)
- imjournal - systemd journal
- imklog - приём сообщений ядра (klogd), в текущей реальности принимаются через journald
- immark - отметки MARK
- impstats - выдача собранной другими модулями статистики.
- imptcp - приём сообщений с использованием протокола TCP (упрощённый, но быстрый)
- imrelp - приём сообщений с использованием протокола RELP (пакет rsyslog-relp)
- imtcp - приём сообщений с использованием протокола TCP
- imudp - приём сообщений с использованием обычного syslog протокола UDP
- imuxsock - приём местных сообщений (logger) через сокет
- модули разбора
- модули вывода -/usr/lib64/rsyslog/om*
- omfile - вывод в файл
- omelasticsearch (вывод с использованием протокола ElasticSearch, rsyslog-elasticsearch)
- omgssapi - Kerberos (rsyslog-gssapi)
- omjournal - systemd journal
- omlibdbi - модуль записи сообщений в БД через libdbi (Firebird/Interbase, MS SQL, Sybase, SQLLite, Ingres, Oracle, пакет rsyslog-libdbi)
- ommail - посылка сообщений с помощью e-mail
- ommysql - модуль записи сообщений в БД MySQL (пакет rsyslog-mysql)
- ompgsql - модуль записи сообщений в БД PostgreSQL (пакет rsyslog-pgsql)
- omprog - передача потока сообщений внешней программе
- omrelp - модуль передачи сообщений с помощью протокола RELP (пакет rsyslog-relp)
- omruleset - вызов набора правил (рекомендуется call)
- omsnmp - посылка сообщений с помощью SNMP trap v1 и v2c (пакет rsyslog-snmp)
- omudpspoof - выводит сообщения с использованием UDP с подделкой IP адреса (пакет rsyslog-udpspoof)
- omuxsock - в сокет
- omstdout - на stdout (для отладки)
- omtesting
- модули модификации (работают как модули разбора или вывода) - /usr/lib64/rsyslog/mm*
- mmanon
- mmaudit - формат Linux audit (пакет rsyslog-mmaudit)
- mmcount
- mmexternal
- mmjsonparse - формат JSON (пакет rsyslog-mmjsonparse)
- mmnormalize - приведение к стандартному виду (пакет rsyslog-mmnormalize)
- mmsnmptrapd - сообщения в формате snmptrapd приводятся к формату syslog (пакет rsyslog-mmsnmptrapd)
- mmutf8fix
- модули дополнительных возможностей (Library Modules) - /usr/lib64/rsyslog/lm*
- lmcry_gcry - (шифрование файлов в omfile, rsyslog-crypto)
- lmgssutil - Kerberos (rsyslog-gssapi)
- lmnet
- lmnetstrms
- lmnsd_gtls - приём с использованием TLS (syslog-transport-tls, пакет rsyslog-gnutls)
- lmnsd_ptcp
- lmregexp
- lmstrmsrv -
- lmtcpclt
- lmtcpsrv
- lmzlibw
- модули функций - /usr/lib64/rsyslog/fm*
- модули строк для ускорения стандартных шаблонов - /usr/lib64/rsyslog/sm* - smfile, smfwd, smfwd
Реакция на сигналы:
- SIGHUP - реинициализация (закрывает все файлы, ?читает заново файл конфигурации,
?разрываются TCP соединения, ?сбрасываются хранящиеся в памяти очереди)
- SIGTERM, SIGINT, SIGQUIT - завершение работы
- SIGUSR1 - включить/выключить отладку (только при использовании ключа -d)
- SIGCHLD - дождаться завершения порождённых процессов
Переменые окружения:
- RSYSLOG_DEBUG - список опций отладки через пробел: Help, Debug, DebugOnDemand, LogFuncFlow, FileTrace=имя-файла-программы, PrintFuncDB, PrintMutexAction,
NoLogTimeStamp, NoStdOut
- RSYSLOG_DEBUGLOG - имя файла отладочной печати
- RSYSLOG_MODDIR - имя каталога, содержащего модули
Пакет rsyslog-doc содержит документацию в формате HTML.
Утилита rsyslog-recover-qi.pl восстанавливает файлы очереди DA
Ключи запуска:
- -D # разбор конфигурации в отладочном режиме
- -d # отладочный режим; не переходит в фоновый режим
- -f имя-файла-конфигурации # по умолчанию /etc/rsyslog.conf
- -i pid-файл # по умолчанию - /var/run/rsyslogd.pid (/run/rsyslogd.pid);
требуется при наличии нескольких экземпляров rsyslogd на сервере; имя файла "NONE", чтобы не писать
- -n # не уходить в фоновый режим; необходим для запуска из init
- -N уровень-проверки-конфигурации # проверить правильность конфигурационного файла, 1 - обычная проверка
- -o имя-файла # собрать всё содержимое включаемых файлов настройки в один общий файл
- -C # не изменять корневой каталог процесса (для отладки)
- -v # вывести номер версии
Сервис (юнит) /usr/lib/systemd/system/rsyslog.service (/etc/systemd/system/multi-user.target.wants/rsyslog.service)
после network-online.target, т.е. до подъёма сети в журнале ничего не будет. Берёт ключи из /etc/sysconfig/rsyslog и добавляет "-n".
StandardOutput=null (а зачем?).
Если нужно работать с сетью, то необходимо отключить RestrictNamespaces=net
и RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX (интересно, каких семейств ему не хватает? AF_NETLINK?).
Файл настройки (обычно /etc/rsyslog.conf и файлы каталога /etc/rsyslog.d) одновременно может содержать конструкции
в стиле basic (sysklogd, но не совсем), в старом стиле rsyslog версий 2, 3 и 5 (legacy, obsolete legacy, директивы начинаются с "$")
и в новом стиле версий 6, 7 и 8 (advanced, RainerScript).
Некоторые модули не адаптированы к новому (advanced) стилю, некоторые возможности нельзя описать старым стилем (basic).
В старом стиле директивы обрабатывались построчно, в новом стиле весь файл - это поток сознания.
Комментарии начинаются с символа '#'.
Обратная косая черта в конце строки означает продолжение правила на следующей строке.
Файл настройки в стиле basic делится на 4 секции:
- глобальные директивы начинаются с символа '$', тьма их; если они вам нужны,
то скорее всего вам нужен формат настройки advanced
- шаблоны, описывающие форматы сообщений; в шаблонах используются свойства сообщений (например, '%HOSTNAME%') и системы ('$NOW'))
- каналы вывода
- правила маршрутизации и обработки сообщений
Шаблоны позволяют переформатировать сообшения перед выводом.
Если вам недостаточно встроенных шаблонов (RSYSLOG_TraditionalFileFormat (RFC 3164),
RSYSLOG_FileFormat, RSYSLOG_TraditionalForwardFormat, RSYSLOG_ForwardFormat,
RSYSLOG_SyslogProtocol23Format (RFC 5424)),
то скорее всего вам нужен формат настройки advanced.
Каналы вывода - если они вам нужны, то скорее всего вам нужен формат настройки advanced.
Каждое правило состоит из селектора и действия, которые разделяются табуляциями или пробелами.
Получив сообщение rsyslog для каждого правила проверяет не подходит ли
сообщение под шаблон, определяемый селектором. Если подходит, то
выполняется указанное в правиле действие.
Для одного сообщения м.б. выполнено произвольное количество действий
(т.е. обработка сообщения не прекращается при первом успехе).
Селектор состоит из двух частей, разделенных точкой: источник сообщения и уровень серьезности.
Прописные и строчные буквы не различаются.
Можно также использовать числа (см. /usr/include/syslog.h).
Кроме определенных в syslog(3) источников, можно указывать mark (регулярные временные метки),
security (устаревший синоним для auth).
Кроме определенных в syslog.h уровней серьезности можно
использовать warn (синоним для warning), error
(синоним для err), panic (синоним для emerg).
Сообщения с уровнем, равным или выше указанного в селекторе,
и источником, равным указанному в селекторе, считается подходящим.
Звездочка перед точкой соответствует любому источнику, после точки - любому уровню.
Слово none после точки - никакому уровню для данного источника.
Можно указывать несколько источников в одном селекторе через запятую.
В этом случае приоритет можно указывать только для последнего источника.
В одной строке можно указывать несколько селекторов через ';', проверяются слева направо, последующий может отменить действие предыдущих
(если использовать позитивные селекторы, то выполняется логическое ИЛИ,
если негативные (none и восклицательный знак), то логическое И).
Перед уровнем можно поставить знак равенства - селектору будут
соответствовать только сообщения с указанным уровнем (но не с большим);
восклицательный знак - не будут соответствовать сообщения с
уровнем равным или большим; восклицательный знак и равенство - не будут
соответствовать сообщения с уровнем, равным указанному.
В качестве действия можно указывать:
- имя обычного файла (полный путь от корня или относительно рабочего каталога rsyslog),
минус перед именем отключает синхронизацию записи (и так выключена по умолчанию?);
динамические имена файлов задаются в виде "?шаблон-имени;шаблон-форматирования" (шаблоны д.б. определены ранее)
- поименованные каналы - fifo (перед именем ставится
вертикальная черта), сам канал д.б. создан перед
запуском syslogd командой mkfifo
- терминал или консоль (/dev/console)
- @имя-хоста[:номер-порта] (передать сообщение для удаленной журнализации по UDP (RFC 3164))
- @@имя-хоста[:номер-порта] (передать сообщение для удаленной журнализации по TCP по протоколу syslog-ng
(RFC 6587, RFC 5424 по TCP без TLS)
- список пользователей (через запятую), на терминалы которых будет послано сообщение (или ":omusrmsg:имя-пользователя")
- звездочка для посылки сообщения на все терминалы (wall) (или ":omusrmsg:*")
- :имя-модуля-вывода:параметры;шаблон
- >параметры # запись в БД MySQL
- stop # обработка сообщения прекращается, дальнейшие фильтры не рассматриваются
- ~ # обработка сообщения прекращается, дальнейшие фильтры не рассматриваются
- $имя-канала # канал вывода д.б. описан ранее
- ^имя-программы;имя-шаблона # аналогично ":omprog:параметры;имя-шаблона, сгенерированное по шаблону сообщение передаётся как параметр командной строки
После действия можно указать ';' и имя шаблона, с помощью которого сообщение преобразуется перед выводом.
Загрузка и настройка модулей осуществляется с помощью глобальных директив вида
$ModLoad imudp
$UDPServerRun 514
$ModLoad imuxsock
$SystemLogSocketName /run/systemd/journal/syslog
$ModLoad imjournal
В стиле advanced комментарии начинаются с символа '#' до конца строки или начинаются с "/*" и заканчиваются "*/".
Типы параметров:
- целые числа; знаки пунктуации '.' и ',' игнорируются
- размеры; модификаторы типа k (1024) и K (1000)
- строка
- слово (без кавычек)
- символ (без кавычек)
- булевское (on или 1, off или 0)
Строчные константы записываются как 'строка', "строка" (необходимо маскировать '$'), `echo переменная-окружения` (8.33), `cat имя-файла` (8.33).
Маскировка спецсимволов: "\n", "\123", "\xFF", "\\".
Файл представляет собой совокупность описаний (действуют по мере чтения) следующих конфигурационных объектов
(в 8.33 каждому конфигурационному объекту добавлен параметр config.enabled, позволяющий его выключить и включить, по умолчанию - on)
- общие директивы:
- include() - вставка дополнительных файлов или текстов настройки
- global(имя="значение" ...) - глобальные параметры
- timezone(id="MSK" offset="+03:00") - определяет соответствие между именем часового пояса в сообщениях и смещением относительно UTC;
используется модулями разбора сообщений
- module(load="имя-модуля" параметр_загрузки="значение" ...) - загрузка модулей,
некоторые параметры (загрузочные) привязаны к модулю при загрузке и будут одинаковы для всех экземпляров ввода, действия и пр. одного типа,
другие привязаны к экземпляру модуля ввода, действия и пр. при его использовании;
и те и другие приведены при описании модулей
- main_queue(queue.type="тип" ...) - задание параметров главной очереди
- template(name="имя" type="тип" ...) # описания шаблонов формата вывода сообщений и имён файлов
- parser(type="тип-модуля" name="определяемое-имя" параметр="значение" ...) #
описание разборщика, используются модули разбора
- ruleset(name="имя" parser=["первый","второй"] queue.type="тип" ...) { ... } #
описывается набор правил обработки сообщений: фильтры и действия,
определение цепочки разборщиков
- action(queue.type="тип" ...) # действие, внутри набора правил, описание вывода сообщений, используются модули вывода
- input(... ruleset="имя" ...) # описание источника сообщений, используются модули ввода, привязывается к набору правил,
задаются параметры экземпляра ввода
Сообщения поступают от модулей ввода, обрабатываются набором правил (по умолчанию RSYSLOG_DefaultRuleset) с указанием цепочки модулей разборщиков,
правило состоит из условия (filter) и действия, правила проверяются от первого до последнего,
при удовлетворении условия правила сообщение ставится в очереди действий, в которых используются модули вывода с шаблонами форматирования.
Вставка дополнительных файлов и текстов настройки:
- $IncludeConfig - до версии 8.33
- include(file="выражение" mode="abort-if-missing|required|optional") # вычисленное выражение интерпретируется как шаблон имён файлов
- include(text="выражение" # вычисленное выражение подставляется вместо include())
Глобальные параметры (global(имя="значение" ...); ранее устанавливались как "$имя значение";
некоторые параметры ещё не получили новый формат;
можно устанавливать только 1 раз):
- $ResetConfigVariables # сбросить все настройки на настройки по умолчанию
- $DefaultRuleset RSYSLOG_DefaultRuleset # привязывает набор правил для вводов, у которых набор правил не был привязан явно;
не поможет привязать набор правил к модулю вводу, который не имеет возможности привязывать набор правил
- workDirectory=имя-каталога # место хранения вспомогательных файлов (курсоры imfile и imjournal и очереди в файловой системе)
- umask=0ooo # umask для процесса rsyslogd
- shutdown.enable.ctlc="off" # можно останавить по нажатию ^C
- maxMessageSize="8192" # на входе, выходе?
- janitor.interval="20" # интервал в минутах запуска чистильщика
- net.permitACLWarning="on" # если сообщение пришло не из AllowedSender, то выводить предупреждение
- environment # массив (в квадратных скобках через запятую) имён и значений переменных окружения;
переменные rsyslog не воспринимаются
- variables.caseSensitive="off" # чувствительность имён параметров к регистру; в версии 8.30, ранее было "on"
- oversizemsg.errorfile="имя-файла" # в версии 8.35, сюда сбрасывать слишком длинные сообщения (более maxMessageSize)
- oversizemsg.input.mode="truncate|split|accept" # умолчание? в версии 8.35, что делать с сообщениями более maxMessageSize
- oversizemsg.report="on" # в версии 8.35
- abortOnUncleanConfig="off" # в версии 8.37, ранее $AbortOnUncleanConfig, не всегда можно отличить ошибку от предупреждения
- abortOnFailedQueueStartup="off" # в версии 8.2210.0 (между RHEL8 и RHEL9)
- security.abortOnIDResolutionFail="on" # не запускаться при проблемах с именами пользователй и групп при сбросе привилегий; в версии 8.2002.0
- operatingStateFile="" # в версии 8.39.0, имя файла, который содержит информацию о состоянии rsyslogd;
при завершении работы записывается строка "clean shutdown notification", которая ищется при следующем запуске
(при тестировании конфигурации эта строка не записывается, а конфигурация всегда считается ошибочной
(error: operatingStateFile already set to), необходимо перенести команду в самый конец конфигурации)
- reportChildProcessExits={errors|none|all]} # в версии 8.1901.0; что делать при завершении дочернего процесса;
error - сообщать только о завершениях с ненулевым кодом в syslog с источником syslog с уровнем warning;
all - обо всех завершениях с уровнем info
- shutdown.queue.doublesize="off" # удвоить максимальный размер очереди во время выключения сервера
- libcapng.enable="on" # сбросить возможности; в версии 8.2310.0
- libcapng.default="on" # завершаться аварийно, если не удалось сбросить ; в версии 8.2306.0
- $FailOnChownFailure on # имеется параметр failOnChOwnFailure модуля omfile;
не писать в файл, если не удалось создать его с правильным собстенником
- $MaxOpenFiles # если не хватает количества одновременно открытых файлов и соединений (ulimit -n);
в описании юнита EL8 LimitNOFILE=16384, а в EL7 получается 1024
- $ModDir "/usr/lib64/rsyslog/" # каталог загрузки модулей
- $DefaultNetstreamDriver ptcp # подсистема между модулями ввода и ОС: ptcp или gtsl
- $RepeatedMsgContainsOriginalMsg off # сообщение о повторяющихся сообщениях содержит их начальную часть и её надо извлечь;
можно задать отдельно для каждого правила (действия в нём): action.repeatedmsgcontainsoriginalmsg
- $LocalHostIPIF имя-интерфейса # для локальных сообщений устанавливать IP адрес интерфейса
(а если их несколько?) в качестве fromhost-ip вместо 127.0.0.1
- $SpaceLFOnReceive off # заменять на входе LF на пробел
- сеть и DNS
- localHostname=строка # переопределить hostname
- preserveFQDN="off" # не отрезать имя домена, совпадающее с текущим
- net.ipprotocol="unspecified" # ipv4-only или ipv6-only
- net.enableDNS="on" # преобразовывать имена в IP адреса
- net.aclResolveHostname="on" # преобразовывать доменные имена в IP адреса при проверке ACL (AllowedSender)
- net.aclAddHostnameOnFail="off" # при проверке ACL (AllowedSender) имена хостов обычно преобразуются в IP адреса,
если DNS не работает, то использовать доменное имя
- reverselookup.cache.ttl.default="86400" # в секундах, 24 часа; в версии 8.1904.0
- reverselookup.cache.ttl.enable="off" # не чистить кеш обратных DNS запросов; в версии 8.1904.0
- для модулей ввода
- dropMsgsWithMaliciousDNSPtrRecords="off" # детектировать "неправильные" записи PTR;
при отключении в случае "неправильных" записей будет выведен IP адрес
- senders.keepTrack="off" # вести и выводить статистику отправителей к нам (imtcp и imptcp)
- senders.timeoutAfter="43200" # 12 часов, через какое время удалять отправителя из статистики
- senders.reportGoneAway="off"
- senders.reportNew="off"
- inputs.timeout.shutdown="1000" # мс, сколько ожидать завершения модулей ввода при выключении сервера; в версии 8.37
- $AllowedSender {udp|tcp|gss}, {IP-адрес/длина-адреса|шаблон-имени} [,...]
# вместо этого рекомендуется использовать сетевой экран, выдаются предупреждения
- $DropTrailingLFOnReception on # удалён?
- $MarkMessagePeriod 1200 # интервал регулярных отметок (--MARK--) в секундах; 0 - отключить генератор отметок; immark - это модуль ввода
- для модулей разбора
- parser.parseHostnameAndTag="on" # не отключать
- parser.permitSlashInProgramName="off" # при разборе сообщения допускать "/" в свойстве programname ("/sbin/app")
- parser.escapeControlCharactersOnReceive="on" # превращать управляющие символы в "#ooo"; прощай UTF-8;
при этом опции преобразователя drop-cc, space-cc и escape-cc не работают
- parser.escapeControlCharacterTab="on" # превращать символ TAB в "#011"
- parser.escape8BitCharactersOnReceive="off" # преобразовывать все символы с 8-м битом в "#ooo"; прощай UTF-8
- parser.controlCharacterEscapePrefix="#" # было '\'?
- parser.supportCompressionExtension="on" # в версии 8.2106.0; позволяет отключить сжатие при получении сообщений
(сообщения начинаются с символа z вместо PRI)
- умолчания для наборов правил
- default.ruleset.queue.timeoutshutdown
- default.ruleset.queue.timeoutactioncompletion
- default.ruleset.queue.timeoutenqueue
- default.ruleset.queue.timeoutworkerthreadshutdown
- для модулей вывода (действий)
- default.action.queue.timeoutshutdown # в версии 8.1901.0
- default.action.queue.timeoutactioncompletion # в версии 8.1901.0
- default.action.queue.timeoutenqueue # в версии 8.1901.0
- default.action.queue.timeoutworkerthreadshutdown # в версии 8.1901.0
- action.reportSuspension="on" # выводить в syslog при задержках и возобновлении обработки
- action.reportSuspensionContinuation="off" # выводить повторные сообщения о продолжении задержек
- $ActionExecOnlyWhenPreviousIsSuspended off # позволяет обеспечить резервный канал вывода;
можно задавать для правил индивидуально с помощью action.execOnlyWhenPreviousIsSuspended
- $ActionResumeInterval 30 # интервал автоматически увеличивается при повторных неудачах;
можно задавать для правил индивидуально с помощью action.resumeInterval
- $RepeatedMsgReduction off # преобразовывать повторяющиеся сообщения в "Last line repeated ... times"
- внутренние сообщения
- processInternalMessages="off" # обрабатывать созданные нами сообщения или просто сбрасывать в сокет syslog, где journald подхватит и передаст нам;
нужен для вспомогательного сервера syslog на том же хосте, который обрабатывает сообщения по другому
- stdlog.channelspec="?" # из описания liblogging-stdlog: "syslog:|uxsock:имя_файла|journal:|file:имя_файла";
куда сбрасывать созданные нами сообщения при отключённой обработке
- internalmsg.ratelimit.interval="5" # секунд, в версии 8.29
- internalmsg.ratelimit.burst="500" # следующие будут выкинуты, в версии 8.29
- internalmsg.severity="info" # начиная с какого уровеня важности выдавать внутренние сообщения
- errorMessagesToStderr.maxNumber # максимальное количество сообщений на stderr; в версии 8.30
- $ErrorMessagesToStderr on
- $LogRSyslogStatusMessages on # выдавать сообщения при запуске и остановке rsyslogd
- TLS
- defaultNetstreamDriver # ossl или gtls
- defaultNetstreamDriverCAFile # сертификат CA для проверки ключей и сертификатов
- defaultNetstreamDriverKeyFile # приватный ключ этого сервера
- defaultNetstreamDriverCertFile # сертификат сервера
- defaultNetstreamDriverCRLFile # файл отзывов сертификатов (CRL)
- netstreamDriverCaExtraFiles
- defaultopensslengine # список доступных можно посмотреть: openssl engine -t
- отладка
- debug.logFile="имя-файла" # перебивается значением переменной окружения RSYSLOG_DEBUGLOG;
несовместим с abortOnUncleanConfig
- debug.gnutls="0" # от 0 до 10, действует при включённой отладке
- debug.onShutdown="off" # выдать отладочную печать при выключении
- debug.unloadModules="on" # off запрещает выгрузить модуль
- debug.files=массив-имён-файлов # в версии 8.29; генерировать отладочную печать для указанных файлов (?)
- debug.whitelist="on" # в версии 8.29; является ли список файлов в debug.files белым или чёрным списком
- $DebugPrintModuleList on # выводить список модулей при отладке
- $DebugPrintTemplateList on # выводить список шаблонов при отладке
- $DebugPrintCFSyslineHandlerList on
Параметры очереди указываются при описании набора правил, действия и для главной очереди (main_queue):
- queue.type (тип очереди: "FixedArray" (по умолчанию для главной очереди), "LinkedList", "Direct" (по умолчанию для действия), "Disk")
- queue.size (максимальное количество сообщений; по умолчанию 1000 для действия, 50000 для набора правил, 10000 (?) для главной очереди)
- queue.workerThreads="1" (количество потоков обработки, 2 для главной?)
- queue.workerThreadMinimumMessages (размер очереди/количество потоков;
при достижении указанного количества сообщений в очереди добавляется дополнительный поток обработки)
- queue.timeoutWorkerthreadShutdown="60000" (дополнительный поток обработки останавливается,
если работы для него не было указанное количество времени в миллисекундах)
- queue.filename (имя файла (без имени каталога) для хранения содержимого очереди для очереди с хранением в файловой системе и DA)
- queue.spoolDirectory (имя каталога, в котором хранится queue.filename, не создаётся, по умолчанию в рабочем каталоге
- queue.maxDiskSpace (максимальный размер в байтах используемого места в файловой системе)
- queue.maxFileSize (максимальный размер очередного файла DA очереди; 1m для действия, 16m для набора правил)
- queue.highWatermark (90% от queue.size; для DA очередей; при достижении данного количества сообщений в памяти при заполнении
начинает использоваться запись в файловую систему)
- queue.lowWatermark (70% от queue.size; для DA очередей; при достижении данного количества сообщений в памяти при разгрузке
перестаёт использоваться запись в файловую систему)
- queue.dequeueBatchSize (максимальное количество сообщений в пакете при разгрузке очереди; 32 для главной; 128 для действия, 1024 для набора правил)
- queue.minDequeueBatchSize="0" (ожидать queue.minDequeueBatchSize.timeout пока в очереди не наберётся указанноне количество сообщений)
- queue.minDequeueBatchSize.timeout="1000" (миллисекунд)
- queue.dequeueSlowDown="0" (паузы в микросекундах между извлечениями сообщений из очереди)
- queue.dequeueTimeBegin="0" и queue.dequeueTimeEnd="25" (номер часа начала и завершения обработки очереди)
- queue.fullDelaymark (97% от queue.size; при достижении указанной заполненности очереди приём дальнейших сообщений
задерживается (для imudp они теряются))
- queue.lightDelayMark (70% от queue.size; при достижении указанной заполненности очереди отправитель придерживается при возможности)
- queue.discardMark (80% от queue.size и 98% для главной; при достижении указанной заполненности очереди
начинают отбрасываться сообщения менее важные чем queue.discardseverity)
- queue.discardSeverity="8" (8 - никакие, 4 - для главной; важность выбрасываемых сообщений при достижении queue.discardMark)
- queue.timeoutEnqueue="2000" (в миллисекундах; если в течении указанного времени очередь остаётся переполненной
несмотря на попытки придержать приход новых сообщений и удаление неважных, то входящее сообщение удаляется)
- queue.checkpointInterval="0" (интервал синхронизации для очередей в файловой системе)
- queue.syncqueuefiles="off" (использовать fsync для очередей в файловой системе)
- queue.samplingInterval="0" (обрабатывать каждое указанное из приходящих сообщений)
- queue.timeoutshutdown (ожидать завершения обработки при удалении очереди; в миллисекундах; 10 для действия, 1500 для набора правил)
- queue.timeoutActionCompletion="1000" (ожидать завершения обработки последнего сообщения при удалении очереди; в миллисекундах)
- queue.saveOnShutdown="off" (сохранять необработанные сообщения при выключении сервера)
При описании используется понятие property (свойство), которое иногда переведено как переменная.
Некоторые свойства извлекаются из сообщения при его разборе, другие задаются при написании конфигурации.
Свойства используются в шаблонах и условных командах. Делаются (терминология RFC 3164 и 5424) из сообщений:
- msg
- rawmsg и rawmsg-after-pri
- hostname или source (извлекается из текста сообщения)
- fromhost (от кого получено, используется DNS)
- fromhost-ip (без DNS, для локальных сообщений - 127.0.0.1)
- syslogtag
- programname
- pri и pri-text
- syslogfacility и syslogfacility-text
- syslogseverity или syslogpriority и syslogseverity-text или syslogpriority-text
- timegenerated (точное время прибытия, до постановки в очередь)
- timestamp или timereported (из сообщения)
- protocol-version (RFC 5424)
- structured-data (RFC 5424)
- app-name (RFC 5424)
- procid (RFC 5424)
- msgid (RFC 5424)
- inputname (имя модуля ввода, не всегда правильное; для внутренних сообщений rsyslog - "rsyslogd")
- uuid (генерируется при первом запросе и привязывается к сообщению)
- jsonmesg (всё вышеперечисленное в JSON)
Имеются также системные переменные:
- $bom (byte-order mask - BOM из UTF-8)
- $myhostname
- $now[-utc] (дата обработки сообщения в формате YYYY-MM-DD)
- $year[-utc]
- $month[-utc]
- $day[-utc]
- $wday[-utc] (0 - воскресенье)
- $hour[-utc]
- $minute[-utc]
- $now-unixtimestamp (секунд от начала времён Unix)
Значения свойств используются с помощью конструкции '%имя[:[начало]:[конец][:преобразователь]]%'.
Нумерация символов с 1, номер последнего символа обозначается как '$'.
Можно вырезать из свойства по шаблону регулярного выражения, если в поле 'начало' поместить букву 'R',
а в поле 'конец' - регулярное выражение, сразу за которым - строку '-end'.
За буквой 'R' можно указать параметры регулярного выражения через запятую:
- тип выражения - BRE (базовое) или ERE (расширенное)
- номер подвыражения (от 1 до 9), которое надо выдать в качестве результата; 0 - всё выражение
- что делать при отсутствии сопоставления - DFLN (строка "**NO MATCH**"), BLANK (пустая строка), ZERO ("0"), FIELD (выдать всё поле)
- номер сопоставления, если нужно не первое встретившееся сопоставление; от 0 до 9; нумерация с 0
Также можно поделить свойство на поля, если в поле 'начало' поместить букву 'F,десятичный-код-символа-разделителя' (по умолчанию 9 - TAB),
а в поле 'конец' - номер поля (нумерация с 1). Символ '+' после кода позволяет расматривать несколько символов с указанным кодом как единый разделитель.
Преобразователи свойств (можно указать несколько через запятую):
- uppercase
- lowercase
- fixed-width (дополнение пробелами до длины, указанной в 'конец')
- json (преобразование в формат, пригодный для поля JSON)
- jsonf[:имя-поля] (преобразование в формат, пригодный для поля JSON с именем поля)
- csv (преобразование под поле RFC 4180)
- drop-last-lf (отбросить последний LF)
- date-utc
- date-mysql
- date-rfc3164 ("Dec 4 09:33:34")
- date-rfc3164-buggyday ("Dec 04 09:33:34")
- date-rfc3339 ("1996-12-19T16:39:57-08:00")
- date-unixtimestamp (секунд с начала времён Unix)
- date-year
- date-month
- date-day
- date-hour
- date-minute
- date-second
- date-subsecond
- date-tzoffshour
- date-tzoffsmin
- date-tzoffsdirection
- date-ordinal (номер дня в году)
- date-iso-week и date-iso-week-year (понедельная дата согласно ISO 8601)
- date-week (номер недели в году)
- date-wday (номер дня недели, 0 - воскресенье)
- date-wdayname
- escape-cc (заменить управляющие символы ASCII на десятичный-код "#ddd")
- space-cc (заменить управляющие символы ASCII на пробел)
- drop-cc (удалить управляющие символы ASCII)
- compressspace (заменить последовательность пробелов на пробел, производится после вырезания подстроки)
- sp-if-no-1st-sp (хак в борьбе с реализацией RFC 3164; возвращает пробел, если первый символ не пробел, иначе возвращает пустую строку)
- secpath-drop (удалить все '/')
- secpath-replace (заменить все '/' на '_')
Шаблоны позволяют задать формат вывода или имя файла вывода
на основе констант, свойств и их преобразований. Определяются при чтении конфигурационного файла (не действуют условные операторы),
Типы шаблонов:
- string
template(name="имя" type="string" string="строка из констант и переменных с использованием преобразователей")
- list - список констант и значений свойств
template(name="имя" type="list" [option.имя_опции="on"]) {
constant(value="текст" [outname="имя-поля"] [format="jsonf"])
property(name="имя" параметр="значение" ...)
...
}
- subtree - для вывода иерархической структуры; поддерево CEE (?), параметр subtree указывает часть поддерева ("$!" - целиком)
- plugin - параметр plugin задаёт имя предварительно загруженного модуля
Параметры свойства (аналогично преобразователям для шаблонов типа строка, но другой синтаксис):
- name (имя свойства)
- outname (имя поля для структурированного вывода)
- dateformat (utc, mysql, rfc3164,
rfc3164-buggyday, rfc3339, unixtimestamp, year, month, day, hour, minute, second,
subseconds, tzoffshour, tzoffsmin, tzoffsdirection, ordinal, iso-week, week, wday, wdayname)
- date.inUTC
- caseconversion (преобразование: lower, upper)
- controlcharacters (что делать с управляющими символами: escape, space, drop)
- securepath (что делать с символами '/': drop, replace)
- position.from (начинается с 1)
- position.to (отрицательное число означает отсчёт с конца)
- position.relativeToEnd (yes, no; обе границы с конца)
- fixedwidth (off, on; дополнять пробелами)
- compressspace (сжимать лишние пробелы)
- field.number
- field.delimiter (десятичное число)
- regex.expression
- regex.type (ERE - расширенное, BRE)
- regex.nomatchmode (DFLN, BLANK, ZERO, FIELD)
- regex.match (номер сопоставления)
- regex.submatch (номер подвыражения)
- droplastlf
- spifno1stsp (хак в борьбе с реализацией RFC 3164; возвращает пробел, если первый символ не пробел, иначе возвращает пустую строку)
- mandatory (off, on; поле выводится даже если оно пустое)
- format (json, jsonf, jsonr, jsonfr, csv)
- datatype (для jsonf: string, number, auto, bool)
- onEmpty (для jsonf: keep, skip, null)
Опции шаблонов позволяют стандартные адаптирующие преобразования для результатирующей строки: option.sql, option.stdsql,
option.json, option.jsonf, option.casesensitive.
Стандартные шаблоны:
- RSYSLOG_TraditionalFileFormat (RFC 3195, для записи в файл, грубое время без часового пояса и года)
- RSYSLOG_FileFormat (RFC 3195, для записи в файл, точное время с часовым поясом и годом)
- RSYSLOG_TraditionalForwardFormat (RFC 3195, для передачи, грубое время без часового пояса и года)
- RSYSLOG_SysklogdFileFormat (RFC 3195, для записи в файл, грубое время без часового пояса и года, совместимость с sysklogd)
- RSYSLOG_ForwardFormat (RFC 3195, для передачи, точное время с часовым поясом и годом)
- RSYSLOG_SyslogProtocol23Format (почти RFC 5424)
- RSYSLOG_DebugFormat (для отладки)
- RSYSLOG_WallFmt (для сообщений в консоль)
- RSYSLOG_StdUsrMsgFmt (для сообщений в консоль)
- RSYSLOG_StdDBFmt (для записи в MySQL)
- RSYSLOG_StdPgSQLFmt (для записи в PostgreSQL)
- RSYSLOG_spoofadr
- RSYSLOG_StdJSONFmt
Модули разбора позволяют преобразовать плохоструктурированные сообщения
в хорошо структурированные для дальнейшей обработки (разбирают его на свойства).
Модули разбора могут быть соединены в цепочку, элементы которой слева направо по очереди пытаются справиться с поступившим сообщением.
Необходимо загрузить модуль, настроить (если есть что) и привязать цепочку разборщиков (в квадратных скобках через запятую)
к набору правил (разбор заканчивается с первой удачей):
- module(load="имя-модуля") # при загрузке содаётся парсер с именем "rsyslog.имя-модуля"
- parser(name="имя" type="имя-модуля" параметр="значение" ...) # встроенные модули были "builtin:" теперь можно указывать параметры без загрузки модуля
- ruleset(name="test" parser=["rsyslog.rfc5424","rsyslog.rfc3164"] ... { } # это цепочка по умолчанию?
Модули разбора:
- pmlastmsg # обработка сообщений о повторяющихся строках ("last message repeated ... times");
systemd-journal таких сообщений не делает;
должен быть первым в цепочке;
модуль для загрузки называется pmlastmsg, а парсер создаётся rsyslog.lastline (поправили?)
- pmrfc3164 # встроенный (не надо грузить); всегда успешен (д.б. последним в цепочке);
параметры parser():
- permit.squareBracketsInHostname="off" # убрать квадратные скобки вокруг имени хоста
- permit.slashesInHostname="off" # в имени хоста м.б. '/' (вставляет syslog-ng по пути)
- permit.AtSignsInHostname="off" # в имени хоста м.б. '@' (вставляет syslog-ng по пути)
- force.tagEndingByColon="off" # в версии 8.25, если тэг не заканчивается на ":", то установить переменную tag в "-"
- remove.msgFirstSpace="off" # в версии 8.25, удалить первый пробел после тэга (первый символ тела сообщения)
- detect.YearAfterTimestamp="off" # некоторые добавляют год в сообщения формата RFC 3164; распознаются года от 2000 до 2099
- pmrfc3164sd # структурированные данные в стиле RFC 5424 внутри сообщений RFC 3164
- pmrfc5424 # встроенный (не надо грузить); разбор сообщений стандарта RFC 5424
- pmnormalize # преобразование сообщений; в версии 8.27; параметры parser():
- Rulebase # имя файла с набором правил соответствий для liblognorm (почти Refal ;)
- Rule # массив правил для liblognorm (строки в квадратных скобках через запятую)
- UndefinedPropertyError="off" # выдавать сообщение об ошибке при каждой неудаче
- pmnull # всё свалить в rawmsg
- Tag # установить Tag
- SyslogFacility="1" # установить SyslogFacility
- SyslogSeverity="5" # установить SyslogSeverity
- pmsnare # как CSV, но поля разделяются табуляциями
- pmciscoios # в документации, pmcisconames в /usr/lib64/rsyslog/, имя парсера rsyslog.pmciscoios;
как его привязать к IP адресу источника? параметры parser():
- present.origin="off" # при наличии информации об источнике она записывается в HOSTNAME
- present.xr="off" # модификация формата IOSXR
- pmdb2diag
Набор правил привязывается к модулю ввода и определяет цепочку разборщиков, очередь и
последовательность действий (правил) над каждым сообщением, поступившим из модуля ввода и разобранным одним из модулей разбора.
При определении очереди (по умолчанию очередь не создаётся), сообщение дублируется в эту очередь и все модификации
сообщения в наборе правил не отражаются на исходном сообщении.
Набор правил записывается в виде заголовка, в котором описываются параметры набора и блока в фигурных скобках, перечисляющего правила.
Правила обрабатываются по очереди до конца набора или пока не встретится действие stop.
Параметры:
- name # имя набора правил, на него будут ссылаться в описаниях ввода и других наборах правил
- parser=["первый",...] # цепочка имён разборщиков
- queue.type="тип" # параметры очереди
Правила программируются на безтиповом языке RainerScript, преобразования типов проводятся автоматически.
Значение свойства сообщения (property) используется в виде '$имя'.
Свойства сообщения в формате JSON обозначаются как '$!имя'.
Локальные (относительно сообщения) переменные представляют собой элемент или структуру (дерево), корень которого обозначается как '$.имя',
а уровни разделяются символом '!'. '$.' - список имён и значений всех локальных переменных.
Значение локальной или JSON переменной можно изменять командами set (замена значения, слияние и игнорирование),
unset (удаоение) и reset (всегда замена): 'set $.имя = выражение;'.
Выражения используют операторы в порядке убывания приоритета:
- выражение в скобках
- not, унарный -
- *, /, %
- +, -, & (конкатенация)
- ==, != или <>, <, >, <=, >=, contains, contains_i (не чувствительно к регистру), startswith, startswith_i, and, or
Встроенные функции:
- cnum(2+3) # преобразовать выражение в число (5)
- cstr(5*4) # преобразовать выражение в строку ("20")
- dyn_inc() # увеличение счётчика статистики impstats
- exec_template(имя-шаблона) # выполнить преобразователь, заданный строкой в шаблоне
- exists($имя-переменной) # 1 если переменная имеет значение
- field(строка,разделитель,номер-поля) # выделение поля из строки по номеру, номера с 1, разделитель м.б. строкой
- format_time(целое,формат) # формат: "date-rfc3164" или "date-rfc3339"; обещают удалить;
преобразует время из Unix формата; всегда UTC
- get_property(переменная,индекс) # извлечение поддерева
- getenv("имя-переменной-окружения")
- int2hex(целое) # возвращает 16-ричное значение в виде строки
- ipv42num(строка) # адрес IPv4 из строки в целое
- num2ipv4(число) # адрес IPv4 из целого в строку
- is_time(строка[,"date-rfc3164|date-rfc3339|date-unix"]) # возвращает 1, если строка является правильной датой;
по умолчанию проверяются все 3 формата;
модификации RFC 3164 с указанием года или часового пояса не поддерживаются
- lookup_table(name="имя-таблицы" file="имя-файла" reloadOnHUP="off") и lookup("имя-таблицы",ключ) позволяют производить поиск в таблице по ключу;
типы ключей: строка, целое из непрерывного интервала (массив), целое (разреженный массив); таблицы содержатся в файлах в формате JSON
- ltrim(строка) # удалить передние пробелы
- rtrim(строка) # удалить задние пробелы
- parse_json(строка,контейнер-для-результата) # разобрать строку в переменную; при удаче возвращает 0
- parse_time(строка) # преобразование из RFC 3164 или RFC 3339 в UNIX-время в UTC;
модификации RFC 3164 с указанием года или часового пояса не поддерживаются
- percentile_observe() # добавить отсчёт в счётчик статистики
- previous_action_suspended() # возвращает 1, если предыдущее действие было отложено;
не всегда отложенность можно определить немедленно
- prifilt(селектор) # селектор источника и серьёзности как в конфигурации старого формата; можно использовать только константы
- random(max) # генератор недостаточно качественный для использовании в шифровании
- re_extract(выражение,расширенное-регулярное-выражение,номер-сопоставления,номер-подвыражения,"не нашёл") # нумерация с 0
- re_extract_i(выражение,расширенное-регулярное-выражение,номер-сопоставления,номер-подвыражения,"не нашёл") # нумерация с 0
- re_match(выражение,расширенное-регулярное-выражение) # вернуть 1, если совпадение найдено
- re_match_i(выражение,расширенное-регулярное-выражение) # вернуть 1, если совпадение найдено
- replace(строка,строка-что-искать,строка-на-что-заменять) # заменяются все вхождения
- script_error() # возвращает 0, если предыдущая функция была успешна
- strlen(строка)
- substring(строка,номер-начального-символа,длина) # нумерация с 0; отрицательная длина позволяет укоротить строку на abs(длины)
- tolower(строка)
- wrap(строка,символ-обрамления[,символ-замещения]) # обрамляет строку по краям указанным символом
возможно с замещением встретившихся в исходной строке символов обрамления
Дополнительные функции могут быть загружены в модуле, имя которого начинается с fm (с версии 8.37):
- fmhash предоставляет функции (не использовать для криптографии)
- hash32(строка[,семя])
- hash64(строка[,семя])
- hash32mod(строка,модуль[,семя])
- hash64mod(строка,модуль[,семя])
- fmhttp предоставляет функцию http_request(строка), которая осуществляет HTTP запрос и возвращает полученный ответ в переменную JSON
- модуль fmunflatten (самому собирать?) предоставляет функцию unflatten(); махинации с JSON
- модуль ? (самому собирать?)
- faup(выражение) # разбор URL на компоненты в JSON
- faup_имя-компонента(выражение) # извлечение компонента (scheme, credential, subdomain, domain,
domain_without_tld, host, tld, port, resource_path, query_string, fragment) из URL
Управляющие структуры RainerScript включают
- stop # прекратить обработку сообщения
- if (выражение) then { ... }
- if (выражение) then { ... } else { ... }
- call имя-набора-правил # позволяет вызвать набор правил из набора правил, если вызываемый набор имеет очередь, то вызов асинхронный и stop не срабатывает
- call_indirect выражение; # имя набора правил вычисляется; неудачи игнорируются
- continue # пустая операция
- foreach ($переменная in $массив) do { ... } # только для JSON; по порядку
- foreach ($переменная in $объект) do { ... } # только для JSON; порядок неопределён; ключ и значение доступны по $переменная!key и $переменная!value
Действия реализуются с помощью модулей вывода (om*), описываются директивами action в правилах,
параметрами действия являются описание очереди (queue.*), специфические параметры модуля вывода и общие параметры:
- name # имя для статистики
- type # имя модуля
- action.writeAllMarkMessages="on" # писать маркерные сообщения каждые 20 минут или только при отсутствии сообщений;
и где они?
- action.execOnlyEveryNthTime="1" # децимация сообщений
- action.execOnlyEveryNthTimeout="0" # счётчик децимации обнуляется через указанное количество секунд
- action.errorfile="/dev/null" # имя файла для ошибок (JSON), в версии 8.32
- action.errorfile.maxsize=бесконечность
- action.execOnlyOnceEveryInterval # секунд, полезно для email
- action.execOnlyWhenPreviousIsSuspended="off" # использовать действие, если предыдущее действие набора правил застопорилось;
позволяет обеспечить резервный канал; проблему нелегко распознать сразу (TCP) или распознать вообще (UDP);
необходимо отключить очередь или установить queue.dequeuebatchsize="1"
- action.repeatedmsgcontainsoriginalmsg="off" # сообщение о повторяющихся сообщениях содержит их начальную часть и её надо извлечь
- action.resumeRetryCount="0" # -1 означает бесконечность; количество попыток при неудаче; сообщение выбрасывается
- action.resumeInterval="0" # секунд; после каждых 10 попыток интервал между попытками увеличивается на указанную величину
- action.resumeIntervalMax="1800" # максимальное значение интервала между попытками
- action.reportSuspension # извещать о задержках; по умолчанию берётся из глобального параметра
- action.reportSuspensionContinuation # извещать о попытках возобновления; по умолчанию берётся из глобального параметра
- action.copyMsg="off" # копировать сообщение перед действием или ссылаться на сообщение в текущей очереди
Между модулями ввода или вывода и подлежащим транспортным уровнем ОС можно
поместить драйвер потока (Network Stream Drivers), который обеспечивает
последовательность, аутентификацию и секретность:
- none (ptcp) - режим шифрования: 0 (без шифрования), режим аутентификации: anon
- gtls (GnuTLS) - режимы шифрования: 0 - без шифрования, 1 - TLS;
режимы аутентификации: anon, x509/fingerprint - проверка fingerprint,
x509/certvalid - проверка сертификата на корректность,
x509/name - проверка имени (Subject); в текущей реализации корневой CA должен быть одинаков)
- openssl - режимы шифрования: 0 (без шифрования) и 1 (TLS); режимы аутентификации: anon, x509/fingerprint, x509/certvalid, x509/name
Типичные модули вывода (встроенные и в /usr/lib64/rsyslog/om*):
- omamqp1 (пакет rsyslog-omamqp1)
- omdtls (DTLS поверх UDP - RFC 6012)
- omelasticsearch (вывод с использованием протокола ElasticSearch, пакет rsyslog-elasticsearch)
- omfile - вывод в файл
- omfwd
- omgssapi - Kerberos (пакет rsyslog-gssapi)
- omhttp
- omjournal - systemd journald
- omlibdbi - модуль записи сообщений в БД через libdbi (Firebird/Interbase, MS SQL, Sybase, SQLLite, Ingres, Oracle,
был пакет rsyslog-libdbi)
- ommail - посылка сообщений с помощью e-mail
- ommysql - модуль записи сообщений в БД MySQL (пакет rsyslog-mysql)
- ompgsql - модуль записи сообщений в БД PostgreSQL (пакет rsyslog-pgsql)
- ompipe
- omprog - передача потока сообщений внешней программе
- omrelp - модуль передачи сообщений с помощью протокола RELP (пакет rsyslog-relp)
- omsnmp - посылка сообщений с помощью SNMP trap v1 и v2c (пакет rsyslog-snmp)
- omudpspoof - выводит сообщения с использованием UDP с подделкой IP адреса (пакет rsyslog-udpspoof)
- omstdout - на stdout (для отладки)
- omusrmsg
- omuxsock - в сокет
Модуль вывода omfile обрабатывает разобранные сообщения и записывает их в файл.
Имя файла может быть статическим или динамическим на основе шаблона. Модуль встроенный.
Модуль ведёт счётчики статистики кеширования динамических файлов (кеш сбрасывается по HUP),
отдельно для каждого шаблона с указанием имени шаблона и действия (используйте имена действий!):
- request (всего запросов получения имени файла)
- level0 (запросов для текущего файла, не требуют обращения к кешу)
- missed (обращение потребовалось, файл не найден в кеше; происходит по крайней мере при первом обращении)
- evicted (файл пришлось выбросить из кеша - повод для увеличения кеша или времени хранения; при изгнании буфер записывается и файл закрывается)
- maxused (использовано элементов кеша - повод для уменьшения кеша)
- closetimeouts (файлов было закрыто по истечению времени хранения - повод для увеличения времени хранения)
Параметры загрузки модуля omfile ('module(load="builtin:omfile" ...)'; параметры в старом стиле не действуют):
- Template="RSYSLOG_FileFormat" # шаблон вывода по умолчанию
- DirCreateMode=0700
- FileCreateMode=0644
- fileOwner
- fileOwnerNum
- fileGroup
- fileGroupNum
- dirOwner
- dirOwnerNum
- dirGroup
- dirGroupNum
- dynafile.donotsuspend="on" # не надо разрешать блокировку
- compression.driver="zlib" # в версии 8.2208.0 добавлен zstd
- compression.zstd.workers # в версии 8.2208.0; умолчание берётся из библиотеки; сжатие идёт в пределах сообщения - нет смысла
Входные параметры модуля omfile:
- Template="шаблон при загрузке модуля" # шаблон вывода
- File="имя-файла" # при необходимости файл создаётся, имеющийся файл дополняется;
для внешней ротации файлов необходимо послать сигнал HUP процессу rsyslogd
- dynaFile="имя-шаблона-имён-файлов" # при необходимости файл создаётся, имеющийся файл дополняется, поддерживается кеш открытых файлов;
рекомендуется использовать securepath или secpath-drop/secpath-replace
- closeTimeout=минут # автоматически закрывать неиспользуемый файл
(используется janitor, который запускается каждые 20 минут - janitor.interval);
по умолчанию 0 для обычных файлов и 10 для динамических имён
- dynaFileCacheSize="10" # размер кеша открытых файлов для динамических имён файлов; отдельный кеш на каждое действие
- zipLevel="0" # уровень сжатия для gzip; 0 - без сжатия
- veryRobustZip="off" # записывать дополнительные заголовки для обеспечения читаемости сжатого файла после сбоев;
значительно увеличивает размер; для восстановления данных рекомендуется утилита gztool
- asyncWriting="off" # использовать отдельный поток для асинхронной записи (двойная буферизация)
- flushInterval="1" # интервал (в секундах) записи буферизованных сообщений при использовании асинхронного потока
- flushOnTXEnd="on" # записывать накопленный буфер после каждого сообщения (транзакции в новых версиях;
что такое транзакция?)
- ioBufferSize="4K" # размер буфера записи
- dirOwner=параметр-модуля
- dirOwnerNum=параметр-модуля
- dirGroup=параметр-модуля
- dirGroupNum=параметр-модуля
- fileOwner=параметр-модуля
- fileOwnerNum=параметр-модуля
- fileGroup=параметр-модуля
- fileGroupNum=параметр-модуля
- FileCreateMode=параметр-модуля # см. также параметр umask и текущий umask (например, rsyslog.service содержит команду "UMask=0066");
в реальности получается 0600
- DirCreateMode=параметр-модуля
- failOnChOwnFailure="on" # on - при невозможность установить требуемого владельца и группу создаваемого файла
не писать в файл и выдать сообщение об ошибке; off - игнорировать ошибку
- createDirs="on" # создавать каталоги при необходимости
- sync="off" # после обработки каждого пакета сообщений делать sync; нежелательно
- sig.Provider # модуль цифровой подписи для журналов (не описывается как проверить);
реализован только один - ksi_ls12 (ksi и gt устарели); информация о цифровых подписях записывается в файл с суффиксом ".sigstate";
требуется много других параметров
- cry.Provider # модуль шифрования журналов (не описывается как расшифровать);
реализованы gcry и ossl; информация о шифровании записывается в файл с суффиксом ".encinfo";
требуется много других параметров
- rotation.sizeLimit="0" # при достижении указанного размера производится попытка ротации файла
- rotation.sizeLimitCommand="" # скрипт ротации файла (интерфейс не описан)
Модуль вывода omfwd обрабатывает разобранные сообщения и пересылает их по UDP или TCP, включая TLS.
Модуль встроенный. Собирается статистика: bytes.sent (отдельно для каждого адреса, порта и протокола; не заметил в выводе).
Параметры загрузки модуля omfwd (module(load="builtin:omfwd" ...):
- Template="RSYSLOG_TraditionalForwardFormat" # шаблон вывода по умолчанию
- iobuffer.maxSize="" # размер буфера для TCP
Входные параметры модуля omfwd:
- Template="параметр загрузки модуля" # шаблон вывода по умолчанию
- Target=имя-или-IP-адрес # в режиме TCP можно указать массив имён через запятую в квадратных скобках - осуществляется балансировка нагрузки
- Port="514" # в режиме TCP можно указать массив номеров через запятую в квадратных скобках
- pool.resumeinterval="30" # в секундах; интервал между попытками возобновить отправку сообщений на временно недоступный сервер
- Protocol="udp" # udp (RFC 3164) или tcp (простой (RFC 6587) или TLS (RFC 5424/RFC 5425) в зависимости от настроек StreamDriver)
- StreamDriver="none" # выбрать сетевой потоковый драйвер none, gtls (GnuTLS) или ossl (OpenSSL)
- StreamDriverMode="0" # режим шифрования: 0 - без шифрования, 1 - TLS
- StreamDriverAuthMode="anon" # режим аутентификации: anon, x509/fingerprint, x509/certvalid (д.б. общий CA), x509/name
- StreamDriver.PermitExpiredCerts="off" # off, on или warn
- StreamDriverPermittedPeers="" # должен содержать список (массив?) через запятую отпечатков сертификатов ("SHA256:10:C4...") или имён (CN? SAN?)
- StreamDriver.CheckExtendedKeyPurpose="off" # для GnuTLS: проверять наличие в сертификате GNUTLS_KP_TLS_WWW_SERVER и GNUTLS_KP_TLS_WWW_CLIENT
- StreamDriver.PrioritizeSAN="off" # для GnuTLS:
при наличии Subject Alternative Name (SAN) проверять его вместо Common Name согласно RFC 6125 вместо RFC 5280
- StreamDriver.TlsVerifyDepth="умолчания библиотеки" # максимальная глубина цепочки проверки сертификатов
- StreamDriver.CAFile="глобальный параметр"
- StreamDriver.CRLFile="глобальный параметр"
- StreamDriver.KeyFile="глобальный параметр"
- StreamDriver.CertFile="глобальный параметр"
- gnutlsPriorityString="" # допустимые алгоритмы и опции; для OpenSSL позволяет задавать команды конфигурации (многострочные)
- NetworkNamespace="" # пространство имён сети теоретически из [/var/]run/netns/,
в реальности каталог не существует
- Address=локальный-адрес # для UDP, в версии 8.35
- IpFreeBind="2" # 0 - не разрешать привязывать к чужому адресу, 1 - разрешать (IP_FREEBIND), 2 - разрешать и выдавать предупреждение;
только для UDP при использовании параметра Address, в версии 8.35
- Device="" # привязывать сокет к устройству (например, eth0)
- TCP_Framing="traditional" # traditional - сообщения разделяются в потоке TCP символами LF,
octet-counted - используется счётчик длины сообщения
- TCP_FrameDelimiter="10" # код символа для разделения сообщений (10 - это LF)
- ZipLevel="0" # уровень сжатия gzip; 0 - без сжатия
- compression.Mode="none" # none - без сжатия, single - каждое сообщение сжимается отдельно, stream:always - сжимается весь поток (большие задержки);
стандарт отсутствует (принимает только imptcp)
- compression.stream.flushOnTXEnd="on" # сбрасывать буфер при обработке каждого пакета (что есть пакет?)
сообщений в режиме stream:always
- RebindInterval="0" # делать новое соединение через указанный интервал (в сообщениях)
- KeepAlive="off" # посылать пакеты, поддерживающие соединение
- KeepAlive.Probes="0" # 0 - системные умолчания; количество проб при проверке соединения
- KeepAlive.Interval="0" # 0 - системные умолчания; интервал между пробами
- KeepAlive.Time="0" # 0 - системные умолчания; интервал от последнего сообщения перед пробой
- ConErrSkip="0" # децимация сообщений о сетевых проблемах
- RateLimit.Burst="200" # максимальное количество сообщений за RateLimit.Interval
- RateLimit.Interval="0" # в секундах; 0 - безлимитно; интервал для измерения RateLimit.Burst
- ResendLastMSGOnReconnect="off" # повторять последнее сообщение при повторном соединении TCP;
м.б. потеряны несколько сообщений, а посылается только последнее
- udp.SendToAll="off" # посылать UDP пакеты по всем известным маршрутам, авось кто-нибудь долетит; может приводить к дублированию
- udp.SendDelay="0" # задержка в микросекундах после каждого сообщения
- extendedConnectionCheck="true" #
Модуль вывода omhttp обрабатывает разобранные сообщения и пересылает их
с помощью HTTP REST по отдельности и пакетами в форматах JSON, Elasticsearch, Loki и Kafka.
Возможно сжатие и TLS.
Модуль вывода omjournal обрабатывает разобранные сообщения
и пересылает их в systemd-journald.
Параметры загрузки модуля:
- Template= # шаблон вывода по умолчанию;
по умолчанию %msg% используется как поле MESSAGE для journal,
также используется этикетка (SYSLOG_FACILITY) и приоритет (PRIORITY);
при описании шаблона в формате списка необходимо определить поля (outname в шаблоне типа список) MESSAGE;
можно дополнительно определить SYSLOG_IDENTIFIER и SYSLOG_PID;
что добавляется в поля _COMM, _EXE, _CMDLINE, _HOSTNAME, _TRANSPORT?
Входные параметры модуля omjournal:
- Template="параметр загрузки модуля"
Модуль вывода ommail обрабатывает разобранные сообщения и пересылает их по email
(прямая посылка по SMTP без аутентификации и прочего, так что рекомендуется организовать очередь своими средствами).
Входные параметры модуля ommail:
- Template="RSYSLOG_FileFormat" # шаблон для тела письма
- Server="127.0.0.1" # имя или IP адрес SMTP сервера; обычно на 127.0.0.1:25 ждёт sendmail, который знает что делать дальше
- Port="25" #
- MailFrom #
- MailTo # адрес или массив адресов в квадратных скобках через запятую
- Subject.Template #
- Subject.Text # строка текста
- Body.Enable="on" #
Модуль вывода ompipe обрабатывает разобранные сообщения и пересылает их в поименованный канал (pipe, fifo):
Модуль встроенный.
Параметры загрузки модуля:
- Template="RSYSLOG_FileFormat" # шаблон вывода для тела письма
Входные параметры модуля ompipe:
- Template="параметр загрузки модуля" # шаблон для вывода сообщения
- Pipe # имя-fifo (mkfifo надо сделать отдельно)
- tryResumeReopen="off" # rsyslog будет закрывать и открывать файл канала при проблемах
Модуль вывода omprog обрабатывает разобранные сообщения и подаёт их на вход stdin указанной программе (с помощью анонимного pipe).
Сообщения разделяются символами LF (при наличии многострочных сообщений рекомендуется использовать JSON).
Программа запускается один раз в каждом потоке.
При проблемах с запуском сообщение об ошибке выдаётся с помощью механизма syslog.
При завершении программы она перезапускается. При завершении rsyslogd на вход программы подаётся конец файла.
Входные параметры модуля omprog:
- Template="параметр загрузки модуля"
- binary # имя программы и параметры (предполагается в /usr/libexec/rsyslog)
- confirmMessages="off" # в версии 8.31; программа выдаёт подтверждение ("OK\n") на инициализацию и каждое сообщение на stdout;
начальные точки в ответе игнорируются;
при отсутствии ответа "OK\n" сообщение ставится в очередь для повторной доставки после action.resumeInterval
- confirmTimeout="10000" # ждать не более миллисекунд, иначе перезапуск
- reportFailures="off" # при отсутствии подтверждения или получении не "OK\n" сгенерировать сообщение с полученным текстом; источник - syslog
- useTransactions="off" # в версии 8.31; сообщения передаются программе пакетами, обрамлёнными beginTransactionMark и commitTransactionMark;
маркеры подтверждаются "OK\n", а сами сообщения - "OK\n" (сообщение и все предыдущие сообщения обработаны),
"DEFER_COMMIT\n" (сообщение получено не не обработано) и "PREVIOUS_COMMITTED\n" (сообщение получено, предыдущее сообщение обработано)
- beginTransactionMark="BEGIN TRANSACTION" # в версии 8.31
- commitTransactionMark="COMMIT TRANSACTION" # в версии 8.31
- output="/dev/null" # имя файла для сохранения stdout (если отключён confirmMessages) и stderr; если файл существует, то дописывается в конец;
файл переоткрывается при получении сигнала HUP процессом rsyslog
- fileCreateMode="0600" # права доступа при создании файла output
- hup.signal="none" # какой сигнал передавать программе при получении HUP самим rsyslogd
- signalOnClose="off" # передавать программе сигнал TERM перед закрытием pipe (перезапуск программы, завершение потока или всего rsyslog)
- closeTimeout="5000" # в версии 8.35; сколько ждать между закрытием pipe и завершением программы
- killUnresponsive=signalOnClose # в версии 8.35; посылать программе сигнал KILL, если TERM и EOF не помогли за closeTimeout время
- forceSingleInstance="off" # запускать только 1 экземпляр программы для всех потоков
Модуль вывода omstdout обрабатывает разобранные сообщения и подаёт их на stdout.
Параметры загрузки модуля:
- Template="RSYSLOG_FileFormat" # шаблон вывода
Входные параметры модуля:
- Template="параметр загрузки модуля"
- EnsureLFEnding="on" # выводить LF в конце каждого сообщения, если его нет
Модуль вывода omudpspoof (пакет rsyslog-udpspoof) обрабатывает разобранные сообщения
и пересылает их по UDP с подделанным исходящим адресом. Требуются права суперпользователя.
Параметры загрузки модуля:
- Template="RSYSLOG_TraditionalForwardFormat" # шаблон вывода
Входные параметры модуля omudpspoof:
- Template="параметр загрузки модуля"
- Target=имя-или-IP-адрес #
- Port="514" #
- SourceTemplate="RSYSLOG_omudpspoofDfltSourceTpl" # шаблон исходящего IP адреса;
стандартный шаблон - "%fromhost-ip%"
- SourcePort.start="32000" # исходящий порт будет браться от SourcePort.start до SourcePort.End
- SourcePort.End="42000" #
- MTU="1500"
Модуль вывода omusrmsg обрабатывает разобранные сообщения и посылает их на терминалы пользователей.
Модуль встроенный.
Параметры загрузки модуля:
- Template="StdUsrMsgFmt" # шаблон вывода; если всем, то "WallFmt"
Входные параметры модуля omusrmsg:
- Template="параметр загрузки модуля" #
- Users # имена пользователей; "*" - всем
Модуль вывода omuxsock обрабатывает разобранные сообщения и передаёт их в сокет.
Обратное действие для imuxsock. Входные параметры модуля omuxsock:
- $OMUxSockSocket # имя сокета
- $OMUxSockDefaultTemplate
Источники сообщений реализуются с помощью модулей ввода (im*), описываются директивами input,
параметрами которой являются специфические входные параметры модуля и следующие параметры:
Модуль imfile превращает файл из строк, разделённых LF, в поток сообщений, пустые строки игнорируются,
новые строки обрабатываются по мере поступления указанным в input() набором правил, поддерживается ротация входного файла
(дочитывание старого файла обеспечивается только при непрерывной работе rsyslog).
Информация об уже обработанной части файла может храниться в файле состояния чтения файла в рабочем каталоге;
имя файла состоит из "imfile-state:" и уникального суффикса.
Параметры загрузки:
- mode="inotify" # режим отслеживания (inotify или polling) добавлений в файл
- readTimeout="0" # секунд; значение по умолчанию входного параметра readTimeout
- timeoutGranularity="1" # секунд
- sortFiles="off" # в версии 8.32; сортировать файл перед обработкой
- PollingInterval="10" # секунд
- statefile.directory=global(WorkDirectory) # в версии 8.1905.0; каталог должен существовать
Входные параметры input() модуля imfile:
- File="имя-файла" # можно использовать шаблоны bash в имени файла (не ссылки на описание шаблонов!)
или каталога (с версии 8.25.0)
- Tag="этикетка-сообщения" # надо самостоятельно завершать ":" при необходимости
- Facility="local0" # можно использовать числа
- Severity="notice" # можно использовать числа
- PersistStateInterval="0" # через какое количество обработанных сообщений записывать файл состояния чтения файла;
0 - в самом конце (не создавать файл состояния?)
- startmsg.regex # регулярно выражение начала каждого сообщения
- endmsg.regex # регулярно выражение конца каждого сообщения
- readTimeout="0" # в сочетании с startmsg.regex задаёт задержку поиска начала следующего сообщения для борьбы с буферизацией вывода
- readMode="0" # режим многострочных сообщений: 0 - каждая строка есть сообщение, 1 - сообщения разделяются пустыми строками,
2 - пробелы или табуляции в начале строки есть признак продолжения сообщения
- escapeLF="1" # заменять LF в многострочных сообщениях на "#012"
- escapeLF.replacement # на какую строку заменять LF в многострочных сообщениях; пустая строка - удалить
- MaxLinesAtOnce="0" # действует только для режима опроса (10240); не рекомендуется к использованию
- MaxSubmitAtOnce="1024"
- deleteStateOnFileDelete="on" # удалять файл состояния чтения файла при удалении файла
- Ruleset="набор-правил" # обрабатывать указанным набором правил
- addMetadata="-1" # к свойствам сообщения можно добавить имя файла (%$!metadata!filename%) и смещение начала строки (%$!metadata!fileoffset%);
включается автоматически при задании имени файла с помощью шаблона
- reopenOnTruncate="off"
- MaxLinesPerMinute="0" # остальные строки выбрасываются
- MaxBytesPerMinute="0" # остальные строки выбрасываются целиком
- trimLineOverBytes="0" # обрезать строки длиннее указанного размера
- freshStartTail="off" # при запуске rsyslog установит указатель в конец файла, чтобы читать только новые сообщения
- discardTruncatedMsg="off" # выбрасывать обрезанную часть сообщения, а не делать из него следующее сообщение
- msgDiscardingError="on" # выдавать сообщение об ошибке при обрезании
- needParse="off" # в версии 8.1903.0; по умолчанию разборщик не используется (а как же шаблоны вывода?)
- persistStateAfterSubmission="off" # в версии 8.2006.0; сохраняет информацио о каждом обработанном пакете сообщений; дорого
- ignoreOlderThan="0" # в версии 8.2108.0; игнорировать файлы, не изменявшиеся указанное количество секунд
Модуль imjournal принимает структурированные сообщения
из базы systemd journald (в новых системах он перехватывает сообщения syslog).
Модуль ведёт счётчики статистики для каждого ввода и каждого рабочего потока под именем imjournal:
read, submitted, discarded, failed, poll_failed, rotations, recovery_attempts, ratelimit_discarded_in_interval, disk_usage_bytes
(появились в версии ? нет в EL7).
Параметры загрузки модуля imjournal:
- PersistStateInterval="10" # интервал (в сообщениях) обновления файла с позицией в journald
- FileCreateMode="0644" # учитывайте umask
- StateFile # имя файла для хранения позиции в журнале, абсолютное или относительное имя (относительно рабочего каталога)
- Ratelimit.Interval="600" # секунд; количество отброшенных сообщений выводится в конце интервала (facility? priority?);
0 - отключить контроль
- Ratelimit.Burst="20000" #
- IgnorePreviousMessages="off" # принимать только новые сообщения; полезно при проблемах с файлом с позицией в журнале
- DefaultSeverity="notice" # для сообщений от journald без SYSLOG_PRIORITY
- DefaultFacility="user" # для сообщений от journald без SYSLOG_FACILITY
- UsePidFromSystem="off" # устарело в пользу UsePid; использовать _PID вместо SYSLOG_PID
- UsePid="both|syslog|system" # использовать SYSLOG_PID или _PID от systemd; приоритет за SYSLOG_PID
- IgnoreNonValidStatefile="on" # начать с самого начала или с конца (IgnorePreviousMessages)
- WorkAroundJournalBug="off" # в версии 8.37; устарело в 8.1910.0
- FSync="off" # в версии 8.1908.0; синхронная запись файла состояния; дорого
- Remote="off" # в версии 8.1910.0; брать не только локальный журнал, но и журналы с других хостов (из того же каталога?)
- defaultTag="" # при отсутствии SYSLOG_IDENTIFIER и _COMM
Входные параметры input() модуля imjournal
(в версии v8.2102.0 (EL8) недопустим input(), достаточно загрузить модуль;
в документации отсутствует параметр Ruleset;
отсутствует возможность указать расположение журнала):
- Ruleset # набор правил
- Main="off" # в версии 8.2312.0; выполнять набор правил в главном потоке; только первый input() будет главным
Модуль imklog принимает сообщения из журнала ядра. Загрузка модуля активирует его (не нужен input()).
Параметры загрузки:
- InternalMsgFacility="kern" # для собственных сообщений imklog (запуск, останов, ошибка)
- PermitNonKernelFacility="off" # принимать из журнала ядра сообщения с источником не kern
- ConsoleLogLevel="-1" #
- ParseKernelTimestamp="off" # брать время из сообщения, а не по времени прихода
- KeepKernelTimestamp="off" # учитывается при условии ParseKernelTimestamp
- LogPath="/proc/kmsg" или "/dev/klog" в BSD #
- RatelimitInterval="0" # в версии 8.35; в секундах
- RatelimitBurst="10000" # в версии 8.35; в сообщениях
Модуль imkmsg принимает сообщения ядра из структурированного /dev/kmsg ("уровень,номер,отметка-времени;сообщение\n[ключ/значение]...",
см. "dd if=/dev/kmsg iflag=nonblock"). Загрузка модуля активирует его (не нужен input()). Несовместим с imklog.
Модуль immark ничего не принимает, а периодически выводит отметки "я ещё жив".
Загрузка модуля активирует его (не нужен input()).
Параметры загрузки:
- interval="1200" # см. также action.writeAllMarkMessages
Модуль improg принимает сообщения от stdout указанной программы, управление через stdin. Нет в пакете.
Модуль impstats ничего не принимает, а периодически выводит накопленные значения счётчиков, полученные от других модулей
в качестве сообщений syslog (syslog.info). В частности, omfile ведёт счётчики статистики кеширования динамических файлов.
Также модуль самостоятельно ведёт счётчики статистики использования ресурсов (см. getrusage):
utime, stime, maxrss, minflt, majflt, inblock, outblock, nvcsw, nivcsw, openfiles (есть в EL8, нет в EL7).
Загрузка модуля активирует его (не нужен input()), обязательно в начале конфигурации.
Параметры загрузки:
- Interval="300" # секунд
- Facility="5" # syslog
- Severity="6" # info
- ResetCounters="off" # сбрасывать при выводе
- Format="legacy" # legacy, cee, json, json-elasticsearch
- log.syslog="on" # обрабатывать стандартным способом (наборы правил, форматирование)
- log.file # имя файла от корня, напрямую в файл без форматирования (каждая строка содержит - время, ":" и значения счётчиков);
syslog и file можно одновременно
- Ruleset # набор правил
- Bracketing="off" # обрамлять вывод статистики строчками BEGIN и END; порядок не гарантирован
impstats также выводит счётчики очередей (main Q, очереди наборов правил с указанием имени набора, очереди действий с указанием имени действия):
- origin - имя очереди
- size - активных сообщений сейчас в очереди
- enqueued - всего помещено сообщений в очередь
- maxsize - максимальное число активных сообщений за время наблюдения
- full - сколько раз не смогли поместить сообщение в очередь
- discarded.full - сколько сообщений было брошено из-за переполнения очереди
- discarded.nf - сколько сообщений было брошено из-за близости очереди к переполнению
impstats также выводит счётчики действий (именуйте их, иначе вместо имён будут номера):
- processed - сколько сообщений было на входе
- failed - сколько сообщений не смогли обработать
- suspended - количество переходов в состояние ожидания
- suspended.duration - время в секундах, проведённое в ожидании (для всех потоков)
- resumed - количество успешных завершений ожидания
impstats позволяет создавать свои счётчики (dyn-stats), сгруппированные в корзины (stats-buckets) командами
- dyn_stats(name="имя-корзины" параметр2 ...) # определение корзины, параметры:
- name="имя-корзины"
- resettable="on" # сбрасывать при отчёте; независим от resetCounters
- maxCardinality="2000" # макисмальное количество счётчиков в корзине
- unusedMetricLife="3600" # секунд до сброса неиспользуемых счётчиков
- dyn_inc("имя-корзины",выражение) # увеличение счётчика 'выражение'; возвращает 0 при удаче
- при выводе статистики выводится строка с заголовком "global: origin=dynstats" и полями
- имя-корзины.ops_overflow # операций игнорировано из-за превышения количества счётчиков
- имя-корзины.new_metric_add # создано счётчиков
- имя-корзины.no_metric # неверных имён счётчиков
- имя-корзины.metrics_purged # просроченных счётчиков
- имя-корзины.ops_ignored # было некогда
- имя-корзины.purge_triggered # количество сбросов
- при выводе статистики для каждой корзины выводится строка с заголовком "имя-корзины: origin=dynstats.bucket" и полем для каждого счётчика
impstats позволяет создавать свои процентные счётчики (Percentile Stats), сгруппированные в корзины (percentile-stats) командами
- percentile_stats(name="имя-корзины" параметр2 ...) # определение корзины, параметры:
- name="имя-корзины"
- percentiles
- windowSize
- delimiter="."
- percentile_observe("имя-корзины","имя-статистики",целое-выражение) возвращает 0 при удаче
- при выводе статистики выводится строка с заголовком "global: origin=percentile" и полями
- имя-корзины.new_metric_add # создано счётчиков
- имя-корзины.ops_overflow # операций игнорировано из-за превышения количества счётчиков
- при выводе статистики для каждой корзины выводится строка с заголовком "имя-корзины: origin=percentile.bucket"
и полями для каждого счётчика: %, min, max, sum, count
Модуль imptcp принимает сообщения по протоколу TCP (RFC 6587? RFC 5424 с разделителем LF или Octet Counting?)
и через Unix сокеты быстро, но без поддержки TLS.
Шифрование осуществляется внешними средствами (например, stunnel).
Модуль ведёт счётчики статистики (отдельно для каждого источника - "имя-источника(адрес-привязки/порт/IPv4)", имя imptcp, если не указано): submitted.
Слишком длинное сообщение обрезается и записывается сообщение об ошибке с указанием начала сообщения и оставшейся длины.
Параметры загрузки:
- Threads="2" # количество вспомогательных потоков; и ещё 1 поток основной
- MaxSessions="0" # значение по умолчанию для каждого input(); 0 - бесконечность
- ProcessOnPoller="on" # на больших нагрузках рекомендуют отключить
Входные параметры модуля imptcp (параметры input()):
- Name="imptcp" # имя источника
- Ruleset # набор правил; если не задано, то используется умолчальный
- Port # несовместим с Path
- Address # адрес привязки
- Path # путь для сокета, также для сокета задаются FileOwner, FileOwnerNum, FileGroup, FileGroupNum, FileCreateMode, FailOnChOwnFailure, Unlink
- DiscardTruncatedMsg="off" # остаток обрабатывать как следующее сообщение или выбрасывать
- MaxFrameSize="200000" # для режима явного указания длины сообщения перед ним (Octet Counting)
- MaxSessions="0" # количество соединений; 0 - бесконечность
- AddtlFrameDelimiter="-1" # дополнительное к LF значение разделителя сообщений
- SupportOctetCountedFraming="on" # подержка режима явного указания длины сообщения перед ним (Octet Counting)
- NotifyOnConnectionClose="off" # сообщать о закрытии соединения
- NotifyOnConnectionOpen="off" # сообщать об открытии соединения; нет такого?
- KeepAlive="off" #
- KeepAlive.Probes="0" # количество проверок живости партнёра; 0 - определяется ОС
- KeepAlive.Time="0" # секунд? когда начать беспокоиться; 0 - определяется ОС
- KeepAlive.Interval="0" # секунд? интервал между проверками; 0 - определяется ОС
- RateLimit.Interval="0" # секунд, 0 - отключить контроль
- Ratelimit.Burst="10000" #
- Compression.mode # none - без сжатия, single - каждое сообщение сжимается отдельно, stream:always - сжимается весь поток (большие задержки);
стандарт отсутствует (посылает только omfwd)
- FlowControl="on" # тормозить отправителя при необходимости
- MultiLine="off" # новое сообщение распознаются по "<" после LF
- framing.delimiter.regex="off" # использовать регулярное выражение начала сообщения для разделения сообщений
- SocketBacklog="5" # размер очереди ожидания для listen()
- Defaulttz # например, "+03:00" для Москвы
- Framingfix.cisco.asa="off" # борьба с Cisco ASA, который посылает пробел после LF
- ListenPortFileName # в этом файле лежит номер порта
Модуль imtcp принимает сообщения по протоколу TCP (RFC 5425? RFC 6857?).
Шифрование осуществляется сетевым потоковым драйвером (network stream driver) или внешними средствами (stunnel), imgssapi включает функциональность imtcp.
Модуль ведёт счётчики статистики (отдельно для каждого источника - "имя-источника(порт)", имя imtcp, если не указано): submitted.
Параметры загрузки):
- AddtlFrameDelimiter="-1" # дополнительное к LF значение разделителя сообщений
- DisableLFDelimiter="off" # не использовать LF для разделения сообщений
- MaxFrameSize="200000" # для режима явного указания длины сообщения перед ним (Octet Counting)
- NotifyOnConnectionClose="off" # сообщать о закрытии соединения
- NotifyOnConnectionOpen="off" # сообщать об открытии соединения
- KeepAlive="off" #
- KeepAlive.Probes="0" # количество проверок живости партнёра; 0 - определяется ОС
- KeepAlive.Time="0" # секунд? когда начать беспокоиться; 0 - определяется ОС
- KeepAlive.Interval="0" # секунд? интервал между проверками; 0 - определяется ОС
- FlowControl="on" # тормозить отправителя при необходимости
- MaxListeners="20" #
- MaxSessions="200" # количество соединений
- StreamDriver.Name="ptcp?" # выбрать сетевой потоковый драйвер: ptcp (none), gtls, openssl
- StreamDriver.Mode="0" # 0 - без шифрования, 1 - TLS
- StreamDriver.AuthMode="anon?" # anon, x509/fingerprint, x509/certvalid (д.б. общий CA), x509/name
- StreamDriver.PermitExpiredCerts="warn" # warn, on или off
- StreamDriver.CheckExtendedKeyPurpose="off" # для GnuTLS: проверять наличие в сертификате GNUTLS_KP_TLS_WWW_SERVER и GNUTLS_KP_TLS_WWW_CLIENT
- StreamDriver.PrioritizeSAN="off" # для GnuTLS:
при наличии Subject Alternative Name (SAN) проверять его вместо Common Name согласно RFC 6125 вместо RFC 5280
- StreamDriver.TlsVerifyDepth
- ?StreamDriverPermittedPeers="" # должен содержать список через запятую отпечатков сертификатов ("SHA256:10:C4...")
- PermittedPeer # должен содержать в квадратных скобках список через запятую допустимых CN
- gnutlsPriorityString # настройка OpenSSL или GnuTLS
- DiscardTruncatedMsg="off" # остаток обрабатывать как следующее сообщение или выбрасывать
- PreserveCase="on" # сохранять регистр букв в fromhost
Входные параметры модуля imtcp (для input()):
- Name="imtcp" # имя источника
- Port # если 0, то любой свободный, записывается в ListenPortFileName
- ListenPortFileName # в этом файле лежит номер порта
- Address # адрес привязки (якобы в реальности привязывается ко всем интерфейсам)
- Ruleset # набор правил
- SupportOctetCountedFraming="on" # подержка режима явного указания длины сообщения перед ним (Octet Counting)
- RateLimit.Interval="0" # секунд, 0 - отключить контроль
- Ratelimit.Burst="10000" #
- StreamDriver.Name # по умолчанию параметр загрузки модуля; выбрать сетевой потоковый драйвер: ptcp (none), gtls, openssl
- StreamDriver.Mode # по умолчанию параметр загрузки модуля; 0 - без шифрования, 1 - TLS
- StreamDriver.AuthMode # по умолчанию параметр загрузки модуля; anon, x509/fingerprint, x509/certvalid (д.б. общий CA), x509/name
- StreamDriver.PermitExpiredCerts # по умолчанию параметр загрузки модуля; warn, on или off
- StreamDriver.CheckExtendedKeyPurpose # по умолчанию параметр загрузки модуля;
для GnuTLS: проверять наличие в сертификате GNUTLS_KP_TLS_WWW_SERVER и GNUTLS_KP_TLS_WWW_CLIENT
- StreamDriver.PrioritizeSAN # по умолчанию параметр загрузки модуля; для GnuTLS:
при наличии Subject Alternative Name (SAN) проверять его вместо Common Name согласно RFC 6125 вместо RFC 5280
- StreamDriver.TlsVerifyDepth # по умолчанию параметр загрузки модуля
- streamDriver.CAFile, streamDriver.CRLFile, streamDriver.KeyFile, streamDriver.CertFile # перекрывают глобальные параметры
- PermittedPeer # должен содержать в квадратных скобках список через запятую допустимых CN
- gnutlsPriorityString # по умолчанию параметр загрузки модуля; настройка OpenSSL или GnuTLS
- FlowControl # по умолчанию параметр загрузки модуля; тормозить отправителя при необходимости
- MaxListeners # по умолчанию параметр загрузки модуля
- MaxSessions # по умолчанию параметр загрузки модуля; количество соединений
- DisableLFDelimiter # по умолчанию параметр загрузки модуля; не использовать LF для разделения сообщений
- DiscardTruncatedMsg # по умолчанию параметр загрузки модуля; остаток обрабатывать как следующее сообщение или выбрасывать
- AddtlFrameDelimiter="-1" # по умолчанию параметр загрузки модуля; дополнительное к LF значение разделителя сообщений
- NotifyOnConnectionClose="off" # по умолчанию параметр загрузки модуля; сообщать о закрытии соединения;
NotifyOnConnectionOpen отсутствует?
- MaxFrameSize="200000" # по умолчанию параметр загрузки модуля; для режима явного указания длины сообщения перед ним (Octet Counting)
- PreserveCase="on" # по умолчанию параметр загрузки модуля; сохранять регистр букв в fromhost
- KeepAlive, KeepAlive.Probes, KeepAlive.Time, KeepAlive.Interval # по умолчанию параметр загрузки модуля
Модуль imudp принимает сообщения по протоколу UDP (RFC 3164). Можно сконфигурировать несколько приёмников с помощью input().
Модуль ведёт счётчики статистики отдельно для каждого потока ("imudp(wНомер)": called.recvmmsg (вызовов recvmmsg()),
called.recvmsg (вызовов recvmsg()), msgs.received (полученных сообщений), disallowed (в версии 8.35.0).
Модуль ведёт счётчики статистики отдельно для каждого источника (input()) - "имя-источника(адрес:порт)" (imudp, если забыли указать имя): submitted.
Параметры загрузки:
- TimeRequery="2" # интервал (в пакетах сообщений) между запросами точного времени, механизм включается только при большом потоке
- SchedulingPolicy # fifo (планировщик realtime), rr, other
- SchedulingPriority #
- BatchSize="32" # запрашивать UDP пакеты пачками (recvmmsg())
- Threads="1" # количество рабочих потоков для сетевых запросов (каждый поток обслуживает все порты)
- PreserveCase="off" # сохранять регистр букв в fromhost
Входные параметры модуля imudp:
- Name="imudp" # имя источника
- Name.appendPort="off" # добавить номер порта к имени источника (например, "imudp514")
- Address # адрес привязки ("*" - ко всем интерфейсам)
- Port="514" # массив (список через запятую в квадратных скобках)
- IpFreeBind="2" # 0 - не использовать IP_FREEBIND, 1 - молча привязать к нелокальному адресу, 2 - привязать и сообщить
- Device # имя интерфейса, например, eth0
- Ruleset="RSYSLOG_DefaultRuleset" # набор правил
- Ratelimit.Interval="0" # секунд, 0 - отключить контроль
- Ratelimit.Burst="10000" #
- DefaultTZ # например, "+03:00" для Москвы
- RcvBufSize="0" # 0 - автонастройка
Модуль imuxsock принимает сообщения через сокеты (не более 50) от syslog(3).
Модуль ведёт глобальные счётчики статистики: submitted, ratelimit.discarded и ratelimit.numratelimiters.
Параметры загрузки модуля (многие SysSock.* игнорируются при работе с systemd, который самостоятельно читает /dev/log
и понравившееся выдаёт в /run/systemd/journal/dev-log (ссылка из /dev/log)):
- SysSock.Name="/dev/log" # для совместимости с systemd - SysSock.Name="/run/systemd/journal/syslog" (в реальности, /run/systemd/journal/dev-log)
- SysSock.IgnoreTimestamp="on" # не доверять отметкам времени из сообщений
- SysSock.IgnoreOwnMessages="on" # особенно полезно, если пишем в journald, а тот пишет в /dev/log, чтобы не зациклить сообщения
- SysSock.Use="on" # если отключить, то загрузки модуля недостаточно, требуется input()
- SysSock.FlowControl="off" #
- SysSock.UsePIDFromSystem="off" # получать pid из сокета и переписывать этикетку в сообщении
- SysSock.RateLimit.Interval="0" # секунд; 0 - отключить контроль
- SysSock.RateLimit.Burst="200" # сообщений за интервал от одного процесса
- SysSock.RateLimit.Severity="1" # кого ограничивать
- SysSock.UseSysTimeStamp="on" # брать время не из текста сообщения, а из данных сокета
- SysSock.Annotate="off" # заполнить доверенные (полученные от системы, а не от приложения) переменные:
_UID, _GID, _PID, _EXE, _COMM, _CMDLINE (может содержать пробелы);
добавляются в конец сообщения после " @[" и завершаются "]"
- SysSock.ParseTrusted="off" # создать JSON структуру из доверенных переменных
- SysSock.Unlink="on" # сокет создаётся и удаляется; не действует при сосуществовании с systemd
- SysSock.UseSpecialParser="on" # формат слегка отличается от стандарта (точное время, нет имени хоста)
- SysSock.ParseHostname="off" # ожидать имя хоста в сообщении (в /dev/log его нет);
действует только при отключённом специальном разборщике
Входные параметры модуля imuxsock (описание см. в параметрах загрузки):
- Ruleset=умолчальный # набор правил
- IgnoreTimestamp="on"
- IgnoreOwnMessages="on"
- FlowControl="off"
- RateLimit.Interval="0"
- RateLimit.Burst="200"
- RateLimit.Severity="1"
- UsePIDFromSystem="off"
- UseSysTimeStamp="on"
- CreatePath="off" # создавать промежуточные каталоги (права 0755)
- Socket # имя дополнительного сокета
- HostName # поменять имя хоста на указанное
- Annotate="off"
- ParseTrusted="off"
- Unlink="on"
- UseSpecialParser="on"
- ParseHostname="off"
Модули модификации используются как модули вывода или разбора (изменяют разобранное сообщение перед другими действиями).
Модуль анонимизации IP адресов mmanon заменяет IP адреса в сообщении на поддельные.
Входные параметры (параметры action()):
- ipv4.enable="on"
- ipv4.mode="zero" # simple - цифры заменяются на указанный символ; zero - цифры заменяются на нули с нормализацией чисел;
random - заменяет адрес на случайный; random-consistent - заменяет адрес на случайный с сохранением соответствия
- ipv4.bits="16" # сколько бит анонимизировать; позволяет сохранить номер сети
- ipv4.replaceChar="x" #
- ipv6.enable="on"
- ipv6.anonmode="zero"
- ipv6.bits="96"
- embeddedipv4.enable="on"
- embeddedipv4.anonmode="zero"
- embeddedipv4.bits="96"
Модуль mmcount позволяет подсчитать количество соответствующих фильтру сообщений.
Результат записывается в json элемент mmcount ("$!mmcount").
Входные параметры (параметры action()):
- appname # считаются сообщения от данного приложения
- key # считаются сообщения, имеющие указанный ключ json
- value # считаются сообщения, имеющие указанный ключ json с указанным значением
Модуль mmexternal позволяет использовать внешнюю программу для модификации сообщений.
Входные параметры (параметры action()):
- binary # имя программы
- interface.input="msg" # на вход программе можно подавать msg, rawmsg или fulljson
- output # имя файла для записи stdout программы; для отладки
- forceSingleInstance="off" # запускать только 1 экземпляр программы для всех потоков
Модуль mmfields извлекает поля и размещает их в формате CEE/lumberjack (поля именутся как fНомер).
Входные параметры (параметры action()):
- separator=","
- jsonRoot="!" # куда писать результат JSON ("$!" - это корень)
Модуль mmjsonparse позволяет разобрать структурированные сообщения в формате CEE/lumberjack (CEE cookie).
Модуль mmnormalize (пакет rsyslog-mmnormalize) позволяет использовать
liblognorm (/usr/share/doc/liblognorm/html/index.html) для разбора сообщения на пользовательские свойства.
Результат нормализации записывается в формате CEE/lumberjack (использовать можно, например, как "%$!hostname%").
Параметр загрузки: allow_regex="off".
Входные параметры (параметры action()):
- ruleBase # имя файла с правилами для liblognorm
- rule # массив правил для liblognorm
- useRawMsg="off" # использовать только msg часть сообщения или исходное сообщение целиком
- path="$!" # куда писать результат JSON, "$!" - это в корень, "$." - локальная переменная
- variable="msg" # что нормализовать, можно указывать свойство сообщения, локальную переменную, путь JSON
Пример правила из руководства liblognorm:
rule=:%date:date-rfc3164% %host:word% %tag:char-to:\x3a%: no longer listening on %ip:ipv4%#%port:number%
Модуль mmpstrucdata позволяет разобрать структурированные сообщения (sd) в формате RFC 5424.
Результат нормализации записывается в формате CEE/lumberjack (например, "%$!hostname%") в корень!rfc5424-sd!имя.
Входные параметры (параметры action()):
- jsonRoot="!"
- sd_name.lowercase="on"
Модуль mmrfc5424addhmac позволяет добавить HMAC к сообщению (средств проверки не предоставлено).
Модуль mmrm1stspace позволяет удалить первый пробел из msg, если он есть.
Модуль mmutf8fix исправляет ошибки в последовательности UTF-8.
Меняет само сообщение, но не меняет разобранные свойства (properties).
Входные параметры (параметры action()):
- mode="utf-8" # utf-8 - ошибочные последовательности заменяются, controlcharacters - заменяются все не US ASCII символы
- replacementChar=" "
Модули генерации строк вызываются из модулей вывода при использовании шаблонов для оптимизации (5%):
- smfile (встроенный) - файловый формат по умолчанию
- smfwd (встроенный) - формат передачи по сети по умолчанию
- smtradfile (встроенный) - традиционный файловый формат
- smfwd (встроенный) - традиционный формат передачи по сети
Имеются также библиотечные модули, которые загружаются автоматически и неподвластны пользователю.
В документации они не перечислены, но в /usr/lib64/rsyslog/ имеются lmnet.so, lmnetstrms.so,
lmnsd_ptcp.so, lmregexp.so, lmtcpclt.so, lmtcpsrv.so и lmzlibw.so.
Пример настройки коллектора в новом формате
(клиент должен организовать DA-очередь при посылке сообщений на сервер):
global(workDirectory="/var/log/syslog/work")
global(net.ipprotocol="ipv4-only")
#global(net.enableDNS="off")
global(senders.keepTrack="on")
global(senders.timeoutAfter="604800")
global(senders.reportGoneAway="on")
global(senders.reportNew="on")
$AbortOnUncleanConfig on
timezone(id="MSK" offset="+03:00")
timezone(id="MSD" offset="+03:00")
$LocalHostIPIF bond0
main_queue(queue.type="FixedArray" queue.size="100000")
module(load="impstats")
module(load="pmlastmsg")
parser(name="custom.rfc3164" type="pmrfc3164" detect.YearAfterTimestamp="on")
# The imjournal module bellow is now used as a message source instead of imuxsock.
# imuxsock provides support for local system logging (e.g. via logger command)
module(load="imuxsock")
module(load="imjournal" StateFile="imjournal.state" Ratelimit.Burst="100000")
#module(load="imklog") # reads kernel messages (the same are read from journald)
#module(load="immark") # provides --MARK-- message capability
module(load="imudp" TimeRequery="1")
module(load="imptcp")
# шаблон для записи в файл в развёрнутом формате
template(name="SyslogRFC5424explained" type="string" string="%timegenerated:::date-rfc3339% %fromhost-ip% <%syslogfacility-text%:%syslogseverity-text%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% %structured-data% %msg%\n")
# шаблоны для имён файлов (разделение по типам и хостам)
template (name="DynFile-kern" type="string" string="/var/log/syslog/current/kern/%fromhost%.log")
template (name="DynFile-user" type="string" string="/var/log/syslog/current/user/%fromhost%.log")
template (name="DynFile-mail" type="string" string="/var/log/syslog/current/mail/%fromhost%.log")
template (name="DynFile-daemon" type="string" string="/var/log/syslog/current/daemon/%fromhost%.log")
template (name="DynFile-secure" type="string" string="/var/log/syslog/current/secure/%fromhost%.log")
template (name="DynFile-ftp" type="string" string="/var/log/syslog/current/ftp/%fromhost%.log")
template (name="DynFile-cron" type="string" string="/var/log/syslog/current/cron/%fromhost%.log")
template (name="DynFile-news" type="string" string="/var/log/syslog/current/news/%fromhost%.log")
template (name="DynFile-uucp" type="string" string="/var/log/syslog/current/uucp/%fromhost%.log")
template (name="DynFile-syslog" type="string" string="/var/log/syslog/current/syslog/%fromhost%.log")
template (name="DynFile-lpr" type="string" string="/var/log/syslog/current/lpr/%fromhost%.log")
template (name="DynFile-ntp" type="string" string="/var/log/syslog/current/ntp/%fromhost%.log")
template (name="DynFile-unknown" type="string" string="/var/log/syslog/current/unknown/%fromhost%.log")
template (name="DynFile-by-host" type="string" string="/var/log/syslog/current/host/%fromhost%.log")
template (name="DynFile-routers" type="string" string="/var/log/syslog/current/routers/%fromhost%.log")
template (name="DynFile-dns" type="string" string="/var/log/syslog/current/dns/%fromhost%.log")
template (name="DynFile-samba" type="string" string="/var/log/syslog/current/samba/%fromhost%.log")
template (name="DynFile-ldap" type="string" string="/var/log/syslog/current/ldap/%fromhost%.log")
template (name="DynFile-squid" type="string" string="/var/log/syslog/current/squid/%fromhost%.log")
template (name="DynFile-jabber" type="string" string="/var/log/syslog/current/jabber/%fromhost%.log")
template (name="DynFile-ups" type="string" string="/var/log/syslog/current/ups/%fromhost%.log")
template (name="DynFile-boot" type="string" string="/var/log/syslog/current/boot/%fromhost%.log")
template (name="DynFile-systemd" type="string" string="/var/log/syslog/current/systemd/%fromhost%.log")
template (name="DynFile-hardware" type="string" string="/var/log/syslog/current/hardware/%fromhost%.log")
template (name="DynFile-backup" type="string" string="/var/log/syslog/current/backup/%fromhost%.log")
ruleset(name="common") {
action(type="omfile" dynaFile="DynFile-by-host" dynaFileCacheSize="300" Template="SyslogRFC5424explained")
if $syslogfacility-text == "kern"
then {
action(type="omfile" dynaFile="DynFile-kern" dynaFileCacheSize="100" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/kern.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "user"
then {
action(type="omfile" dynaFile="DynFile-user" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/user.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "mail"
then {
action(type="omfile" dynaFile="DynFile-mail" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/mail.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "daemon"
then {
if $app-name == "ntpdate"
then {
action(type="omfile" dynaFile="DynFile-ntp" dynaFileCacheSize="100" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/ntp.log" Template="SyslogRFC5424explained")
} else if $app-name == "systemd"
then {
action(type="omfile" dynaFile="DynFile-systemd" dynaFileCacheSize="100" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/systemd.log" Template="SyslogRFC5424explained")
} else if $app-name == "rsyncd"
then {
action(type="omfile" dynaFile="DynFile-backup" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/backup.log" Template="SyslogRFC5424explained")
} else if $app-name == "bacula-dir"
then {
action(type="omfile" dynaFile="DynFile-backup" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/backup.log" Template="SyslogRFC5424explained")
} else if $app-name == "bacula-fd"
then {
action(type="omfile" dynaFile="DynFile-backup" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/backup.log" Template="SyslogRFC5424explained")
} else if $app-name == "chronyd"
then {
action(type="omfile" dynaFile="DynFile-ntp" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/ntp.log" Template="SyslogRFC5424explained")
} else if $app-name == "ntpd"
then {
action(type="omfile" dynaFile="DynFile-ntp" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/ntp.log" Template="SyslogRFC5424explained")
} else if $app-name == "smartd"
then {
action(type="omfile" dynaFile="DynFile-hardware" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/hardware.log" Template="SyslogRFC5424explained")
} else if $app-name == "mcelog"
then {
action(type="omfile" dynaFile="DynFile-hardware" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/hardware.log" Template="SyslogRFC5424explained")
} else if $app-name == "crond"
then {
action(type="omfile" dynaFile="DynFile-cron" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/cron.log" Template="SyslogRFC5424explained")
} else {
action(type="omfile" dynaFile="DynFile-daemon" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/daemon.log" Template="SyslogRFC5424explained")
}
} else if ($syslogfacility-text == "auth" or $syslogfacility-text == "authpriv")
then {
action(type="omfile" dynaFile="DynFile-secure" dynaFileCacheSize="300" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/secure.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "syslog"
then {
action(type="omfile" dynaFile="DynFile-syslog" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/syslog.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "lpr"
then {
action(type="omfile" dynaFile="DynFile-lpr" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/lpr.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "news"
then {
action(type="omfile" dynaFile="DynFile-news" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/news.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "uucp"
then {
action(type="omfile" dynaFile="DynFile-uucp" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/uucp.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "cron"
then {
action(type="omfile" dynaFile="DynFile-cron" dynaFileCacheSize="300" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/cron.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "ftp"
then {
action(type="omfile" dynaFile="DynFile-ftp" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/ftp.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "ntp"
then {
action(type="omfile" dynaFile="DynFile-ntp" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/ntp.log" Template="SyslogRFC5424explained")
} else if $syslogfacility == "13"
then {
action(type="omfile" dynaFile="DynFile-unknown" Template="SyslogRFC5424explained")
} else if $syslogfacility == "14"
then {
action(type="omfile" dynaFile="DynFile-unknown" Template="SyslogRFC5424explained")
} else if $syslogfacility == "15"
then {
action(type="omfile" dynaFile="DynFile-unknown" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "local0"
then {
action(type="omfile" dynaFile="DynFile-routers" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/routers.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "local1"
then {
action(type="omfile" dynaFile="DynFile-dns" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/dns.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "local2"
then {
action(type="omfile" dynaFile="DynFile-samba" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/samba.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "local3"
then {
action(type="omfile" dynaFile="DynFile-ldap" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/ldap.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "local4"
then {
action(type="omfile" dynaFile="DynFile-squid" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/squid.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "local5"
then {
action(type="omfile" dynaFile="DynFile-jabber" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/jabber.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "local6"
then {
action(type="omfile" dynaFile="DynFile-ups" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/ups.log" Template="SyslogRFC5424explained")
} else if $syslogfacility-text == "local7"
then {
# некоторые модели коммутаторов не позволяют настраивать facility и сыплют в local7
if ($fromhost-ip == '192.168.173.35') or ($fromhost-ip == '192.168.173.36') or ($fromhost-ip == '192.168.173.37') or ($fromhost-ip == '192.168.173.38') or ($fromhost-ip == '192.168.173.39') or ($fromhost-ip == '192.168.173.40') or ($fromhost-ip == '192.168.173.237') or ($fromhost-ip == '192.168.174.6')
then {
action(type="omfile" dynaFile="DynFile-routers" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/routers.log" Template="SyslogRFC5424explained")
} else {
action(type="omfile" dynaFile="DynFile-boot" Template="SyslogRFC5424explained")
action(type="omfile" file="/var/log/syslog/current/boot.log" Template="SyslogRFC5424explained")
}
} else {
action(type="omfile" dynaFile="DynFile-unknown" Template="SyslogRFC5424explained")
}
# action(type="omfile" file="/var/log/syslog/all" Template="RSYSLOG_SyslogProtocol23Format")
action(type="omfile" file="/var/log/syslog/alltext" Template="SyslogRFC5424explained")
# if $fromhost-ip == '127.0.0.1' then {
if $fromhost-ip == '192.168.152.24' then {
# локальные сообщения на дублирующий сервер
action(type="omfwd" template="RSYSLOG_SyslogProtocol23Format" Target="syslog2.cs.niisi.ras.ru" Protocol="tcp" Port="514")
if $syslogfacility-text == "authpriv" then {
action(type="omfile" file="/var/log/secure" Template="RSYSLOG_TraditionalFileFormat")
} else {
if $syslogfacility-text == "mail" then {
action(type="omfile" file="/var/log/maillog" Template="RSYSLOG_TraditionalFileFormat")
} else {
if $syslogfacility-text == "cron" then {
action(type="omfile" file="/var/log/cron" Template="RSYSLOG_TraditionalFileFormat")
} else {
action(type="omfile" file="/var/log/messages" Template="RSYSLOG_TraditionalFileFormat")
}
}
}
}
}
ruleset(name="rule3164" parser=["rsyslog.lastline","custom.rfc3164"]) {
call common
}
ruleset(name="rule5424" parser=["rsyslog.lastline","rsyslog.rfc5424","custom.rfc3164"]) {
call common
}
$DefaultRuleset rule5424
input(type="imuxsock" UsePIDFromSystem="on" Socket="/run/systemd/journal/syslog" Unlink="off")
input(type="imudp" Name="udp3164" Address="grid0024.cs.niisi.ras.ru" Port="514" DefaultTZ="+03:00" Ruleset="rule3164")
#input(type="imptcp" Name="tcp6857" Address="grid0024.cs.niisi.ras.ru" Port="514" DefaultTZ="+03:00" NotifyOnConnectionClose="on" NotifyOnConnectionOpen="on" Ruleset="rule5424")
input(type="imptcp" Name="tcp6857" Address="grid0024.cs.niisi.ras.ru" Port="514" DefaultTZ="+03:00" NotifyOnConnectionClose="on" Ruleset="rule5424")
Имеет модульную структуру (загрузка модулей производится директивой "$ModLoad имя-модуля"):
- модули ввода - /usr/lib64/rsyslog/im*
- imudp - приём сообщений с использованием обычного syslog протокола UDP
- imuxsock - приём местных сообщений (logger) через сокет
- imklog - приём сообщений ядра (klogd)
- immark - отметки MARK
- imfile - ввод сообщений из текстового файла
- imtcp - приём сообщений с использованием протокола TCP
- imrelp - приём сообщений с использованием протокола RELP
- модули дополнительных возможностей (Library Modules) - /usr/lib64/rsyslog/lm*
- lmnet
- lmnetstrms
- lmnsd_ptcp
- lmregexp
- lmtcpclt
- lmtcpsrv
- модули вывода -/usr/lib64/rsyslog/om*
- omsnmp - посылка сообщений с помощью SNMP trap
- ommail - посылка сообщений с помощью e-mail
- omrelp - модуль передачи сообщений с помощью протокола RELP
- ommysql - модуль записи сообщений в БД MySQL
- ompgsql - модуль записи сообщений в БД PostgreSQL
- omlibdbi - модуль записи сообщений в БД через libdbi (Firebird/Interbase,
MS SQL, Sybase, SQLLite, Ingres, Oracle)
Между модулем ввода (imtcp) и подлежащим транспортным уровнем можно
поместить драйвер потока (Network Stream Drivers), который обеспечивает
последовательность, аутентификацию и секретность:
- ptcp - просто TCP, без шифрования и аутентификации
- gtls - GnuTLS (режимы шифрования: 0 - без шифрования, 1 - TLS;
режимы аутентификации: anon, x509/fingerprint - проверка fingerprint,
x509/certvalid - проверка сертификата на корректность,
x509/name - проверка имени (Subject), в текущей реализации корневой CA должен быть одинаков)
Используемые файлы:
- /etc/rsyslog.conf - конфигурационный файл (изменяется при запуске
параметром -f)
- /dev/log - сокет, с которого читаются локальные сообщения
(изменяется при запуске параметром -p)
- /var/run/syslogd.pid - идентификатор процесса
Реакция на сигналы:
- SIGHUP - реинициализация (закрывает все файлы, читает заново файл
конфигурации, разрываются TCP соединения, сбрасываются хранящиеся в памяти очереди, запускается внеочередная очистка (janitor))
- SIGTERM, SIGINT, SIGQUIT - завершение работы
- SIGUSR1 - включить/выключить отладку (только при использовании ключа -d)
- SIGCHLD - дождаться завершения порождённых процессов
В отличие от sysklogd синхронизация выключена по умолчанию.
Формат временных отметок при записи в файл по умолчанию изменён.
При передаче сообщений на удалённый сервер они предваряются именем хоста
(как это обрабатывается logwatch?!),
рекомендуется обеспечить совместимость следующим образом:
$template sysklogd,"<%PRI%>%TIMESTAMP% %syslogtag%%msg%"
*.* @192.168.0.1;sysklogd
Принимаемые сообщения могут складываться в главную очередь сообщений
(MainMsg, параметры собираются по всему файлу настройки)
перед обработкой правил (есть и другие очереди перед каждым действием - Action,
отдельная очередь для каждого действия, параметры должны быть определены до описания действия).
Типы очередей (QueueType):
- Direct - отсутствие очереди, позволяет вернуть статус выполнения, что обязательно
для работы логики резервирования сервера журналов
- Disk - буферизация с использованием файлов, надёжно (требуется ручная работа), медленно;
можно задать шаблон имени файла (QueueFilename, WorkDirectory),
размер куска (QueueMaxFileSize), интервал сохранения (QueueCheckpointInterval)
- LinkedList - очередь в памяти, быстро, не переживёт аварию;
реализована в виде связанного списка, динамическое выделение памяти
- FixedArray - очередь в памяти, быстро, не переживёт аварию;
реализована в виде массива указателей, меньшее потребление CPU
- очередь в памяти с файловой поддержкой (disk-assisted, DA);
LinkedList или FixedArray с заданием шаблона имени файла;
файловая очередь используется при необходимости (переполнение очереди в памяти или
выключение сервера) с учётом HighWatermark и LowWatermark
Количество потоков обработки очереди выбирается автоматически
в зависимости от заполнения очереди (QueueWorkerThreadMinimumMessages, QueueWorkerThreads).
Ненужные более потоки уничтожаются при истечении времени неактивности
(QueueWorkerTimeoutShutdown).
При катастрофическом переполнении очереди (QueueDiscardMark) менее приоритетные сообщения
(QueueDiscardSeverity) выкидываются.
При длительном переполнении очереди приём новых сообщений останавливается полностью
(QueueTimeoutEnqueue) и все входящие сообщения могут выкидываться.
Скорость обработки можно замедлять паузами между обработкой сообщений (QueueDequeueSlowdown).
Не меняет права доступа к имеющимся файлам.
Ключи запуска (/etc/sysconfig/rsyslog, /etc/rc.d/init.d/rsyslog):
- -c версия (выбор режима совместимости; д.б. первым в строке;
-c0 или по умолчанию - совместимость с sysklogd; -c2 - rsyslogd 2)
- -A (использовать все возможные пути посылки UDP-сообщений, может приводить к дублированию)
- -4 (прослушивать только IPv4 порт)
- -6 (прослушивать только IPv6 порт)
- -a дополнительный-прослушиваемый-сокет
(версия 0 или 2; полезен для демонов, делающих chroot; может быть несколько)
- -d (отладочный режим; не переходит в фоновый режим)
- -f имя-конфигурационного-файла (по умолчанию, /etc/rsyslog.conf)
- -h (версия 0 или 2; изменить обычное поведение, при котором сообщения, принятые от
удаленных хостов, не передаются дальше для записи на удаленном хосте
во избежание зацикливания)
- -i pid-файл (/var/run/syslogd.pid)
- -l список-хостов (список хостов, имена которых должны
записываться в простом виде, а не FQDN; разделяются двоеточием)
- -m минут (версия 0 или 2;
интервал для регулярных временных записей; по
умолчанию - 20; если 0, то не делать вообще)
- -n (не уходить в фоновый режим; необходим для запуска из init)
- -N уровень (проверить правильность конфигурационного файла, 1 - обычная проверка)
- -o (версия 2; не читать с /dev/log)
- -p прослушиваемый-сокет (версия 0 или 2; по умолчанию: /dev/log)
- -q (при сбоях DNS во время обработки ACL использовать имена хостов)
- -Q (не разрешать DNS во время обработки ACL)
- -r[порт] (версия 0 или 2; разрешить принимать UDP сообщения от
удаленных хостов)
- -s список-доменов (обрезать из имен хостов имена указанных
доменов; разделяются двоеточием; по умолчанию обрезается домен, совпадающий
с доменом сервера syslog)
- -t[порт] (версия 2; разрешить принимать TCP сообщения от
удаленных хостов)
- -v (показать версию и закончить работу)
- -w (не выводить предупреждения о получении сообщений от недоверенных хостов)
- -x (запретить определять имя хоста по его адресу, предотвращает
deadlock при работе на одном хосте с сервером DNS)
Файл представляет собой набор общих директив, директив модулей
и правил маршрутизации сообщений.
Комментарии начинаются с символа '#'.
Обратная косая черта в конце строки означает продолжение правила на следующей строке.
Максимальная длина строки - 4KB.
Директивы начинаются с символа '$'.
Общие директивы (параметры, описывающие действие должны быть до активизации действия;
при задании размера можно использовать суффиксы: k, m, g, t (двоичные) и K, M, G, T (десятичные)):
- $ActionExecOnlyWhenPreviousIsSuspended off|on (если для селектора определено несколько
действий, то следующее действие выполняется только, если предыдущее завершилось неуспешно,
так реализуется резервирование сервера)
- $ActionExecOnlyOnceEveryInterval секунд (выполнять действия не чаще указанного,
полезно для ommail)
- $ActionExecOnlyEveryNthTime число (обрабатывать только каждое n-ое сообщение)
- $ActionExecOnlyEveryNthTimeTimeout секунд (сбрасывать счётчик n-ых сообщений, 0 - по умолчанию)
- $ActionFileDefaultTemplate имя-шаблона (шаблон формата при записи в файл журнала,
шаблон RSYSLOG_TraditionalFileFormat совместимость со форматом журналов при записи в файл,
шаблон RSYSLOG_ForwardFormat задаёт новый формат при передаче сообщений на удалённый сервер)
- $ActionFileEnableSync off|on (синхронизация при записи)
- $ActionForwardDefaultTemplate имя-шаблона (шаблон формата при передаче по протоколам UDP и TCP)
- $ActionGSSForwardDefaultTemplate имя-шаблона (шаблон формата при передаче по протоколу GSS-API)
- параметры очереди действия:
- $ActionQueueCheckpointInterval число-сообщений
- $ActionQueueDequeueSlowdown микросекунд (0)
- $ActionQueueDiscardMark число (9750)
- $ActionQueueDiscardSeverity уровень-серьёзности (4, т.е. warning)
- $ActionQueueFileName начало-имени-файла
- $ActionQueueHighWaterMark число-сообщений (8000)
- $ActionQueueImmediateShutdown off|on (off)
- $ActionQueueSize число-сообщений (10000)
- $ActionQueueLowWaterMark число-сообщений (2000)
- $ActionQueueMaxFileSize размер (1m)
- $ActionQueueTimeoutActionCompletion милисекунд (1000, 0 - немедленно)
- $ActionQueueTimeoutEnqueue милисекунд (2000, 0 - бесконечность)
- $ActionQueueTimeoutShutdown милисекунд (0, 0 - бесконечность)
- $ActionQueueWorkerTimeoutThreadShutdown милисекунд (6000)
- $ActionQueueType Direct|FixedArray|LinkedList|Disk
- $ActionQueueSaveOnShutdown off|on
- $ActionQueueWorkerThreads число (1)
- $ActionQueueWorkerThreadMinumumMessages число-сообщений (100)
- $ActionResumeInterval секунд (30, начальный интервал между проверками,
не "ожил" ли получатель сообщений; повторные интервалы прогресивно увеличиваются)
- $ActionResumeRetryCount число (0, -1 - бесконечность)
- $ActionSendResendLastMsgOnReconn off|on (повторять ли последнее сообщение при восстановлении связи)
- $ActionSendStreamDriver ptcp|gtsl
- $ActionSendStreamDriverMode режим-секретности (0)
- $ActionSendStreamDriverAuthMode режим-аутентификации
- $ActionSendStreamDriverPermittedPeer имя-или-fingerprint
- $AllowedSender список-допустимых-отправителей (по умолчанию - любой;
список разделяется запятыми; первым элементом должен быть "UDP" или "TCP или "";
сетевой адрес может сопровождаться "/длина-маски-сети";
в именах можно использовать шаблоны
- $ControlCharacterEscapePrefix символ (\)
- $DefaultNetstreamDriver ptcp|gtsl
- $DefaultNetstreamDriverCAFile имя-файла-CA (в формате .pem)
- $DefaultNetstreamDriverCertFile имя-файла-сертификата (в формате .pem)
- $DefaultNetstreamDriverKeyFile имя-файла-частного-ключа (в формате .pem)
- $DirCreateMode 0644
- $DirGroup имя-группы (только для создаваемых каталогов)
- $DirOwner имя-владельца (только для создаваемых каталогов)
- $DropMsgsWithMaliciousDnsPTRRecords off|on
- $DropTrailingLFOnReception on|off
- $DynaFileCacheSize число (10, определяет число одновременно открытых файлов)
- $EscapeControlCharactersOnReceive on|off (например, ^G преобразуется в "\007")
- $ErrorMessagesToStderr on|off
- $FailOnChownFailure on|off (не создавать файл, если обнаружены ошибки в $DirOwner/$FileOwner)
- $FileCreateMode 0644 (зависит также от $umask)
- $FileGroup имя-группы (только для создаваемых файлов)
- $FileOwner имя-владельца (только для создаваемых файлов)
- $IncludeConfig имя-включаемого-файла (допустимо вложение,
можно включать целый каталог/ или файлы по шаблону*)
- параметры основной очереди:
- $MainMsgQueueCheckpointInterval число-сообщений
- $MainMsgQueueDequeueSlowdown микросекунд (0)
- $MainMsgQueueDiscardMark число (9750)
- $MainMsgQueueDiscardSeverity уровень-серьёзности (4, т.е. warning)
- $MainMsgQueueFileName начало-имени-файла
- $MainMsgQueueHighWaterMark число-сообщений (8000)
- $MainMsgQueueImmediateShutdown off|on (off)
- $MainMsgQueueSize число-сообщений (10000)
- $MainMsgQueueLowWaterMark число-сообщений (2000)
- $MainMsgQueueMaxFileSize размер (1m)
- $MainMsgQueueTimeoutActionCompletion милисекунд (1000, 0 - немедленно)
- $MainMsgQueueTimeoutEnqueue милисекунд (2000, 0 - бесконечность)
- $MainMsgQueueTimeoutShutdown милисекунд (0, 0 - бесконечность)
- $MainMsgQueueWorkerTimeoutThreadShutdown милисекунд (6000)
- $MainMsgQueueType FixedArray|Direct|LinkedList|Disk
- $MainMsgQueueSaveOnShutdown off|on
- $MainMsgQueueWorkerThreads число (1)
- $MainMsgQueueWorkerThreadMinumumMessages число-сообщений (100)
- $MaxMessageSize размер (2k; UDP - до 4k; MS Windows Event Log - до 64k)
- $ModDir каталог-модулей ('/' в конце имени)
- $ModLoad имя-модуля (можно использовать полный путь или сокращённое имя, модуль
должен быть загружен до первой директивы его настройки)
- $RepeatedMsgReduction on|off
- $outchannel имя-канала,имя-файла,максимальный-размер,имя-скрипта-обработки-переполнения
(предполагалось вынести описание действия из правила маршрутизации
в отдельную директиву, работы не завершены и заброшены)
- $ResetConfigVariables (полезен после $IncludeConfig, чтобы привести все значения по умолчанию)
- $template имя-шаблона,описание-шаблона[,{sql|stdsql}]
(sql и sqlstd вызывает форматирование результата выполнения шаблона в вид, пригодный
для MySQL или стандартный SQL)
- $WorkDirectory имя-рабочего-каталога (сюда пишутся файлы с очередью)
- $umask маска
Директивы модуля imudp:
- $UDPSeverAddress IP-адрес (по умолчанию прослушиваются все интерфейсы ("*"),
директив может быть несколько)
- $UDPServerRun имя-или-номер-порта (514, обязательно после задания адреса,
директив может быть несколько)
Директивы модуля imtcp (возможно шифрование и аутентификация
с помощью stunnel, gtls или imgssapi):
- $TCPSeverAddress IP-адрес (по умолчанию прослушиваются все интерфейсы ("*"),
директив может быть несколько, не реализовано)
- $InputTCPServerRun имя-или-номер-порта (514, обязательно после задания адреса,
в будущем директив может быть несколько, а пока либо TLS для всех, либо никому)
- $InputTCPMaxSessions число-одновременных-сессий
- $InputTCPServerStreamDriverMode режим-шифрования
(зависит от драйвера потока ptcp или gtls)
- $InputTCPServerStreamDriverAuthMode режим-аутентификации
(зависит от драйвера потока ptcp или gtls)
- $InputTCPServerStreamDriverPermittedPeer список-допустимых-соседей
(можно использовать шаблоны, можно указывать несколько раз)
Директивы модуля imklog:
- $KLogInternalMsgFacility источник-сообщения (kern; для собственных сообщений - запуск, останов)
- $KLogPermitNonKernelFacility off|on
- $DebugPrintKernelSymbols off|on
- $klogSymbolLookup off|on (в ядре 2.6 преобразование символов производится самим ядром;
аналог "klogd -x")
- $klogUseSyscallInterface off|on (использовать только системные вызовы
и не обращаться к /proc/kmsg для получения исходных сообщений; аналог "klogd -s")
- $klogSymbolsTwice off|on (сообщения аварийного завершения ядра -
Oops! -выдаются дважды: до преобразования адресов в имена - для ksymoops - и после;
аналог "klogd -2")
Директивы модуля immark:
- $MarkMessageInterval секунд (1800; 0 - никогда)
Директивы модуля imuxsock:
- $AddUnixListenSocket имя-дополнительного-сокета
- $InputUnixListenSocketIgnoreMsgTimestamp on|off
(временные отметки, полученные от приложения, игнорируются)
- $InputUnixListenSocketFlowControl off|on
(блокировать сокет при переполнении очереди)
- $InputUnixListenSocketHostName имя-хоста (будет записываться в сообщение)
- $OmitLocalLogging off|on (не читать с системного сокета /dev/log)
- $SystemLogFlowControl off|on
(блокировать системный сокет при переполнении очереди)
- $SystemLogSocketIgnoreMsgTimestamp on|off
(временные отметки, полученные от приложения через системный сокет, игнорируются)
- $SystemLogSocketName имя-системного-сокета
Директивы модуля imfile (каждая строка считается сообщением,
файл может быть динамически дополняться и подменяться (ротация),
можно мониторить до 100 файлов):
- $InputFileName абсолютное-имя-файла
- $InputFileTag метка-процесса (двоеточие необходимо указывать явно)
- $InputFileStateFile имя-файла (в этом файле хранится текущая позиция в обрабатываемом файле,
хранится в рабочем каталоге, необходимо самостоятельно заботится об отсутсвии
многократного использования)
- $InputFileFacility источник-сообщения (local0)
- $InputFileSeverity уровень-серьёзности (botice)
- $InputRunFileMonitor (активизация мониторинга с накопленными параметрами)
- $InputFilePollInterval секунд (10; интервал опроса для всех файлов)
Директивы модуля imrelp
- InputRELPServerRun номер-порта
Директивы модуля ommail (аутентификация SMTP не поддерживается,
вызывается в форме: ":ommail:;имя-шаблона-для-тела-письма", рекомендуется фильтровать
сообщения и использовать $ActionExecOnlyOnceEveryInterval):
- $ActionMailSMTPServer имя-или-адрес (127.0.0.1)
- $ActionMailSMTPPort имя-или-номер (25)
- $ActionMailFrom адрес-отправителя
- $ActionMailTo адрес-получателя (можно использовать несколько раз, сбрасывается?)
- $ActionMailSubject имя-шаблона
- $ActionMailEnableBody on|off
Директивы модуля omsnmp (версии протокола
SNMP - SNMPv1 и SNMPv2c, сообщение заворачивается в OCTED STRING,
вызывается в форме: ":omsnmp:"):
- $actionsnmptransport udp|tcp|udp6|tcp6|icmp|icmp6
- $actionsnmptarget имя-или-адрес-SNMP-сервера
- $actionsnmptargetport имя-или-номер (162)
- $actionsnmpversion индекс-версии (1; 0 - SNMPv1, 1 - SNMPv2c)
- $actionsnmpcommunity имя (public)
- $actionsnmptrapoid идентификатор-OID ("1.3.6.1.4.1.19406.1.2.1", что означает
"ADISCON-MONITORWARE-MIB::syslogtrap"; только для SNMPv2c;
на стороне получателя должны быть установлены
ADISCON-MONITORWARE-MIB)
и ADISCON-MIB
- $actionsnmpsyslogmessageoid идентификатор ("1.3.6.1.4.1.19406.1.1.2.1", что означает
"ADISCON-MONITORWARE-MIB::syslogMsg")
- $actionsnmpenterpriseoid идентификатор ("1.3.6.1.4.1.3.1.1", что означает
"enterprises.cmu.1.1"; только для SNMPv1)
- $actionsnmpspecifictype номер-trap (0; только для SNMPv1)
- $actionsnmptraptype тип-trap (6, что означает SNMP_TRAP_ENTERPRISESPECIFIC; только для SNMPv1)
Директивы модуля ommysql
(при вызове ":ommysql:имя-сервера,имя-БД,имя-пользователя,пароль[;имя-шаблона]"
выполняется SELECT с подставленным значением шаблона):
- $ActionOmmysqlServerPort номер-порта
Директивы модуля omlibdbi
(при вызове ":omlibdbi:[;имя-шаблона]" выполняется SELECT с подставленным значением шаблона):
- $ActionLibdbiDriverDirectory имя-каталога
- $ActionLibdbiDriver mysql|firebird|ingres|msql|Oracle|sqlite|sqlite3|freetds|pgsql
(freetds - для Microsoft SQL и Sybase)
- $ActionLibdbiHost имя-хоста
- $ActionLibdbiUserName имя-пользователя
- $ActionlibdbiPassword пароль
- $ActionlibdbiDBName имя-БД
Директивы модуля omrelp
(при вызове использовать :omrelp:имя-сервера:порт;имя-шаблона)
Каждое правило маршрутизации состоит из селектора и действия,
которые разделяются табуляциями или пробелами.
Каждое сообщение из главной (входной) очереди проверяется селектором каждого правила.
Если подходит, то выполняется указанное в правиле действие.
Для одного сообщения м.б. выполнено произвольное количество действий
(т.е. обработка сообщения не прекращается при первом успехе).
Перед действием отфильтрованные сообщения преобразуются с использованием
шаблона вывода (либо шаблона по умолчанию, указанного в директиве,
либо явно указанного по имени через точку с запятой после описания действия).
Шаблон также может использоваться для генерации самого текста действия
с указанием символа '?' перед именем шаблона.
Шаблон должен быть определён до использования, иначе селектор будет проигнорирован.
Встроенные шаблоны:
- RSYSLOG_TraditionalFileFormat - традиционный формат журнала для записи в файл
- RSYSLOG_FileFormat - традиционный формат журнала,
с добавлением долей секунды и зоны
- RSYSLOG_TraditionalForwardFormat - традиционный формат журнала для передачи на удалённый сервер
- RSYSLOG_ForwardFormat - традиционный формат журнала для передачи
с добавлением долей секунды и зоны
- RSYSLOG_SyslogProtocol23Format - формат, определённый в проекте стандарта IETF
ietf-syslog-protocol-23
Описание шаблона заключается в кавычки.
Обратная косая черта обеспечивает специальное действие следующего символа вида \7 или \n.
Текст описания шаблона выводится в результат как есть, кроме переменных (property replacer),
заключённых в знаки процента. Внутри знаков процента после имени переменной
могут идти начальная и конечная позиция и опции, разделённый двоеточиями.
Имена переменных:
- msg - тело сообщения
- hostname - имя хоста из сообщения
- fromhost - имя хоста, от которого пришло сообщения
- fromhost-ip - адрес хоста, от которого пришло сообщения (127.0.0.1 для местных источников)
- syslogtag - имя и номер процесса (" exim[16895]:"),
который выдал сообщение (извлекается из сообщения)
- programname - имя процесса, который выдал сообщение (извлекается из сообщения)
- pri - источник и приоритет, в виде числа
- pri-text - декодированные источник и уровень (syslog.info)
- syslogfacility - источник в виде числа
- syslogfacility-text - декодированный источник ("local7")
- syslogseverity - уровень в виде числа
- syslogseverity-text - декодированный уровень ("debug")
- timegenerated - время получения сообщения (с высоким разрешением)
- timereported - время, извлечённое из сообщения
- inputname - имя входного модуля (объявлен устаревшим, предлагается использовать name)
- $now, $year, $month, $day - текущая дата в формате YYYY-MM-DD
- $hour, $minute - текущее время
- $myhostname - имя хоста обработки
Простейший шаблон для использования с модулем ommysql
(однако, рекомендуется использовать встроенную схему, совместимую с
phpLogCon, createDB.sql):
"insert into syslog(message) values ('%msg%')"
Использование начальной и конечной позиции позволяет выделять подстроку.
Нумерация символов начинается с 1. Символ "$" означает конец строки.
Если в качестве начальной позиции указать символ "R", то конечная позиция должна содержать
регулярное выражение. В конце регулярного выражения необходимо дописать "--end".
Имеются модификаторы типа регулярного выражения и что делать при отсутствии совпадения,
подробности в документации (property_replacer.html).
Если в качестве начальной позиции указать символ "F", то конечная позиция должна содержать
номер требуемого поля (нумеруются с 1, разделителем по умолчанию является символ табуляции,
можно изменить указав после символа "F" запятую и десятичное значение символя-разделителя.
Тема UNICODE не раскрыта.
Опции позволяют форматировать результат обработки шаблона специальным образом
(можно указать несколько опций, разделяя их запятыми):
- uppercase - преобразование к строчным символам (?!)
- lowercase - преобразование к прописным символам
- drop-last-lf - удалить последний LF
- date-mysql - преобразовть в формат даты MySQL
- date-rfc3164 - преобразовать в формат даты RFC 3164
- date-rfc3339 - преобразовать в формат даты RFC 3339
- date-subseconds - выделить только доли секунды
- escape-cc - заменить управляющие символы строками вида "#009"
- space-cc - заменить управляющие символы пробелами
- drop-cc - удалить управляющие символы
Селектор состоит из двух частей, разделенных точкой:
источник сообщения и уровень серьезности.
Прописные и строчные буквы не различаются.
Можно также использовать числа (см. /usr/include/rsyslog.h).
В качестве источников, можно указывать фuth, authpriv, cron, daemon,
kern, lpr, mail, news, syslog, user, uucp, mark (регулярные временные метки),
security (устаревший синоним для auth) и от local0 до local7.
В качестве уровней серьезности можно
использовать debug, info, notice, warning, warn (синоним для warning),
err, error (синоним для err), crit, alert, emerg, panic (синоним для emerg).
Сообщения с уровнем, равным или выше указанного в селекторе,
и источником, равным указанному в селекторе, считается подходящим.
Звездочка перед точкой соответствует любому источнику, после точки - любому уровню.
Перед уровнем можно поставить знак равенства - селектору будут
соответствовать только сообщения с указанным уровнем (но не с высшим);
восклицательный знак - не будут соответствовать сообщения с
уровнем равным или большим; восклицательный знак и равенство - не будут
соответствовать сообщения с уровнем, равным указанному.
Можно использовать слово none после точки - селектору не будут
соответствовать сообщения никакого уровня для данного источника.
Можно указывать несколько источников в одном селекторе (через запятую).
В этом случае приоритет можно указать только для последнего источника.
В одной строке можно указывать несколько селекторов через ';'.
Семантика не ясна (не описана): если использовать
позитивные селекторы, то выполняется логическое ИЛИ,
если негативные (none и восклицательный знак), то логическое
И.
В качестве действия можно указывать:
- имя обычного файла (полный путь от корня), минус
перед именем отключает синхронизацию записи (ускорение на порядок и более!)
- поименованные каналы - fifo (перед именем ставится
вертикальная черта), сам канал д.б. создан перед
запуском syslogd командой mkfifo
- терминал или консоль (/dev/console)
- @имя-хоста[:порт] (передать сообщений для удаленной журнализации с использовнием UDP)
- @@[(модификаторы)]имя-хоста[:порт]
(передать сообщений для удаленной журнализации
с использовнием TCP; модификаторы:
- zцифра (сжатие, каждое сообщение сжимается отдельно, так что пользы немного)
- o (разделители между сообщениями в соответсвии с draft syslog-transport-tls-06)
- список пользователей (через запятую), на терминалы которых будет послано
сообщение (не e-mail!)
- звездочка для посылки сообщения на все терминалы (wall)
- :имя-модуля-вывода:параметры-модуля[;имя-шаблона] (описание возможностей
конкретных модулей вывода описана выше; для модуля MySQL имеется устаревший формат
('>' в начале строки))
- символ '~' (сообщение будет удалено, т.е. не попадёт на вход следующему селектору)
- $имя-канала (канал должен быть описан предварительно)
- ^имя-программы;имя-шаблона (результат обработки сообщения по шаблону
передаётся в качестве первого параметра; rsyslog дожидается завершения выполнения)
Правила маршрутизации могут быть выделены в блоки,
предварительно отфильтровывающие неподходящие сообщения на основе
имени выдавшей сообщения программы и имени хоста, для этого в качестве селектора указывается
(мутно описано и реализовано, не советую использовать):
- !имя-программы (обрабатываются только сообщения,
имеющие в тексте сообщения указанное имя программы;
как это отличают от "!источник.уровень-серьёзности"?)
- -имя-программы (обрабатываются только те сообщения, которые не имеют
в тексте сообщения указанное имя программы)
- !* (конец блока по имени программы)
- +имя-хоста (обрабатываются только сообщения, полученные с указанного хоста;
а proxy?)
- -имя-хоста (обрабатываются только сообщения, полученные не с указанного хоста;
как отличить от имени программы?)
- +@ (обрабатываются только местные сообщения)
- +* (конец блока по имени хоста)
В качестве селектора можно использовать значения
переменных (property) в следующем формате:
:имя-переменной,[!]{contains|isequal|startswith|regex},"строка"
Прописные и строчные буквы различаются.
Обратная косая черта маскирует последующий символ (в текущей реализации - '"' и '\').
В качестве селектора можно использовать выражения
на бестиповом скриптовом языке RainerScript (Rainer - фамилия разработчика rsyslog)
с использованием логических (not, and, or), арифметических (*, /, %, +, -)
и строковых (contains, contains_i, startswith, startswith_i, &) операций, а также сравнений
(==, !=, <>, <, >, <=, >=) с учётом приоритетов и скобок
в следующем формате:
if выражение then действие
Значения переменных извлекаются использованием символа '$',
за которым указывается имя переменной.
Специальный селектор '&' повторяет действие предыдущего селектора.
Жаль, что авторы не уделили времени проектированию перед началом реализации,
а исходили из списка пожеланий пользователей.
Отличия 5.8.10 от 3.22.1
- директива HUPisRestart (off)
- директивы $PrivDropToGroup, $PrivDropToUser, $PrivDropToGroupID, $PrivDropToUserID
- свойство $InputTCPServerInputName позволяет обрабатывать зависимость от источника
- директива $RepeatedMsgContainsOriginalMsg
- вывод в формате CSV (RFC 4180)
- вывод по шаблону
- модуль вывода omstdout (для тестирования)
- модуль вывода omprog (запуск программы)
- возможность иметь несколько слушателей TCP (на разных портах)
- omfile поддерживает zip
- директивы $OMFileZipLevel, $OMFileIOBufferSize, $OMFileFlushOnTXEnd, $MainMsgQueueSyncQueueFiles, $ActionQueueSyncQueueFiles
- директива $klogConsoleLogLevel
- директива $InputTCPMaxListeners
- директива $InputTCPServerNotifyOnConnectionClose
- модуль ompipe
- директива $OMFileAsyncWriting
- синтаксис ":omusrmsg:"
- синтаксис ":omfile:"
- директива $EscapeControlCharacterTab
- директива $omfileForceChown
- директива $LogRSyslogStatusMessages позволяет подавить стартовые сообщения rsyslog
- директива $InputUnixListenSocketCreatePath
- директива $Sleep - пауза при запуске
- директива $InputFilePersistStateInterval
- модуль ввода imptcp (быстр, но без TLS)
- модуль вывода omuxsock
- директива $LocalHostName
- переработана система очередей (не потерять ни одного подтверждённого сообщения)
- директивы $MainMsgQueueDequeueBatchSize и $ActionQueueDequeueBatchSize
- директива $klogConsoleLogLevel
- модуль вывода omudpspoof позволяет подделывать исходящий адрес
- директива $ActionWriteAllMarkMessages
- директива $AbortOnUncleanConfig
- директива $RulesetParser позволяет привязывать свои разборщики сообщений к наборам правил
- модуль вывода omruleset для использования своих разборщиков, свои очереди для разборщиков
- директива $Escape8BitCharactersOnReceive
- директива $InputTCPServerDisableLFDelimiter
- модули разборщиков pmlastmsg (обработка сообщений о повторе) и pmrfc3164sd (структурированные данные из RFC 5424 в сообщениях формата RFC 3164)
- генераторы строк RSYSLOG_FileFormat, RSYSLOG_TraditionalFileFormat, RSYSLOG_ForwardFormat, RSYSLOG_TraditionalForwardFormat
- модуль ввода impstat генерирует статистику
- поддержка systemd (перехват сокета)
- модуль вывода omhdfs (Hadoop HDFS)
- imuxsock поддерживает до 50 сокетов с индивидуальным ограничением на плотность сообщений;
директивы $InputUnixListenSocketUsePIDFromSystem, $SystemLogUsePIDFromSystem, $SystemLogRateLimitInterval, $SystemLogRateLimitBurst,
$SystemLogRateLimitSeverity, $IMUxSockRateLimitInterval, $IMUxSockRateLimitBurst, $IMUxSockRateLimitSeverity
- многострочные сообщения в imfile
- директивы $IMUDPSchedulingPolicy и $IMUDPSchedulingPriority
- директива $LocalHostName
- директивы $OMMySQLConfigFile и $OMMySQLConfigSection
- модуль разборщика pmsnare
- свойство $BOM
- модуль модификации сообщений mmsnmptrapd
- директивы $IMUXSockLocalIPIF и $klogLocalIPIF позволяют использовать локальный IP интерфейс для imuxsock и imklog
- директивы $MainMsgQueueLightDelayMark и $ActionQueueLightDelayMark
- утилита recover_qi.pl восстановления очереди при отсутствии файла .qi
Отличия 7.4.10 от 5.8.13
- директива $InputFileMaxLinesAtOnce для imfile (пакетный ввод)
- директива $InputTCPFlowControl
- отметка времени для сообщений ядра может браться из сообщения, директивы $klogKeepKernelTimestamp и $klogParseKernelTimestamp
- imuxsock может добавлять "довереннную" информацию от системы
- по умолчанию отключён $IMUXSockRateLimitInterval (было 5)
- модификаторы величин (k, m, g, ...)
- директивы $InputTCPServerSupportOctetCountedFraming для imtcp и imptcp
- подстроки при обработке
- новая система разбора файла конфигурации (версия 6.1.0); область действия: $Begin, $End и $ScriptScoping
- модуль модификации mmnormalize (нормализация, метки)
- директива $InputIMPTcpHelperThreads
- разборщики pmsnare, aix, cisco
- многопоточный imtcp
- новая система конфигурации (версия 6.3.0)
- новая система конфигурации (версия 6.3.3)
- убрана совместимость конфигурации с ksyslogd
- директива $InputRELPServerBindRuleset
- удалены imtemplate и omtemplate
- директива $PStatJSON
- свойства date-unixtimestamp и json и jsonf
- модуль вывода omhiredis
- модуль модификации mmjsonparse
- свойство parsesuccess
- модуль вывода omelasticsearch
- директива $SystemLogParseTrusted
- свойство uuid
- иерархические свойства
- вложенные конструкции rulengine, включая if/then/else (7.1.1)
- операторы set и unset
- конкатенация строк
- копирование поддеревьев JSON
- модуль ввода imkmsg для структурированных сообщений ядра
- параметр permittedPeers для imtcp
- опция VeryReliableZip
- унифицирована конфигурация ограничения потока
- унифицирована обработка сообщений о повторяющихся сообщениях
- модуль записи omjournal
- imuxsock игнорирует сообщения от себя (борьба с циклами с использованием journal)
- подпись журнала
- шифрование журнала
- модуль вывода omrabbitmq
- глобальный параметр ProcessInternalMessages
Отличия 8.24 (RHEL7) от 7.4.10
- параметр ruleset модуля imrelp
- TLS и сжатие для imrelp (compression.dhbits) и omrelp (compression.prioritystring)
- параметр rebindInterval модуля omrelp
- ключ "-S"
- модуль модификации mmfields
- источники (facilities) console, bsd_security, ntp (12)
- сжатие в imptcp
- удалене LF в imfile
- локальные и глобальные переменные (введены в 7.5.3, удалены в 7.5.6)
- rcvbufSize в imudp
- модуль модификации mmpstrucdata (разбор структурированных данных RFC 5424)
- умолчания настроек очередей сдвинуты в сторону больших систем
- maxErrorMessages для omfwd
- dirCreateMode и fileCreateMode для omfile
- модуль модификации mmutf8fix для починки последовательностей UTF-8
- streamdriver.name для imtcp позволяет подменить потоковый драйвер (gtls, ptcp)
- defaultTZ для imtcp и dfltTZ для imudp (?!)
- многопоточность imudp
- модуль mmsequence (используется для балансироваки)
- переписано ядро (8.1.0)
- parser.escapeControlCharactersCStyle
- defaultnetstreamdrivercertfile
- модуль модификации mmexternal для возможности использовать скрипты на python
- разборщик pmciscoios для Cisco IOS
- разрешено использовать "@" в именах переменных
- убраны ключи запуска, для которых есть опции в файле настроек
- удалены модули imttcp, pmrfc3164sd, omoracle
- модуль вывода omkafka (Apache Kafka)
- udp.senddelay для omfwd
- hup.forward для omprog (передача сигнала HUP внешним программам)
- sysSock.useSpecialParser и sysSock.parseHostname для imuxsock (и входные параметры useSpecialParser и parseHostname)
- endmsg.regex для imfile (шаблон конца сообщения для многострочных сообщений)
- detect.yearAfterTimestamp и permit.squareBracesInHostname для pmrfc3164
- провайдер KSI
- модуль pmpanngfw (Palo Alto Networks)
- reopenOnTruncate для imfile
- модуль omampq1 (AMQP 1.0)
- шаблоны в omjournal
- permit.slashesinhostname для pmrfc3164 (?!)
- внутренние сообщение отныне выдаются через механизм syslog ('global(processInternalMessages="on")' в rsyslog.conf
или переменная окружения RSYSLOG_DFLT_LOG_INTERNAL=1)
- модуль omtcl
- параметр queue.samplinginterval
- модуль mmdblookup (maxminddb lookup)
- модуль модификации mmrm1stspace (удалить первый пробел)
- imudp и omfwd можно привязать к устройству: input(type="imudp" port=["10514"] device="eth0" name="udp")
Отличия 8.38 от 8.24 (RHEL7)
- шаблоны в именах каталогов в imfile
- parser.PermitSlashInProgramname
- переделан механизм внутренних сообщений, удалён maxerrormessages, добавлены internalmsg.ratelimit.interval и internalmsg.ratelimit.burst
- в сообщение о превышении лимита сообщений выводится источник
- umask как эквивалент $umask
- imptcp: возможна выдача сообщений при неполных сообщениях и потере соединения
- imtcp и imptcp: параметры maxFrameSize и discardTruncatedMsg
- imfile: параметр fileNotFoundError
- модуль lmsig_ksi_ls12 вместо lmsig_ksi
- omfwd: параметр tcp_frameDelimiter
- imfile: обрезание или разбиение слишком длинных сообщений
- imptcp: параметр flowControl
- imrelp: параметр maxDataSize
- imjournal: usepid вместо usepidfromsystem
- imptcp: параметр multiline (эвристика в обработке многострочных сообщений)
- модуль pmnormalize
- сообщения о создании и уничтожении потоков в syslog.informational
- omfwd и omudp: udp.sendbuf
- global(variables.casesensitve="on"), по умолчанию off
- global(errorMessagesToStderr.maxNumber)
- переход на системный systemd при сборке
- ключ -iNONE позволяет не создавать файл с PID
- pmrfc3164: поддержка сообщений без заголовков
- action.errorfile
- imfile: sortFiles
- mmpstrucdata: sd_name.lowercase
- omfile: dynafile.donotsuspend
- include() вместо $IncludeConfig
- config.enabled
- конструкции вида `echo $VARNAME`
- shutdown.enable.ctlc
- установка TZ при его отсутствии
- модуль mmkubernetes
- переписан imfile
- модуль omfile-hardening
- imptcp: настройка backlog
- модуль fmhash (функции хеширования)
- imklog: задание ограничений на поток
- imudp: внутримодульные ограничения на поток заменены на общие для rsyslog
- imrelp: oversizeMode={abort|truncate|accept}
- централизованная обработка "слишком больших" сообщений (oversizemsg.errorfile, oversizemsg.report, oversizemsg.input.mode)
- imptcp: framing.delimiter.regex
- inputs.timeout.shutdown
- imtcp/imudp: preservecase
Отличия 8.1901.0 от 8.38
- изменилась нумерация версий - 8.yymm.0
- накапливать сообщения перед выдачей из очереди: queue.mindequeuebatchsize и queue.mindequeuebatchsize.timeout
- queue.timeoutshutdown по умолчанию теперь 10ms
- модуль вывода omclickhouse
- выдача статистики для модуля omkafka (statsFile)
- StreamDriver.PermitExpiredCerts={on|off|warn} для TLS
- параметр action.resumeIntervalMax задаёт максимальное значение интервала повторения
- глобальный параметр reportChildProcessExits={errors|all|none} и глобальная функция glblReportChildProcessExit
- удалены модули imzmq3/omzmq3
Отличия 8.2102.0 (RHEL8) от 8.1901.0
- модуль ввода improg
- модуль ввода imtuxedoulog для обработки файлов Tuxedo ULOG
- переписан omhttp с множеством расширений
- модуль разбора pmdb2diag для DB2
- динамические шаблоны dynaKey для модуля omkafka
- $wday - день недели
- глобальный параметр dnscache.default.ttl
- параметр rebindinterval и skipverifyhost для omelasticsearch
- параметры модуля mmkubernetes: cacheexpireinterval, cacheentryttl
- счётчики статистики для mmkubernetes
- модуль ввода imdocker
- модуль обработки mmtaghostname - добавляет hostname там где его нет
- модуль ввода imbatchreport (весь файл как одна запись)
- возможность приостанавливать передачу по содержимому ("SUSPEND") указанного файла
- опции шаблонов datatype и onEmpty (для JSON)
- глобальные параметры: default.ruleset.queue.timeoutshutdown, default.ruleset.queue.timeoutactioncompletion,
default.ruleset.queue.timeoutenqueue, default.ruleset.queue.timeoutworkerthreadshutdown
- ключ "-o cmdline" разворачивает include из файла настройки в единый файл
- глобальный параметр internalmsg.severity фильтрации неинтересных внутренних сообщений
- модуль обработки mmdarwin (Apple?)
- заработал параметр listenPortFileName модуля imtcp
- параметр queue.takeFlowCtlFromMsg
- параметр flowcontrol модуля imrelp
- модуль imjournal учитывает значение MaxMessageSize
- streamdriver.TlsVerifyDepth
- параметр tls.tlscfgcmd для модулей omrelp и imrelp
- параметр snmpv1dynsource модуля omsnmp
- параметр escapeLF.replacement модуля imfile
- параметры MaxBytesPerMinute и MaxLinesPerMinute модуля imfile
- глобальный параметр security.abortOnIDResolutionFail (on по умолчанию)
- модуль ввода impcap
- параметр tryResumeReopen модуля ompipe
- параметр количества сессий модуля imptcp
- модуль ввода imhttp
- переписан модуль immark
- $now-unixtimestamp
- параметры ratelimit.interval и ratelimit.burst для модуля omfwd
- параметр ConErrSkip модуля omfwd
Отличия 8.2310.0 (RHEL9) от 8.2102.0 (RHEL8)
- модуль ввода imhiredis
- модуль преобразования fmunflatten (JSON)
- глобальный параметр parser.supportCompressionExtension
- параметры драйвера потока в модуле imtcp (могут отличаться в экземплярах)
- параллельный ввод в модуле imtcp
- параметр ignoreolderthanoption модуля imfile
- для модуля imudp теперь указывается тип сокета (IPv4)
- imtcp позволяет указывать различные файлы сертификатов
- предопределённый шаблон RSYSLOG_SyslogRFC5424Format (улучшенный RSYSLOG_SyslogProtocol23Format), SyslogRFC5424explained?
- шаблон FullJSONFmt
- номер недели в году по стандартам ISO
- zstd для omfile
- глобальный параметр abortOnFailedQueueStartup (off по умолчанию)
- опция notifyonconnectionopen модуля imtcp
- параметр NetstreamDriverCAExtraFiles для TLS
- imjournal откатывается к разбору поля _COMM, если в сообщении отсутствует SYSLOG_IDENTIFIER
- возможность указать позицию в шаблоне с конца (отрицательное число)
- параметры rotation.sizeLimit и rotation.sizeLimitCommand модуля omfile
- параметр FileCreateMode модуля imjournal (файл состояния)
- глобальный параметр libcapng.default (on по умолчанию) и libcapng.enable (on по умолчанию)
- модуль вывода omazureeventhubs (Qpid Proton C API - AMQP)
- решена проблема с запуском под systemd v240 (2^30 fd)
Отличия от 8.2410 от 8.2310.0 (RHEL9)
- балансировка нагрузки omfwd
- ossl
- модули imdtls и omdtls (DTLS по UDP)
- параметр defaulttag модуля imjournal
- параметры readMode={full-boot|full-always|new-only} и expectedBootCompleteSeconds модуля imkmsg
- параметр parseKernelTimestamp={startup|on|off} модуля imkmsg
- imjournal может теперь обрабатывать несколько вводов
- omusrmsg использует logind вместо utmp
|
Bog BOS: rsyslog - сервер syslog
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru