|
Bog BOS: rsyslog - сервер syslog
|
Последнее изменение файла: 2023.10.27
Скопировано с www.bog.pp.ru: 2024.11.23
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*
- 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
- модули разбора
- pmaixforwardedfrom
- pmcisconames
- pmlastmsg
- pmrfc3164sd
- pmsnare
- модули модификации (работают как модули разбора или вывода) - /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
-
- модули функций - /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=каталог-с-модулями
Ключи запуска (/etc/sysconfig/rsyslog, /etc/systemd/system/multi-user.target.wants/rsyslog.service):
- -D # разбор конфигурации в отладочном режиме
- -d # отладочный режим; не переходит в фоновый режим
- -f имя-файла-конфигурации # по умолчанию /etc/rsyslog.conf
- -i pid-файл # по умолчанию - /var/run/syslogd.pid, требуется при наличии нескольких экземпляров rsyslogd на сервере
- -n # не уходить в фоновый режим; необходим для запуска из init
- -N уровень-проверки # проверить правильность конфигурационного файла, 1 - обычная проверка
- -C # не делать chroot
Файл настройки (обычно /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
- global(имя="значение" ...) # задание глобальных параметров
- 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 задаёт имя предварительно загруженного модуля
Строчные константы записываются как 'строка', "строка", `echo переменная-окружения` (8.33), `cat имя-файла` (8.33).
Маскировка спецсимволов: "\n", "\123", "\xFF".
Для структурированного вывода (например, JSON) предусмотрены параметры format (json, jsonf, jsonr, jsonfr, csv) и outname (имя элемента).
Для преобразования значений переменных имеется множество параметров: dateformat (date-utc, date-mysql, date-rfc3164,
date-rfc3164-buggyday, date-rfc3339, date-unixtimestamp, date-year, date-month, date-day, date-hour, date-minute, date-second,
date-subseconds, date-ordinal, date-week, date-week, date-wdayname), date.inUTC, caseconversion (lower, upper),
controlcharacters (escape, space, drop), securepath, position.from, position.to, position.relativeToEnd (yes, no), fixedwidth (yes, no),
compressspace, field.number, field.delimiter, regex.type (ERE, BRE), regex.expression, regex.nomatchmode, regex.nomatchmode, regex.submatch,
droplastlf, mandatory (on, off).
Опции шаблонов позволяют стандартные адаптирующие преобразования для результатирующей строки: 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(имя-шаблона) #выполнить преобразователь, заданный строкой в шаблоне)
- field(строка,разделитель,номер-поля)
- format_time(целое,"date-rfc3164|date-rfc3339") # обещают удалить
- getenv("имя-переменной-окружения")
- int2hex(целое) # возвращает строку)
- is_time(строка[,"date-rfc3164|date-rfc3339|date-unix"])
- 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
- maxMessageSize="8192"
- janitor.interval="минут" # интервал запуска чистильщика
- net.ipprotocol="unspecified" # ipv4-only или ipv6-only
- net.enableDNS="on"
- net.permitACLWarning="on"
- net.aclResolveHostname="on" # преобразовывать доменные имена в IP при проверке ACL
- net.aclAddHostnameOnFail="off" # при неудаче DNS при проверке ACL использовать доменное имя
- parser.parseHostnameAndTag="on"
- parser.permitSlashInProgramName="off"
- senders.keepTrack="off" # вести статистику отправителей
- senders.timeoutAfter="43200" # 12 часов, через какое время удалять отправителя из статистики
- senders.reportGoneAway="off"
- senders.reportNew="off")
- variables.caseSensitive="off" # в версии 8.30, ранее было "on"
- dynafile.donotsuspend="on" # в версии 8.32
- environment # массив (через запятую) имён и значений переменных окружения
- oversizemsg.errorfile="имя-файла" # в версии 8.35, сюда сбрасывать слишком длинные сообщения
- oversizemsg.input.mode="truncate|split|accept" # в версии 8.35
- oversizemsg.report="on" # в версии 8.35
- abortOnUncleanConfig="off" # в версии 8.37, ранее $AbortOnUncleanConfig
- inputs.timeout.shutdown="1000" # мс, в версии 8.37
- $FailOnChownFailure on
- $MainMsgQueueSize 50000 # в сообщениях, не байтах
- $MaxOpenFiles
- $ModDir # "/usr/lib64/rsyslog/"
- $umask # umask для процесса rsyslog
- $DefaultNetstreamDriver ptcp
- $DefaultNetstreamDriverCAFile путь-к-cafile.pem
- $DefaultNetstreamDriverCertFile путь-к-certfile.pem
- $DefaultNetstreamDriverKeyFile путь-к-keyfile.pem
- $RepeatedMsgContainsOriginalMsg off
- $PrivDropToGroup, $PrivDropToGroupID, $PrivDropToUser, $PrivDropToUserID
- $LocalHostIPIF имя-интерфейса # fromhost-ip для локальных сообщений вместо 127.0.0.1
- $SpaceLFOnReceive off # заменять на входе LF на пробел
- для модулей ввода
- $AllowedSender {udp|tcp|gss}, {IP-адрес/длина-адреса|щаблон-имени} [,...] # рекомендуется использовать сетевой экран, выдаются предупреждения
- $DropMsgsWithMaliciousDnsPTRRecords off # даже при off будет указан IP адрес
- $ControlCharacterEscapePrefix \ # в реальности используется '#'
- $DropTrailingLFOnReception on
- $Escape8BitCharactersOnReceive off
- $EscapeControlCharactersOnReceive on
- $MarkMessagePeriod 1200 # 0 - отключить генератор отметок
- для модулей вывода (действий)
- $ActionExecOnlyWhenPreviousIsSuspended off # позволяет обеспечить резервный канал вывода
- $ActionResumeInterval 30 # интервал автоматически увеличивается при повторных неудачах
- $RepeatedMsgReduction off # преобразовывать повторяющиеся сообщения в "Last line repeated ... times"
- $ActionName слово
- внутренние сообщения
- internalmsg.ratelimit.interval="5" # секунд, в версии 8.29
- internalmsg.ratelimit.burst="500" # следующие будут выкинуты, в версии 8.29
- errorMessagesToStderr.maxNumber # в версии 8.30
- $ErrorMessagesToStderr on
- $LogRSyslogStatusMessages on
- TLS
- defaultNetstreamDriver # ossl или gtls
- defaultNetstreamDriverCAFile # сертификат CA для проверки ключей и сертификатов
- defaultNetstreamDriverKeyFile # приватный ключ этого сервера
- defaultNetstreamDriverCertFile
- отладка
- debug.logFile # перебивается значением переменной окружения RSYSLOG_DEBUGLOG
- debug.gnutls="0"
- debug.onShutdown
- 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
- gtls - режимы 0 (без шифрования) и 1 (TLS), аутентификация: anon, x509/fingerprint, x509/certvalid, x509/name
- openssl - режимы 0 (без шифрования) и 1 (TLS), аутентификация: anon, x509/fingerprint, x509/certvalid, x509/name
- StreamDriverMode="0" # ранее был $ActionSendStreamDriverMode
- StreamDriverAuthMode # ранее был $ActionSendStreamDriverAuthMode
- StreamDriverPermittedPeers # ранее был $ActionSendStreamDriverPermittedPeers
- NetworkNamespace пространство-имён # /var/run/netns/, setns()
- Address=локальный-адрес # для UDP, в версии 8.35
- 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,
параметрами которой являются специфические входные параметры модуля и следующие параметры:
Модуль 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
- BatchSize="32" # запрашивать UDP пакеты пачками (recvmmsg())
- Threads="1"
Входные параметры модуля imudp:
- Name="imudp" # имя источника
- 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.Name # выбрать сетевой потоквый драйвер
- ptcp - режим 0 (без шифрования), аутентификация: anon
- gtls - режимы 0 (без шифрования) и 1 (TLS), аутентификация: anon, x509/fingerprint, x509/certvalid, x509/name
- openssl - режимы 0 (без шифрования) и 1 (TLS), аутентификация: anon, x509/fingerprint, x509/certvalid, x509/name
- 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.
Параметры загрузки:
- Interval="300" # секунд
- Facility="5" # syslog
- Severity="6" # info
- ResetCounters="off" # сбрасывать при выводе
- Format="legacy" # legacy, cee, json, json-elasticsearch
- 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.
Входные параметры:
- jsonRoot="!"
- sd_name.lowercase="on"
Пример настройки коллектора в новом формате:
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 соединения, сбрасываются хранящиеся в памяти очереди)
- 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 от 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
- imrelp: oversizeMode={abort|truncate|accept}
- централизованная обработка "слишком больших" сообщений (oversizemsg.errorfile, oversizemsg.report, oversizemsg.input.mode)
- imptcp: framing.delimiter.regex
- inputs.timeout.shutdown
- imtcp/imudp: preservecase
|
Bog BOS: rsyslog - сервер syslog
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru