Последнее изменение файла: 2018.09.27
Скопировано с www.bog.pp.ru: 2023.02.06
Bog BOS: rsyslog - сервер syslog
rsyslog - сервер протокола syslog, обеспечивающий передачу и хранение сообщений.
Один из претендентов на замену "стандартного" сервера sysklogd в Linux (может быть полностью с ним совместим),
ответвился в 2004 году.
Позволяет принимать сообщения из множества типов источников, обрабатывать их и пересылать и/или записывать множеством способов
благодаря модульной структуре.
Среди возможностей:
поддержка RFC 5424 с транспортом по UDP (RFC 5426?) и TCP (RFC 6587?) и TLS (RFC 5425?)
получение сообщений по RFC 3195 (авторы сами не уверены)
возможность использовать TCP для передачи сообщений
возможность сжатия сообщений при передаче
возможность шифрования и цифровой подписи при передаче сообщений (пакет rsyslog-gnutls)
возможность шифрования журналов (пакет rsyslog-crypto)
аутентификация и авторизация с использованием Kerberos (пакет rsyslog-gssapi)
возможность обеспечения резервного сервера
возможность хранения журналов в БД (MySQL - пакет rsyslog-mysql,
Postgres - пакет rsyslog-pgsql, прочие СУБД - пакет rsyslog-libdbi)
возможность использовать RELP (надёжный протокол передачи, TCP не гарантирует доставки,
т.к. неизвестно какие сообщения - до 1000 - потерялись при разрыве соединения)
для передачи и приёма сообщений (пакет rsyslog-relp)
буферизация сообщений перед записью
фильтрация и обработка сообщений, включая регулярные выражения и генерацию имён файлов
возможность посылки e-mail (3.17) и запуска скриптов по фильтру и посылки SNMP trap (пакет rsyslog-snmp)
многозадачность и многопоточность
управление нагрузкой и приоритетами
отметки времени по ISO 8601 и RFC 3339
Продвигается фирмой Red Hat, в частности, в 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) ставится по умолчанию.
Имеется платная поддержка (Adiscon). Лицензия - GPLv3 (Apache license 2.0?).
Работает под Linux (Red Hat, Debian, Ubuntu, OpenSUSE, Gentoo), FreeBSD, Solaris, AIX.
Различные версии rsyslog (2, 3, 5, 7 и 8) имеют различный формат конфигурационного файла и архитектуру.
Несмотря на попытки обеспечить совместимость безопаснее рассматривать их как различные программы.
Сообщения поступают в rsyslog с помощью модулей ввода, поступивщее сообщение (объект "input()") передаётся
к набору правил (ruleset, имеется набор по умолчанию RSYSLOG_DefaultRuleset), подходящие правила вызывают действия над сообщением.
К набору правил привязывается модуль разбора, который переводит поступившее сообщение во внутренний формат.
Каждое правило состоит из фильтра и списка действий (объект 'action(type="тип")'), проверяются по очереди пока не достигнет конца списка
или не выполнится действие discard (команда "stop" или "~").
В дополнение к традиционным для sysklogd фильтрам имеются управляющие структуры RainerScript (if, foreach, call, continue).
При обработке можно использовать внутренние переменные (Property) и операции над ними (set, unset, reset).
Описания шаблонов (определяются статически при инициализации) позволяют задать для действия выходной формат сообщения
или имя файла в дополнение к встроенным шаблонам.
При обработке сообщений используются очереди, сообщения от модулей ввода обрабатываются препроцессором (?) и попадают в главную очередь (main queue, MainMsg),
сообщения из главной очереди разбираются, фильтруются и попадают в очереди действий, обработчик действия (action) получает
очередное сообщение из очереди (точнее менеджер очереди вызывает обработчик) и обрабатывает его спомощью модуля вывода.
Режимы обслуживания (QueueType) очереди: прямой (Direct, без буферизации, по умолчанию для очереди действия),
очередь на диске (Disk, буферизация на диске, кусками по 10MB), очередь в памяти (LinkedList и FixedArray (10000 элементов по умолчанию для главной очереди)),
очередь в памяти с опорой на файловую систему (disk-assisted memory mode, очередь в памяти и задать файл для хранения).
Программа имеет модульную структуру (загрузка модулей производится из каталога /usr/lib64/rsyslog/ директивой "$ModLoad имя-модуля"):
модули ввода - /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) через сокет
модули дополнительных возможностей (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/om*
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
модули разбора
pmaixforwardedfrom
pmcisconames
pmlastmsg
pmrfc3164sd
pmsnare
модули модификации (работают как модули разбора или вывода) - /usr/lib64/rsyslog/mm*
mmanon
mmaudit - формат Linux audit (пакет rsyslog-mmaudit)
Файл настройки (обычно /etc/rsyslog.conf и файлы каталога /etc/rsyslog.d) может содержать конструкции
в стиле basic (sysklogd, но не совсем), в старом стиле rsyslog версий 2, 3 и 5 (legacy, obsolete legacy, директивы начинаются с "$")
и в новом стиле версий 6, 7 и 8 (advanced, RainerScript).
Некоторые модули не адаптированы к новому (advanced) стилю, некоторые возможности нельзя описать старым стилем (basic).
В старом стиле директивы обрабатывались построчно, в новом стиле весь файл - это поток сознания.
Файл настройки в стиле basic представляет собой набор правил маршрутизации сообщений.
Комментарии начинаются с символа '#'.
Обратная косая черта в конце строки означает продолжение правила на следующей строке.
Каждое правило состоит из селектора и действия, которые разделяются табуляциями или пробелами.
Получив сообщение rsyslog для каждого правила проверяет не подходит ли
сообщение под шаблон, определяемый селектором. Если подходит, то
выполняется указанное в правиле действие.
Для одного сообщения м.б. выполнено произвольное количество действий
(т.е. обработка сообщения не прекращается при первом успехе).
Селектор состоит из двух частей, разделенных точкой:
источник сообщения и уровень серьезности.
Прописные и строчные буквы не различаются.
Можно также использовать числа (см. /usr/include/syslog.h).
Кроме определенных в syslog(3) источников, можно указывать mark (регулярные временные метки),
security (устаревший синоним для auth).
Кроме определенных в syslog.h уровней серьезности можно
использовать warn (синоним для warning), error
(синоним для err), panic (синоним для emerg).
Сообщения с уровнем, равным или выше указанного в селекторе,
и источником, равным указанному в селекторе, считается подходящим.
Звездочка перед точкой соответствует любому источнику, после точки - любому уровню.
Слово none после точки - никакому уровню для данного источника.
Можно указывать несколько источников в одном селекторе через запятую.
В этом случае приоритет можно указывать только для последнего источника.
В одной строке можно указывать несколько селекторов через ';', проверяются слева направо, последующий может отменить действие предыдущих
(если использовать позитивные селекторы, то выполняется логическое ИЛИ,
если негативные (none и восклицательный знак), то логическое И).
Перед уровнем можно поставить знак равенства - селектору будут
соответствовать только сообщения с указанным уровнем (но не с высшим);
восклицательный знак - не будут соответствовать сообщения с
уровнем равным или большим; восклицательный знак и равенство - не будут
соответствовать сообщения с уровнем, равным указанному.
В качестве действия можно указывать:
имя обычного файла (полный путь от корня), минус
перед именем отключает синхронизацию записи (ускорение на порядок и более!);
относительные (относительно чего?) имена начинаются с "./";
динамические имена файлов задаются в виде "?шаблон-имени;шаблон-форматирования" (шаблоны д.б. определены ранее)
поименованные каналы - fifo (перед именем ставится
вертикальная черта), сам канал д.б. создан перед
запуском syslogd командой mkfifo
терминал или консоль (/dev/console)
@имя-хоста[:номер-порта] (передать сообщение для удаленной журнализации по UDP)
@@имя-хоста[:номер-порта] (передать сообщение для удаленной журнализации по TCP по протоколу syslog-ng (?);
после символов "@@" могут быть опции в скобках:
zуровень-сжатия (каждое сообщение отдельно? а какой стандарт?)
o
список пользователей (через запятую), на терминалы которых будет послано сообщение (или ":omusrmsg:имя-пользователя"?)
звездочка для посылки сообщения на все терминалы (wall) (или ":omusrmsg:*"?)
:имя-модуля-вывода:параметры;шаблон
>параметры # запись в БД MySQL
stop # обработка сообщения прекращается, дальнейшие фильтры не рассматриваются
~ # обработка сообщения прекращается, дальнейшие фильтры не рассматриваются
$имя-канала # канал вывода д.б. описан ранее
^имя-программы;имя-шаблона # аналогично ":omprog:параметры;имя-шаблона, сгенерированное по шаблону сообщение передаётся как параметр командной строки
В стиле advanced комментарии начинаются с символа '#' до конца строки или начинаются с "/*" и заканчиваются "*/".
Файл представляет собой набор общих директив (глобальные параметры, загрузка модулей - 'module(load="имя-модуля")'),
описаний шаблонов (формат сообщений, имена файлов - 'template(name="имя" type="тип" опция="значение") {...}"),
описаний наборов правил ("ruleset(...)") маршрутизации сообщений (фильтр, действие),
описаний вводов (input()), связывающих модули ввода с набором правил.
Конфигурационные объекты (в 8.33 каждому конфигурационному объекту добавлен параметр config.enabled, позволяющий его выключить и включить - on)
include(file="выражение-шаблон-имён-файлов" mode="abort-if-missing|required|optional") или include(text="выражение") # в версии 8.33 вместо $IncludeConfig
timezone(id="MSK" offset="+03:00") # определяет соответствие между именем часового пояса и смещением
main_queue(queue.type="тип" ...) # задание параметров главной очереди
template(name="имя" type="тип" ...) # описание шаблона форматирования
module(load="имя-модуля") # загрузка модулей
parser(type="тип-модуля" name="определяемое-имя" параметр="значение" ...) # описание разборщика, используются модули разбора
ruleset(name="имя" parser=["первый","второй"] queue.type="тип" ...) { ... } # описывается набор правил обработки сообщени, фильтры и действия
input(... ruleset="имя" ...) # описание источника сообщений, используются модули ввода, привязывается к набору правил
action(queue.type="тип" ...) # описание вывода сообщений, используются модули вывода
Фильтр сообщений для правил маршрутизации можно задать следующими способами:
селектор источника и серьёзности как и ранее
фильтр на основе значения переменной: ':имя, [!]операция-сравнения, "значение"',
где операция сравнения - contains, isequal, startswith, regex, ereregex
выражения с использованием переменных ($имя): "if выражение then действие", где в качестве выражения можно использовать выражения языка RainerScript
блоки в стиле BSD (!программа, +хост) отменены в версии 7
Типы шаблонов
list - список констант ('constant(value="текст" параметр="значение" ...)')
и значений переменных ('property(name="имя" параметр="значение" ...)')
subtree - поддерево CEE, параметр subtree указывает часть поддерева ("$!" - целиком)
string - параметр string задаёт шаблон из констант и переменных ('%имя:начало:конец:преобразователь%')
plugin - параметр plugin задаёт имя предварительно загруженного модуля
Опции шаблонов позволяют стандартные адаптирующие преобразования для результатирующей строки: option.sql, option.stdsql,
option.json, option.jsonf, option.casesensitive.
Стандартные шаблоны: RSYSLOG_TraditionalFileFormat (грубое время без часового пояса),
RSYSLOG_FileFormat (точное время с часовым поясом), RSYSLOG_TraditionalForwardFormat, RSYSLOG_SysklogdFileFormat, RSYSLOG_ForwardFormat,
RSYSLOG_SyslogProtocol23Format (почти RFC 5424), RSYSLOG_DebugFormat.
Переменные используются в шаблонах и условных командах. Делаются (терминология RFC 3164, кроме последних) из сообщений:
msg, rawmsg, rawmsg-after-pri, hostname или source, fromhost (используется DNS), fromhost-ip, syslogtag, programname, pri, pri-text,
syslogfacility, syslogfacility-text, syslogseverity, syslogseverity-text, timegenerated (точное время прибытия),
timestamp или timereported (из сообщения), protocol-version, structured-data, app-name, procid, msgid,
inputname (имя модуля ввода, не всегда правильное, для внутренних сообщений rsyslog - "rsyslogd"), jsonmesg.
Имеются также системные переменные ($bom, $myhostname, $now, $year, $month, $day, $hour, $minute, $now-utc и пр.).
Значения переменных используются с помощью конструкции Property Replacer: '%имя:начало:конец:преобразователь%'.
Нумерация символов с 1, номер последнего символа обозначается как '$'.
Можно вырезать из переменной по шаблону регулярного выражения, если в поле 'начало' поместить букву 'R',
а в поле 'конец' - регулярное выражение, сразу за которым - строку '-end'.
За буквой 'R' можно указать параметры регулярного выражения через запятую:
тип выражения - BRE (базовое) или ERE (расширенное)
номер подвыражения (от 1 до 9), которое надо выдать в качестве результата; 0 - всё выражение
что делать при отсутствии сопоставления - DFLN (строка "**NO MATCH**"), BLANK (пустая строка), ZERO ("0"), FIELD (выдать всё поле)
номер сопоставления, если нужно не первое встретившееся сопоставление; от 0 до 9; нумерация с 0
Также можно поделить переменную на поля, если в поле 'начало' поместить букву 'F,десятичный-код-символа-разделителя',
а в поле 'конец' - номер поля (нумерация с 1). Символ '+' после кода позволяет рассматривать несколько подряд идущих разделителей как 1.
Преобразователи (можно указать несколько через запятую):
uppercase, lowercase, fixed-width (дополнение пробелами), json, jsonf:имя-поля, csv (RFC 4180),
drop-last-lf, date-utc, date-mysql, date-rfc3164, date-rfc3164-buggyday, date-rfc3339 ("1996-12-19T16:39:57-08:00"), date-unixtimestamp, date-year, date-month,
date-day, date-hour, date-minute, date-second, date-second, date-tzoffshour, date-tzoffsmin, date-tzoffsdirection, date-ordinal (номер дня в году),
date-week, date-wday, date-wdayname, escape-cc (заменить управляющие символы ASCII на "#десятичный-код"), space-cc (на пробел),
drop-cc, compressspace (последовательность пробелов на пробел), sp-if-no-1st-sp (хак в борьбе с реализацией RFC 3164), secpath-drop (удалить все '/'),
secpath-replace (заменить все '/' на '_').
RainerScript - безтиповый язык, преобразования типов проводятся автоматически.
Значение переменной (Property) используется в виде '$имя'.
Локальные (относительно сообщения) переменные представляют собой элемент или структуру (дерево), корень которого обозначается как '$.имя'
('$.' - список имён и значений всех переменных),
их можно изменять командами set, unset и reset: 'set $.имя = выражение;'.
Выражения используют операторы в порядке убывания приоритета: выражение в скобках, not, унарный -, *, /, %, +, _, & (конкатенация),
==, !=, <> <, >, <=, >=, contains, contains_i (не чувствительно к регистру), startswith, startswith_i, and, or.
Встроенные функции (дополнительные функции могут быть загружены в модуле, имя которого начинается с fm, например, fmhash в версии 8.37?):
ipv42num(строка) # IPv4 адрес из строки в целое)
num2ipv4(число) # из целого в строку в виде IPv4 адреса)
ltrim(строка) # удалить передние пробелы)
rtrim(строка) #удалить задние пробелы)
cnum(2+3) # преобразовать выражение в число)
cstr(5*4) # преобразовать выражение в строку)
dyn_inc() # увеличение счётчика статистики impstats)
exec_template(имя-шаблона) #выполнить преобразователь, заданный строкой в шаблоне)
lookup("имя-таблицы",индекс) # таблицу необходимо определить директивой 'lookup_table(name="имя-таблицы" file="имя-файла")'
parse_json(строка,контейнер-для-результата)
parse_time(строка) # преобразование из RFC 3164 или RFC 3339 в UNIX-время
previous_action_suspended()
prifilt(селектор) # селектор источника и серьёзности как и ранее, только константы
random(max)
re_extract(выражение,расширенное-выражение,номер-сопоставления,номер-подвыражения,"не нашёл") # нумерация с 0
re_match(выражение,расширенное-выражение) # вернуть 1, если совпадение найдено
replace(строка,что-искать,на-что-заменять) # заменяются все вхождения
script_error() # возвращает 0, если предыдущая функция была успешна
strlen(строка)
substring(строка,от-символа,длина) # нумерация с 1
tolower()
wrap(строка,символ-обрамления)
Управляющие структуры RainerScript включают
if (выражение) then { ... }
if (выражение) then { ... } else { ... }
foreach ($переменная in $массив) do { ... }
foreach ($переменная in $объект) do { ... } # ключ и значение доступны по $переменная!key и $переменная!value
call имя-набора-правил # позволяет вызвать набор правил из набора правил, если вызываемый набор имеет очередь, то вызов асинхронный и stop не срабатывает;
заменяет модуль omruleset)
call_indirect выражение; # имя набора правил вычисляется
continue # пустая операция
Типы параметров:
целое - знаки пунктуации ("." и "," игнорируются)
размер - целое с модификаторами (k - двоичные (1024), K - десятичные (1000))
строка
слово - без пробелов
символ - без кавычек
булевое - on(1), off(0)
Глобальные параметры (ранее устанавливались как "$имя значение"):
$IncludeConfig шаблон # в 8.33 директива include(), могут быть вложенными
$ResetConfigVariables
$DefaultRuleset RSYSLOG_DefaultRuleset # привязывает набор правил для вводов, у которых набор правил не привязан явно;
по умолчанию, правило по умолчанию собирается из не входящих ни в один набор правил действий
workDirectory # место хранения вспомогательных файлов
processInternalMessages="off" # обрабатывать созданные нами сообщения или просто сбрасывать в сокет, где journald подхватит и передаст нам;
нужен для вспомогательного сервера syslog на том же хосте
stdlog.channelspec # куда сбрасывать созданные нами сообщения при отключённой обработке
action.reportSuspension="on"
action.reportSuspensionContinuation="off"
dropMsgsWithMaliciousDNSPtrRecords ?
localHostname # переопределить hostname
preserveFQDN="off" # не отрезать имя домена, совпадающее с текущим
shutdown.enable.ctlc="off" # останавливать по нажатию ^C
debug.unloadModules="on" # off запрещает выгрузить модуль
debug.files # в версии 8.29
debug.whitelist="on" # в версии 8.29
$DebugPrintModuleList on
$DebugPrintTemplateList on
Параметры очереди (используются при описании acion() и главной очереди, а также ruleset()
queue.type # Direct (по умолчанию), FixedArray (по умолчанию для главной), LinkedList, Disk
queue.spoolDirectory # должна существовать, если не задать, то используется рабочий каталог ($WorkDirectory)
queue.filename ($...QueueFilename) # имя файла для очереди дипа Disk и disk-assistent
queue.size # максимальное количество сообщений (не байт!); по умолчанию - 50000 для главной и 1000 для очереди действия, может быть...
queue.dequeuebatchsize # 128 (32 для главной); обрабатывать пачками
queue.maxdiskspace # в байтах
queue.highwatermark # 90%; при достижении размера очереди начать буферизацию на диск
queue.lowwatermark # 70%
queue.fulldelaymark # 97%; пытаться заблокировать приём новых сообщений
queue.lightdelaymark # 70%
queue.discardmark # 80%, 98% для главной
queue.discardseverity # 8 (т.е. никогда), 4 для главной
queue.checkpointinterval # сколько сообщений разрешается терять при хранении очереди на диске
queue.syncqueuefiles # off
queue.samplinginterval # 0
queue.workerthreads # 1 (2 для главной)
queue.timeoutshutdown # 0 (бесконечность), в мс; сколько ждать при выключении сервера
queue.timeoutactioncompletion # 1000, в мс, 0 - немедленно
queue.timeoutenqueue # 2000, в мс, 0 - немедленно; сколько ждать при попытке запихнуть сообщение в переполненную очередь, потом выкинуть
queue.timeoutworkerthreadshutdown # 60000, в мс
queue.workerthreadminimummessages # 2, когда запускать следующего обработчика
queue.maxfilesize # 1M
queue.saveonshutdown # off, сохранять всё необработанное при выключении
queue.dequeueslowdown # 0 (без задержек), паузы в мкс между сообщениями
Действия реализуются с помощью модулей вывода (om*), описываются директивами action, параметрами которой
являются описание очереди (queue.*), специфические параметры модуля и следующие параметры:
name # имя для статистики
type # имя модуля
action.writeAllMarkMessages="on" # писать каждые 20 минут или только при отсутствии сообщений
action.execOnlyEveryNthTime # децимация сообщений
action.execOnlyEveryNthTimeout="0" # счётчик децимации обнуляется через указанное количество секунд
action.errorfile # имя файла для ошибок, в версии 8.32
action.execOnlyOnceEveryInterval # секунд, полезно для email
action.execOnlyWhenPreviousIsSuspended="off" # позволяет обеспечить резервный канал
action.repeatedmsgcontainsoriginalmsg
action.resumeRetryCount="0"
action.resumeInterval # секунд
action.reportSuspension # по умолчанию берётся из глобального параметра
action.reportSuspensionContinuation # по умолчанию берётся из глобального параметра
action.copyMsg="off"
Модуль вывода omfile обрабатывает разобранные сообщения и записывает их в файл.
Модуль ведёт счётчики статистики кеширования динамических файлов (отдельно для каждого шаблона и действия):
request (всего запросов), level0 (запросов для текущего файла), missed (файл не найден в кеше),
evicted (файл пришлось выбросить из кеша - повод для увеличения), maxused (использовано элементов кеша - повод для уменьшения кеша),
closetimeouts (файлов было закрыто по неиспользованию).
Параметры загрузки модуля omfile ('module(load="builtin:omfile" ...)'; параметры в старом стиле не действуют):
Template=RSYSLOG_FileFormat # ранее был $ActionFileDefaultTemplate
DirCreateMode=0700 # ранее был $DirCreateMode
FileCreateMode=0644 # в реальности - 0600; ранее был $FileCreateMode
fileOwner # ранее был $FileOwner
fileOwnerNum
fileGroup # ранее был $FileGroup
fileGroupNum
dirOwner # ранее был $DirOwner
dirOwnerNum
dirGroup # ранее был $DirGroup
dirGroupNum
dynafile.donotsuspend="on"
Входные параметры модуля omfile:
File="имя-файла" # при необходимости файл создаётся, имеющийся файл дополняется
dynaFile="имя-шаблона-имён-файлов" # при необходимости файл создаётся, имеющийся файл дополняется, поддерживается кеш открытых файлов
dynaFileCacheSize="10" # отдельный кеш на каждое действие; ранее был $DynaFileCacheSize
closeTimeout=минут # автоматически закрывать неиспользуемый файл; по умолчанию 0 для обычных файлов и 10 для динамических имён
Template=RSYSLOG_FileFormat # шаблон вывода, ранее был $ActionFileDefaultTemplate
zipLevel="0" # уровень сжатия для gzip; 0 - без gzip; ранее был $OMFileZipLevel
veryRobustZip="off" # записывать дополнительные заголовки для обеспечения читаемости файла после сбоев; значительно увеличивает размер
asyncWriting="off" # ранее был $OMFileASyncWriting; отдельный поток для асинхронной записи
flushInterval="1" # ранее был $OMFileFlushInterval; интервал (в секундах) записи буферизованных сообщений при использовании асинхронного потока
flushOnTXEnd="on" # ранее был $OMFileFlushOnTXEnd; запись после каждого сообщения (транзакции)
ioBufferSize="4K" # ранее был $OMFileIOBufferSize
createDirs="on" # ранее был $CreateDirs
dirOwner # ранее был $DirOwner
dirOwnerNum # ранее был $DirOwnerNum
dirGroup # ранее был $DirGroup
dirGroupNum # ранее был $DirGroupNum
fileOwner # ранее был $FileOwner
fileOwnerNum # ранее был $FileOwnerNum
fileGroup # ранее был $FileGroup
fileGroupNum # ранее был $FileGroupNum
DirCreateMode=параметр-модуля # ранее был $DirCreateMode
FileCreateMode=параметр-модуля # в реальности - 0600; ранее был $FileCreateMode
failOnChOwnFailure="on" # ранее был $FailOnCHOwnFailure, off - игнорировать ошибку
sync="off" # ранее был $ActionFileEnableSync; после обработки каждого пакета сообщений делать sync
sig.Provider # модуль цифровой подписи; реализован только 1 - ksi_ls12
cry.Provider # модуль шифрования; реализован только 1 - gcry; информация о шифровании записывается в файл с суффиксом ".encinfo"
cry.algo="AES128"
cry.mode="CBC"
cry.key ключ # не рекомендуется
cry.keyfile имя-файла-с-ключом # рекомендуется использовать утилиту rscrytool
cry.keyprogram путь # программа должны выдать ключ и метаинформацию на stdout
Модуль вывода omfwd обрабатывает разобранные сообщения и пересылает их по UDP или TCP.
Модуль встроенный. Входные параметры модуля omfwd:
Template=RSYSLOG_TraditionalForwardFormat # ранее был $ActionForwardDefaultTemplateName
Target=имя-или-IP-адрес
Port="514"
Protocol="udp" # udp или tcp (простой или TLS в зависимости от настроек StreamDriver)
StreamDriver="none" # ранее был $ActionSendStreamDriver; выбрать сетевой потоковый драйвер
none - режим 0 (без шифрования), аутентификация: anon
IpFreeBind="2" # 0 - не разрешать привязывать к чужому адресу, 1 - разрешать, 2 - разрешать и выдавать предупреждение; для UDP, в версии 8.35
Device # привязывать сокет к устройству (например, eth0)
TCP_Framing="traditional" # traditional - LF, octet-counted
TCP_FrameDelimiter="10" # код символа 10 - LF
ZipLevel="0" # уровень сжатия gzip; 0 - без сжатия
compression.Mode="none" # none - без сжатия, single - каждое сообщение сжимается отдельно, stream:always - сжимается весь поток (большие задержки);
стандарт отсутствует (принимает только imptcp)
compression.stream.flushOnTXEnd="on" # сбрасывать буфер при обработке каждого пакета сообщений
RebindInterval="0" # ранее были $ActionSendTCPRebindInterval и $ActionSendUDPRebindInterval; новое соединение через указанный интервал (в сообщениях)
KeepAlive="off"
KeepAlive.Probes="0" # 0 - системные умолчания
KeepAlive.Interval="0" # 0 - системные умолчания
KeepAlive.Time="0" # 0 - системные умолчания
ResendLastMSGOnReconnect="off" # ранее был $ActionSendResendLastMsgOnReconnect; м.б. потеряны несколько сообщений, а посылается только последнее
udp.SendToAll="off" # посылать UDP пакеты по всем известным маршрутам, авось кто-нибудь долетит
udp.SendDelay="0" # задержка в микросекундах после каждого сообщения
gnutlsPriorityString
Модуль вывода omjournal обрабатывает разобранные сообщения и пересылает их в systemd-journal.
Входные параметры модуля omjournal:
Template=имя-шаблона-форматирования-сообщения # по умолчанию %msg% используется как поле MESSAGE для journal,
также используется этикетка (EVENT_TYPE?) и приоритет
Модуль вывода ommail обрабатывает разобранные сообщения и пересылает их по email
(прямая посылка по SMTP без аутентификации и прочего, так что рекомендуется организовать очередь).
Входные параметры модуля ommail:
Server="127.0.0.1" # имя или IP адрес SMTP сервера; ранее был $ActionMailSMTPServer
Port="25" # ранее был $ActionMailSMTPPort
MailFrom # ранее был $ActionMailFrom
MailTo # ранее был $ActionMailTo; 1 адрес или массив (в квадратных скобках строки через запятую)
Subject.Template # ранее был $ActionMailSubject
Subject.Text # строка текста
Body.Enable="on" # ранее был $ActionMailEnableBody
Template="RSYSLOG_FileFormat" # шаблон для тела письма
Модуль вывода ompipe обрабатывает разобранные сообщения и пересылает их в поименованный канал (pipe, fifo):
Модуль встроенный. Входные параметры модуля ompipe:
Template # шаблон для вывода сообщения
Pipe # имя-fifo (mkfifo надо сделать отдельно)
Модуль вывода omudpspoof обрабатывает разобранные сообщения и пересылает их по UDP с подделанным исходящим адресом.
Входные параметры модуля omudpspoof:
Template="RSYSLOG_TraditionalForwardFormat" # ранее был $ActionOMUDPSpoofDefaultTemplate
Target=имя-или-IP-адрес # ранее был $ActionOMUDPSpoofTargetHost
Port="514" # ранее был $ActionOMUDPSpoofTargetPort
SourceTemplate="RSYSLOG_omudpspoofDfltSourceTpl" # шаблон исходящего IP адреса; ранее был $ActionOMOMUDPSpoofSourceNameTemplate;
стандартный шаблон - "%fromhost-ip%"
SourcePort.start="32000" # ранее был $ActionOMUDPSpoofSourcePortStart
SourcePort.End="42000" # ранее был $ActionOMUDPSpoofSourcePortEnd
MTU="1500"
Модуль вывода omprog обрабатывает разобранные сообщения и подаёт их на вход stdin указанной программе.
При завершении программы она перезапускается. При завершении rsyslogd на вход программы подаётся конец файла.
Входные параметры модуля omprog:
Template="RSYSLOG_FileFormat"
binary # имя программы и параметры; ранее был $ActionOMProgBinary
confirmMessages="off" # в версии 8.31; программа выдаёт подтверждение ("OK") на инициализацию и каждое сообщение на stdout;
иначе ссобщение ставится в очередь для повторной доставки
useTransactions="off" # в версии 8.31
beginTransactionMark="BEGIN TRANSACTION" # в версии 8.31
commitTransactionMark="COMMIT TRANSACTION" # в версии 8.31
output # имя файла для сохранения stdout (если отключён confirmMessages) и stderr
hup.signal="none" # какой сигнал передавать программе при получении HUP самим rsyslogd
signalOnClose="off" # передавать программе сигнал TERM перед закрытием канала
closeTimeout="5000" # в версии 8.35; сколько ждать между закрытием канала и завершением программы
killUnresponsive # в версии 8.35; посылать программе сигнал KILL, если TERM не помог за closeTimeout время
forceSingleInstance="off" # запускать только 1 экземпляр программы для всех потоков
Модуль вывода omusrmsg обрабатывает разобранные сообщения и посылает их на терминалы пользователей.
Модуль встроенный. Входные параметры модуля omusrmsg:
Users # имена пользователей; "*" - всем
Template="StdUsrMsgFmt" # если всем, то "WallFmt"
Модуль вывода omuxsock обрабатывает разобранные сообщения и передаёт их в сокет.
Обратное действие для imuxsock. Входные параметры модуля omuxsock:
$OMUxSockSocket # имя сокета
$OMUxSockDefaultTemplate
Источники сообщений реализуются с помощью модулей ввода (im*), описываются директивами input,
параметрами которой являются специфические входные параметры модуля и следующие параметры:
type # имя модуля
Модуль imuxsock принимает сообщения через сокеты (не более 50) от syslog(3).
Модуль ведёт счётчики статистики: submitted, ratelimit.discarded и ratelimit.numratelimiters.
Параметры загрузки модуля (многие SysSock.* игнорируются при работе с systemd, который самостоятельно читает /dev/log
и понравившееся выдаёт в /run/systemd/journal/syslog?):
SysSock.IgnoreTimestamp="on" # ранее был $SystemLogSocketIgnoreMsgTimestamp
SysSock.IgnoreOwnMessages="on"
SysSock.Use="on" # ранее был $OmitLocalLogging
SysSock.Name="/dev/log" # ранее был $SystemLogSocketName, для совместимости с systemd - SysSock.Name="/run/systemd/journal/syslog"
SysSock.FlowControl="off" # ранее был $SystemLogFlowControl
SysSock.UsePIDFromSystem="off" # нужен? ранее был $SystemLogUsePIDFromSystem
SysSock.RateLimit.Interval="0" # секунд, 0 - отключить контроль, ранее был $SystemLogRateLimitInterval
SysSock.RateLimit.Burst="200" # ранее был $SystemLogRateLimitBurst
SysSock.RateLimit.Severity="1" # кого ограничивать, ранее был $SystemLogRateLimitSeverity
SysSock.UseSysTimeStamp="on" # брать время не из текста сообщения, из данных сокета, ранее был $SystemLogUseSysTimeStamp
SysSock.Annotate="off" # заполнить доверенные (полученные от системы, а не от приложения) переменные, ранее был $SystemLogSocketAnnotate
SysSock.ParseTrusted="off" # создать JSON структуру из доверенных переменных, ранее был $SystemLogParseTruste
SysSock.Unlink="on" # сокет создаётся и удаляется; не действует при сосуществовании с systemd
SysSock.UseSpecialParser="on" # формат слегка отличается от UDP стандарта
SysSock.ParseHostname="off"
Входные параметры модуля imuxsock
Ruleset # набор правил
IgnoreTimestamp="on" # ранее был $InputUnixListenSocketIgnoreMsgTimestamp
IgnoreOwnMessages="on"
FlowControl="off" # ранее был $InputUnixListenSocketFlowControl
RateLimit.Interval="0" # секунд, 0 - отключить контроль, ранее был $IMUXSockRateLimitInterval
RateLimit.Burst="200" # ранее был $IMUXSockRateLimitBurst
RateLimit.Severity="1" # кого ограничивать, ранее был $IMUXSockRateLimitSeverity
UsePIDFromSystem="off" # нужен? ранее был $InputUnixListenSocketUsePIDFromSystem
UseSysTimeStamp="on" # брать время не из текста сообщения, из данных сокета, ранее был $InputUnixListenSocketUseSysTimeStamp
CreatePath="off" # создавать промежуточные каталоги (права 0755), ранее был $InputUnixListenSocketCreatePath
Socket # имя дополнительного сокета, ранее был $AddUnixListenSocket
HostName # поменять имя хоста на указанное, ранее был $InputUnixListenSocketHostName
Annotate="off" # ранее был $InputUnixListenSocketAnnotate
ParseTrusted="off" # ранее был $ParseTrusted
Unlink="on" # сокет создаётся и удаляется; не действует при сосуществовании с systemd
UseSpecialParser="on"
ParseHostname="off"
Модуль imjournal принимает структурированные сообщения из базы systemd journal, который читает /dev/log (?).
Модуль ведёт счётчики статистики: read, submitted, discarded, failed, poll_failed, rotations, recovery_attempts,
ratelimit_discarded_in_interval, disk_usage_bytes.
Параметры загрузки модуля imjournal:
PersistStateInterval="10" # интервал (в сообщениях) обновления файла с позицией в journald, ранее был $imjournalPersistStateInterval
StateFile # имя файла для хранения позиции в журнале, ранее был $imjournalStateFile, относительное имя - относительно рабочего каталога
Ratelimit.Interval="600" # секунд, 0 - отключить контроль, ранее был $imjournalRatelimitInterval
Ratelimit.Burst="20000" # ранее был $imjournalRatelimitBurst
IgnorePreviousMessages="off" # полезно при проблемах с файлом позицией в журнале, ранее был $ImjournalIgnorePreviousMessages
DefaultSeverity="notice" # для сообщений от journald без PRI, ранее был $ImjournalDefaultSeverity
DefaultFacility="user" # для сообщений от journald без PRI, ранее был $ImjournalDefaultFacility
UsePid="both|syslog|system" # использовать SYSLOG_PID или _PID от systemd
IgnoreNonValidStatefile="on"
WorkAroundJournalBug="off" # в версии 8.37
Модуль imudp принимает сообщения по протоколу UDP (RFC 3164). Можно сконфигурировать несколько приёмников с помощью input().
Модуль ведёт счётчики статистики (отдельно для каждого потока ("imudp(wНомер)" и каждого источника - "имя-источника(адрес:порт)"):
submitted, disallowed, called.recvmmsg, called.recvmsg, msgs.received.
Параметры загрузки:
TimeRequery="2" # интервал (в сообщениях) между запросами точного времени, механизм включается только при большом потоке,
ранее был $UDPServerTimeRequery
SchedulingPolicy # fifo (планировщик realtime), rr, other; ранее был $IMUDPSchedulingPolicy
SchedulingPriority # ранее был $IMUDPSchedulingPriority
Name.appendPort="off" # добавить номер порта к имени источника (например, "imudp514")
Address # адрес привязки ("*" - ко всем интерфейсам), ранее был $UDPServerAddress
Port="514" # массив (список через запятую в квадратных скобках, ранее был $UDPServerRun
IpFreeBind="2" # 0 - не использовать IP_FREEBIND, 1 - молча привязать к нелокальному адресу, 2 - привязать и сообщить
Device # имя интерфейса
Ruleset="RSYSLOG_DefaultRuleset" # набор правил, ранее был $InputUDPServerBindRuleset
Ratelimit.Interval="0" # секунд, 0 - отключить контроль
Ratelimit.Burst="10000" #
DefaultTZ # например, "+03:00" для Москвы
RcvBufSize="0" # 0 - автонастройка
Модуль imtcp принимает сообщения по протоколу TCP (RFC 6587? RFC 5424 с разделителем LF или Octet Counting?).
Шифрование осуществляется сетевым потоковым драйвером (network stream driver) или внешними средствами (stunnel), imgssapi включает функциональность imtcp.
Модуль ведёт счётчики статистики (отдельно для каждого источника - "имя-источника(порт)"): submitted.
Параметры загрузки:
AddtlFrameDelimiter="-1" # ?, ранее был $InputTCPServerAddtlFrameDelimiter
DisableLFDelimiter="off" # ранее был $InputTCPServerDisableLFDelimiter
MaxFrameSize="200000" # для режима Octet Counting
NotifyOnConnectionClose="off" # сообщать о закрытии соединения, ранее был $InputTCPServerNotifyOnConnectionClose
KeepAlive="off" # ранее был $InputTCPServerKeepAlive
KeepAlive.Probes="0" # 0 - определяется ОС, ранее был $InputTCPServerKeepAlive_probes
KeepAlive.Time="0" # 0 - определяется ОС, ранее был $InputTCPServerKeepAlive_time
FlowControl="on" # ранее был $InputTCPFlowControl
MaxListeners="20" # ранее был $InputTCPMaxListeners
MaxSessions="200" # ранее был $InputTCPMaxSessions
StreamDriver.Mode # ранее был $InputTCPServerStreamDriverMode
StreamDriver.AuthMode # ранее был $InputTCPServerStreamDriverAuthMode
PermittedPeer # ранее был $InputTCPServerStreamDriverPermittedPeer
DiscardTruncatedMsg="off" # остаток обрабатывать как следующее сообщение
gnutlsPriorityString
Входные параметры модуля imtcp:
Name="imtcp" # имя источника, ранее был $InputTCPServerInputName
Address # адрес привязки (в реальности привязывается ко всем интерфейсам)
Port # ранее был $InputTCPServerRun
Ruleset # набор правил, ранее был $InputTCPServerBindRuleset
SupportOctetCountedFraming="on"
RateLimit.Interval="0" # секунд, 0 - отключить контроль
Ratelimit.Burst="10000" #
Модуль imptcp принимает сообщения по протоколу TCP (RFC 6587? RFC 5424 с разделителем LF или Octet Counting?)
и через сокеты быстро, но не поддерживает TLS.
Шифрование осуществляется внешними средствами (stunnel).
Модуль ведёт счётчики статистики (отдельно для каждого источника - "имя-источника(адрес-привязки/порт/IPv4)"): submitted.
Параметры загрузки:
Threads="2" # и ещё 1 поток основной, ранее был $InputPTCPServerHelperThreads
ProcessOnPoller="on" # на больших нагрузках рекомендуют отключить
Входные параметры модуля imptcp:
Name="imptcp" # имя источника, ранее был $InputPTCPServerInputName
Address # адрес привязки (в реальности привязывается ко всем интерфейсам), ранее был $InputPTCPServerListenIP
Port # ранее был $InputTCPServerRun
Path # путь для сокета, также для сокета задаются FileOwner, FileOwnerNum, FileGroup, FileGroupNum, FileCreateMode, FailOnChOwnFailure, Unlink
Ruleset # набор правил
DiscardTruncatedMsg="off" # остаток обрабатывать как следующее сообщение
MaxFrameSize="200000" # для режима Octet Counting
AddtlFrameDelimiter="-1" # ранее был $InputPTCPServerAddtlFrameDelimiter
SupportOctetCountedFraming="on" # ранее был $InputPTCPSupportOctetCountedFraming
NotifyOnConnectionClose="off" # сообщать о закрытии соединения, ранее был $InputPTCPServerNotifyOnConnectionClose
NotifyOnConnectionOpen="off" # сообщать об открытии соединения; нет такого
KeepAlive="off" # ранее был $InputPTCPServerKeepAlive
KeepAlive.Probes="0" # 0 - определяется ОС, ранее был $InputPTCPServerKeepAlive_probes
KeepAlive.Time="0" # 0 - определяется ОС, ранее был $InputPTCPServerKeepAlive_time
KeepAlive.Interval="0" # 0 - определяется ОС, ранее был $InputPTCPServerKeepAlive_intvl
RateLimit.Interval="0" # секунд, 0 - отключить контроль
Ratelimit.Burst="10000" #
Compression.mode # см. сжатие в omfwd
FlowControl="on"
MultiLine="off" # новое сообщение распознаются по "<" после LF
framing.delimiter.regex="off" # регулярное выражение для разделителя сообщений
SocketBacklog="5"
Defaulttz # например, "+03:00" для Москвы
Framingfix.cisco.asa="off" # борьба с Cisco ASA
Модуль imfile превращает файл из строк (LF) в поток сообщений, пустые строки игнорируются,
новые строки обрабатываются по мере поступления, поддерживается ротация входного файла.
Информация об уже обработанной части файла может храниться (PersistStateInterval) в файле состояния чтения файла в рабочем каталоге.
Параметры загрузки:
mode="inotify" # режим отслеживания (inotify или polling) добавлений в файл
readTimeout="0" # секунд
timeoutGranularity="1"
sortFiles="off" # в версии 8.32
PollingInterval="10" # секунд
Входные параметры модуля imfile:
File="имя-файла" # ранее был $InputFileName, можно использовать шаблоны
Tag="этикетка-сообщения" # надо завершать ":" при необходимости, ранее был $InputFileTag
Ruleset=набор-правил" # ранее был $InputFileBindRuleset
Facility="local0" # ранее был $InputFileFacility
Severity="notice" # ранее был $InputFileSeverity
PersistStateInterval="0" # ранее был $InputFilePersistStateInterval, через какой интервал сообщений записывать файл состояния чтения файла
startmsg.regex # регулярно выражение начала каждого сообщения
readTimeout="0" # в сочетании с startmsg.regex задаёт задержку поиска начала следующего сообщения для борьбы с буферизацией вывода
readMode="0" # 0 - каждая строка есть сообщение, 1 - пустая строка между сообщениями, 2 - пробелы в начале строки есть признак продолжения сообщения
escapeLF="1" # заменять LF в многострочных сообщениях на "#012"
MaxLinesAtOnce="0" # ранее был $InputFileMaxLinesAtOnce, для режима опроса - 10240, не рекомендуется к использованию
MaxSubmitAtOnce="1024"
deleteStateOnFileDelete="on" # удалять файл состояния чтения файла при удалении файла
addMetadata="-1" # к свойствам сообщения можно добавить filename и fileoffset, включается автоматически при задании имени файла с помощью шаблона
reopenOnTruncate="off"
trimLineOverBytes="0" # обрезать слишком длинные строки
freshStartTail="off" # при запуске rsyslog установит указатель в конец файла, чтобы читать только новые сообщения
discardTruncatedMsg="off" # выбрасывать обрезанную часть сообщения, а не делать из него следующее сообщение
msgDiscardingError="on" # выдавать сообщение об ошибке при обрезании
Модуль imklog принимает сообщения из журнала ядра. Загрузка модуля активирует его.
Параметры загрузки:
InternalMsgFacility="kern" # ранее был $KLogInternalMsgFacility, для собственных сообщений (запуск, останов, ошибка)
PermitNonKernelFacility="off" # ранее был $KLogPermitNonKernelFacility, принимать из журнала ядра сообщения с источником не kern
ConsoleLogLevel="-1" # ранее был $klogConsoleLogLevel
ParseKernelTimestamp="off" # ранее был $klogParseKernelTimestamp, брать время из сообщения, а не по времени прихода
KeepKernelTimestamp="off" # ранее был $klogKeepKernelTimestamp
LogPath="/proc/kmsg" или "/dev/klog" в BSD # ранее был $klogpath
RatelimitInterval="0" # в версии 8.35
RatelimitBurst="10000" # в версии 8.35
Модуль imkmsg принимает сообщения ядра из структурированного /dev/kmsg ("уровень,номер,отметка-времени;сообщение\n[ключ/значение]...",
см. "dd if=/dev/kmsg iflag=nonblock"). Загрузка модуля активирует его. Несовместим с imklog.
Модуль impstats ничего не принимает, а периодически выводит накопленные значения счётчиков, полученные от других модулей.
Модуль ведёт счётчики статистики (см. getrusage): utime, stime, maxrss, minflt, majflt, inblock, outblock, nvcsw, nivcsw, nivcsw.
Параметры загрузки:
log.syslog="on" # обрабатывать стандартным способом (Ruleset, форматирование)
log.file # имя файла, напрямую в файл без форматирования; syslog и file можно одновременно
Ruleset # набор правил
Bracketing="off" # обрамлять вывод статистики строчками BEGIN и END; порядок не гарантирован
Счётчики очередей (main Q, очереди наборов правил, очереди действий):
size - активных сообщений сейчас в очереди
enqueued - всего помещено сообщений в очередь
maxsize - максимальное число активных сообщений за время наблюдения
full - сколько раз не смогли поместить сообщение в очередь
discarded.full - сколько сообщений было брошено из-за переполнения очереди
discarded.nf - сколько сообщений было брошено из-за близости очереди к переполнению
Счётчики действий (действия нумеруются, имён нет):
processed - сколько сообщений было на входе
failed - сколько сообщений не смогли обработать
suspended - количество переходов в состояние ожидания
suspended.duration - время в секундах, проведённое в ожидании
resumed - количество успешных завершений ожидания
Модули разбора позволяет преобразовать плохоструктурированные сообщения в хорошо структурированные для дальнейшей обработки.
Необходимо загрузить модуль, настроить (если есть что) и привязать цепочку разборщиков к набору правил (разбор заканчивается с первой удачей):
module(load="имя-модуля") # при загрузке содаётся парсер с именем "rsyslog.имя-модуля"
parser(name="имя" type="имя-модуля" параметр="значение") # встроенные модули были "builtin:" теперь можно указывать параметры без загрузки модуля
ruleset(name="test" parser=["rsyslog.rfc5424","rsyslog.rfc3164"] ... { } # это цепочка по умолчанию?
Модули разбора:
rfc3164 # всегда успешен, параметры parser():
permit.squareBracketsInHostname="off" # убрать квадратные скобки вокруг имени хоста
permit.slashesInHostname="off"
permit.AtSignsInHostname="off"
force.tagEndingByColon="off" # в версии 8.25, если тэг не заканчивается на ":", то установить переменную tag в "-"
remove.msgFirstSpace="off" # в версии 8.25, удалить первый пробел после тэга
detect.YearAfterTimestamp="off" # некоторые добавляют год в сообщения формата RFC 3164
pmrfc3164sd # структурированные данные в стиле RFC 5424 внутри сообщений RFC 3164
rfc5424 ?
pmlastmsg # обработка сообщений о повторяющихся строках; модуль для загрузки называется pmlastmsg,
а парсер создаётся rsyslog.lastline
ciscoios в документации, cisconames в /usr/lib64/rsyslog/, параметры parser():
present.origin="off" # записывается в HOSTNAME
present.xr="off"
pmnormalize версия 8.27, параметры parser():
Rulebase # имя файла с набором правил для liblognorm
Rule # массив правил для liblognorm
UndefinedPropertyError="off" # выдавать сообщение об ошибке при каждой неудаче
pmnull # всё свалить в rawmsg
Tag
SyslogFacility="1"
SyslogSeverity="5"
pmsnare # как CSV, но поля разделяются табуляциями
Модули модификации используются как модули вывода (изменяют разобранное сообщение перед другими действиями)
или разбора (?).
Модуль анонимизации IP адресов mmanon заменяет IP адреса в сообщении на поддельные.
Входные параметры:
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.anonmode="zero"
embeddedipv4.bits="96"
Модуль mmrm1stspace позволяет удалить первый пробел из msg.
Модуль mmutf8fix исправляет ошибки в последовательности UTF-8.
Меняет само сообщение, но не меняет разобранные свойства (properties).
Входные параметры:
mode="utf-8" # utf-8 - ошибочные последовательности заменяются, controlcharacters - заменяются все не US ASCII символы
replacementChar=" "
Модуль mmcount позволяет подсчитать количество соответствующих фильтру сообщений.
Результат записывается в json элемент mmcount ("$!mmcount").
Входные параметры:
appname # считаются сообщения от данного приложения
key # считаются сообщения, имеющие указанный ключ json
value # считаются сообщения, имеющие указанный ключ json с указанным значением
Модуль mmexternal позволяет использовать внешнюю программу для модификации сообщений.
Входные параметры:
binary # имя программы
interface.input="msg" # на вход программе можно подавать msg, rawmsg или fulljson
output # имя файла для записи stdout программы; для отладки
forceSingleInstance="off" # запускать только 1 экземпляр программы для всех потоков
Модуль mmfields извлекает поля и размещает их в формате CEE/lumberjack.
Входные параметры:
separator=","
jsonRoot="!" # куда писать результат JSON ("$!" - это корень)
Модуль mmnormalize позволяет использовать liblognorm (/usr/share/doc/liblognorm/html/index.html) для нормализации.
Результат нормализации записывается в формате CEE/lumberjack (например, "%$!hostname%").
Параметр загрузки: allow_regex="off".
Входные параметры:
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%
Модуль mmjsonparse позволяет разобрать структурированные сообщения в формате CEE/lumberjack (CEE cookie).
Модуль mmpstrucdata позволяет разобрать структурированные сообщения в формате RFC 5424.
Результат нормализации записывается в формате CEE/lumberjack (например, "%$!hostname%") в корень!rfc5424-sd.
Входные параметры:
Имеет модульную структуру (загрузка модулей производится директивой "$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 соединения, сбрасываются хранящиеся в памяти очереди)
SIGTERM, SIGINT, SIGQUIT - завершение работы
SIGUSR1 - включить/выключить отладку (только при использовании ключа -d)
SIGCHLD - дождаться завершения порождённых процессов
В отличие от sysklogd синхронизация выключена по умолчанию.
Формат временных отметок при записи в файл по умолчанию изменён.
При передаче сообщений на удалённый сервер они предваряются именем хоста
(как это обрабатывается logwatch?!),
рекомендуется обеспечить совместимость следующим образом:
Принимаемые сообщения могут складываться в главную очередь сообщений
(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).
-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)
$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)
$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:"):
$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 действие
Значения переменных извлекаются использованием символа '$',
за которым указывается имя переменной.
Специальный селектор '&' повторяет действие предыдущего селектора.
Жаль, что авторы не уделили времени проектированию перед началом реализации,
а исходили из списка пожеланий пользователей.
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
вложенные конструкции rulengine, включая if/then/else (7.1.1)
операторы set и unset
конкатенация строк
копирование поддеревьев JSON
модуль ввода imkmsg для структурированных сообщений ядра
параметр permittedPeers для imtcp
опция VeryReliableZip
унифицирована конфигурация ограничения потока
унифицирована обработка сообщений о повторяющихся сообщениях
модуль записи omjournal
imuxsock игнорирует сообщения от себя (борьба с циклами с использованием journal)
подпись журнала
шифрование журнала
модуль вывода omrabbitmq
глобальный параметр ProcessInternalMessages
Отличия 8.24 от 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
шаблоны в именах каталогов в 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