@ Карта сайта News Автора!

Bog BOS: rsyslog - сервер syslog

apache inn MySQL nntpcache Cyrus IMAP exim Squid ssh syslog tacacs ProFTPD wu-ftpd xntpd

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост

Последнее изменение файла: 2024.12.23
Скопировано с www.bog.pp.ru: 2025.01.18

Bog BOS: rsyslog - сервер syslog

rsyslog - сервер протокола syslog, обеспечивающий передачу и хранение сообщений. Один из претендентов на замену "стандартного" сервера sysklogd в Linux (может быть полностью с ним совместим), ответвился в 2004 году. Позволяет принимать сообщения из множества типов источников, обрабатывать их и пересылать и/или записывать множеством способов благодаря модульной структуре. Среди возможностей:

Продвигается (продвигался) фирмой Red Hat (теперь она продвигает systemd-journald), в частности, в RHEL5 включены версии 3.22.1 и 5.8.12 как rsyslog5; в RHEL6 (версии 5.8.10 и 7.4.10 как rsyslog7) и RHEL7 (версии 7.4.7 и 8.24.0 в RHEL 7.4) и RHEL8 (версия 8.2102.0) и RHEL9 (версия 8.2310.0) ставится по умолчанию. Имеется платная поддержка (Adiscon). Лицензия - GPLv3 (часть ядра под LGPL). Работает под Linux (Red Hat, Debian, Ubuntu, OpenSUSE, Gentoo), FreeBSD, Solaris, AIX (устаревшая информация).

Различные версии rsyslog (2, 3, 5, 7 и 8) имеют различный формат конфигурационного файла и архитектуру. Несмотря на попытки обеспечить совместимость и совместное использование кусков конфигурационного файла в разных форматах безопаснее рассматривать их как различные программы и по возможности не смешивать.

Имеется путаница с rsyslog и rsyslogd: SYSLOG_IDENTIFIER=rsyslogd и _COMM=rsyslogd (_EXE=/usr/sbin/rsyslogd, _CMDLINE=/usr/sbin/rsyslogd), но _SYSTEMD_UNIT=rsyslog.service.

Архитектура rsyslogd (v.8)

Сообщения поступают в rsyslogd с помощью модулей ввода (im*), поступившее сообщение (объект "input()") передаётся препроцессору, результат препроцессирования попадает в главную очередь (main queue, MainMsg, в реальности очередь набора правил? создаётся при разборе файла конфигурации), сообщения из главной очереди разбираются (возможно, что многопоточно; размер пула рабочих потоков изменяется по потребности; риск потери порядка сообщений), фильтруются и попадают в очереди действий (Action, создаётся при каждом использовании команды action). При фильтрации и маршрутизации используется набор правил (ruleset), имеется набор правил по умолчанию (RSYSLOG_DefaultRuleset).

К набору правил привязывается модуль разбора (pm*), который переводит поступившее сообщение (не транспортный кадр!) во внутренний формат (разбирает его на свойства) перед фильтрацией. Модули разбора могут быть соединены в цепочку, элементы которой по очереди пытаются справиться с поступившим сообщением.

Каждое правило набора состоит из фильтра и списка действий (объект 'action(type="тип")'). Правила из набора проверяются на соответствие по очереди пока не будет достигнут конец набора или не будет получена команда прекратить обработку сообщения (discard; в старых настройках - команда "stop" или "~"). Подходящие правила вызывают постановку сообщения в соответствующую очередь действия (или несколько очередей). Менеджер очереди действия забирает очередное сообщение из очереди и вызывает обработчик действия (action), который обрабатывает его с помощью модуля вывода (om*). Менеджер очереди может быть привязан к набору правил.

Режимы обслуживания (QueueType) очереди:

Количество потоков обработки очереди выбирается автоматически в зависимости от заполнения очереди (QueueWorkerThreadMinimumMessages, QueueWorkerThreads). Ненужные более потоки уничтожаются при истечении времени неактивности (QueueWorkerTimeoutShutdown). При катастрофическом переполнении очереди (QueueDiscardMark) менее приоритетные сообщения (QueueDiscardSeverity) выкидываются. При длительном переполнении очереди приём новых сообщений останавливается полностью (QueueTimeoutEnqueue) и все входящие сообщения могут выкидываться. Скорость обработки можно замедлять паузами между обработкой сообщений (QueueDequeueSlowdown).

В дополнение к традиционным для sysklogd фильтрам имеются управляющие структуры RainerScript (if, foreach, call, continue).

При обработке можно использовать внутренние переменные (Property) и операции над ними ("set $имя = выражение;", unset, reset).

Описания шаблонов (определяются статически при инициализации) позволяют задать для действия выходной формат сообщения или имя файла в дополнение к встроенным шаблонам.

Программа имеет модульную структуру (/usr/lib64/rsyslog/):

Реакция на сигналы:

Переменые окружения:

Пакет rsyslog-doc содержит документацию в формате HTML.

Утилита rsyslog-recover-qi.pl восстанавливает файлы очереди DA

Ключи запуска (v8) и описание юнита

Ключи запуска:

Сервис (юнит) /usr/lib/systemd/system/rsyslog.service (/etc/systemd/system/multi-user.target.wants/rsyslog.service) после network-online.target, т.е. до подъёма сети в журнале ничего не будет. Берёт ключи из /etc/sysconfig/rsyslog и добавляет "-n". StandardOutput=null (а зачем?).

Если нужно работать с сетью, то необходимо отключить RestrictNamespaces=net и RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX (интересно, каких семейств ему не хватает? AF_NETLINK?).

Настройка rsyslog.conf (версия 8), старый стиль (basic)

Файл настройки (обычно /etc/rsyslog.conf и файлы каталога /etc/rsyslog.d) одновременно может содержать конструкции в стиле basic (sysklogd, но не совсем), в старом стиле rsyslog версий 2, 3 и 5 (legacy, obsolete legacy, директивы начинаются с "$") и в новом стиле версий 6, 7 и 8 (advanced, RainerScript). Некоторые модули не адаптированы к новому (advanced) стилю, некоторые возможности нельзя описать старым стилем (basic). В старом стиле директивы обрабатывались построчно, в новом стиле весь файл - это поток сознания. Комментарии начинаются с символа '#'. Обратная косая черта в конце строки означает продолжение правила на следующей строке.

Файл настройки в стиле basic делится на 4 секции:

Шаблоны позволяют переформатировать сообшения перед выводом. Если вам недостаточно встроенных шаблонов (RSYSLOG_TraditionalFileFormat (RFC 3164), RSYSLOG_FileFormat, RSYSLOG_TraditionalForwardFormat, RSYSLOG_ForwardFormat, RSYSLOG_SyslogProtocol23Format (RFC 5424)), то скорее всего вам нужен формат настройки advanced.

Каналы вывода - если они вам нужны, то скорее всего вам нужен формат настройки advanced.

Каждое правило состоит из селектора и действия, которые разделяются табуляциями или пробелами. Получив сообщение rsyslog для каждого правила проверяет не подходит ли сообщение под шаблон, определяемый селектором. Если подходит, то выполняется указанное в правиле действие. Для одного сообщения м.б. выполнено произвольное количество действий (т.е. обработка сообщения не прекращается при первом успехе).

Селектор состоит из двух частей, разделенных точкой: источник сообщения и уровень серьезности. Прописные и строчные буквы не различаются. Можно также использовать числа (см. /usr/include/syslog.h). Кроме определенных в syslog(3) источников, можно указывать mark (регулярные временные метки), security (устаревший синоним для auth). Кроме определенных в syslog.h уровней серьезности можно использовать warn (синоним для warning), error (синоним для err), panic (синоним для emerg). Сообщения с уровнем, равным или выше указанного в селекторе, и источником, равным указанному в селекторе, считается подходящим. Звездочка перед точкой соответствует любому источнику, после точки - любому уровню. Слово none после точки - никакому уровню для данного источника. Можно указывать несколько источников в одном селекторе через запятую. В этом случае приоритет можно указывать только для последнего источника. В одной строке можно указывать несколько селекторов через ';', проверяются слева направо, последующий может отменить действие предыдущих (если использовать позитивные селекторы, то выполняется логическое ИЛИ, если негативные (none и восклицательный знак), то логическое И). Перед уровнем можно поставить знак равенства - селектору будут соответствовать только сообщения с указанным уровнем (но не с большим); восклицательный знак - не будут соответствовать сообщения с уровнем равным или большим; восклицательный знак и равенство - не будут соответствовать сообщения с уровнем, равным указанному.

В качестве действия можно указывать:

После действия можно указать ';' и имя шаблона, с помощью которого сообщение преобразуется перед выводом.

Загрузка и настройка модулей осуществляется с помощью глобальных директив вида

$ModLoad imudp
$UDPServerRun 514

$ModLoad imuxsock
$SystemLogSocketName /run/systemd/journal/syslog

$ModLoad imjournal

Настройка rsyslog.conf (версия 8), новый стиль (advanced, RainerScript)

В стиле advanced комментарии начинаются с символа '#' до конца строки или начинаются с "/*" и заканчиваются "*/".

Типы параметров:

Строчные константы записываются как 'строка', "строка" (необходимо маскировать '$'), `echo переменная-окружения` (8.33), `cat имя-файла` (8.33). Маскировка спецсимволов: "\n", "\123", "\xFF", "\\".

Файл представляет собой совокупность описаний (действуют по мере чтения) следующих конфигурационных объектов (в 8.33 каждому конфигурационному объекту добавлен параметр config.enabled, позволяющий его выключить и включить, по умолчанию - on)

Сообщения поступают от модулей ввода, обрабатываются набором правил (по умолчанию RSYSLOG_DefaultRuleset) с указанием цепочки модулей разборщиков, правило состоит из условия (filter) и действия, правила проверяются от первого до последнего, при удовлетворении условия правила сообщение ставится в очереди действий, в которых используются модули вывода с шаблонами форматирования.

Вставка дополнительных файлов и текстов настройки:

Глобальные параметры (global(имя="значение" ...); ранее устанавливались как "$имя значение"; некоторые параметры ещё не получили новый формат; можно устанавливать только 1 раз):

Параметры очереди указываются при описании набора правил, действия и для главной очереди (main_queue):

При описании используется понятие property (свойство), которое иногда переведено как переменная. Некоторые свойства извлекаются из сообщения при его разборе, другие задаются при написании конфигурации. Свойства используются в шаблонах и условных командах. Делаются (терминология RFC 3164 и 5424) из сообщений:

Имеются также системные переменные:

Значения свойств используются с помощью конструкции '%имя[:[начало]:[конец][:преобразователь]]%'. Нумерация символов с 1, номер последнего символа обозначается как '$'.

Можно вырезать из свойства по шаблону регулярного выражения, если в поле 'начало' поместить букву 'R', а в поле 'конец' - регулярное выражение, сразу за которым - строку '-end'. За буквой 'R' можно указать параметры регулярного выражения через запятую:

  1. тип выражения - BRE (базовое) или ERE (расширенное)
  2. номер подвыражения (от 1 до 9), которое надо выдать в качестве результата; 0 - всё выражение
  3. что делать при отсутствии сопоставления - DFLN (строка "**NO MATCH**"), BLANK (пустая строка), ZERO ("0"), FIELD (выдать всё поле)
  4. номер сопоставления, если нужно не первое встретившееся сопоставление; от 0 до 9; нумерация с 0

Также можно поделить свойство на поля, если в поле 'начало' поместить букву 'F,десятичный-код-символа-разделителя' (по умолчанию 9 - TAB), а в поле 'конец' - номер поля (нумерация с 1). Символ '+' после кода позволяет расматривать несколько символов с указанным кодом как единый разделитель.

Преобразователи свойств (можно указать несколько через запятую):

Шаблоны позволяют задать формат вывода или имя файла вывода на основе констант, свойств и их преобразований. Определяются при чтении конфигурационного файла (не действуют условные операторы),

Типы шаблонов:

Параметры свойства (аналогично преобразователям для шаблонов типа строка, но другой синтаксис):

Опции шаблонов позволяют стандартные адаптирующие преобразования для результатирующей строки: option.sql, option.stdsql, option.json, option.jsonf, option.casesensitive.

Стандартные шаблоны:

Модули разбора позволяют преобразовать плохоструктурированные сообщения в хорошо структурированные для дальнейшей обработки (разбирают его на свойства). Модули разбора могут быть соединены в цепочку, элементы которой слева направо по очереди пытаются справиться с поступившим сообщением. Необходимо загрузить модуль, настроить (если есть что) и привязать цепочку разборщиков (в квадратных скобках через запятую) к набору правил (разбор заканчивается с первой удачей):

  1. module(load="имя-модуля") # при загрузке содаётся парсер с именем "rsyslog.имя-модуля"
  2. parser(name="имя" type="имя-модуля" параметр="значение" ...) # встроенные модули были "builtin:" теперь можно указывать параметры без загрузки модуля
  3. ruleset(name="test" parser=["rsyslog.rfc5424","rsyslog.rfc3164"] ... { } # это цепочка по умолчанию?

Модули разбора:

Набор правил привязывается к модулю ввода и определяет цепочку разборщиков, очередь и последовательность действий (правил) над каждым сообщением, поступившим из модуля ввода и разобранным одним из модулей разбора. При определении очереди (по умолчанию очередь не создаётся), сообщение дублируется в эту очередь и все модификации сообщения в наборе правил не отражаются на исходном сообщении. Набор правил записывается в виде заголовка, в котором описываются параметры набора и блока в фигурных скобках, перечисляющего правила. Правила обрабатываются по очереди до конца набора или пока не встретится действие stop. Параметры:

Правила программируются на безтиповом языке RainerScript, преобразования типов проводятся автоматически. Значение свойства сообщения (property) используется в виде '$имя'. Свойства сообщения в формате JSON обозначаются как '$!имя'. Локальные (относительно сообщения) переменные представляют собой элемент или структуру (дерево), корень которого обозначается как '$.имя', а уровни разделяются символом '!'. '$.' - список имён и значений всех локальных переменных. Значение локальной или JSON переменной можно изменять командами set (замена значения, слияние и игнорирование), unset (удаоение) и reset (всегда замена): 'set $.имя = выражение;'.

Выражения используют операторы в порядке убывания приоритета:

Встроенные функции:

Дополнительные функции могут быть загружены в модуле, имя которого начинается с fm (с версии 8.37):

Управляющие структуры RainerScript включают

Действия реализуются с помощью модулей вывода (om*), описываются директивами action в правилах, параметрами действия являются описание очереди (queue.*), специфические параметры модуля вывода и общие параметры:

Между модулями ввода или вывода и подлежащим транспортным уровнем ОС можно поместить драйвер потока (Network Stream Drivers), который обеспечивает последовательность, аутентификацию и секретность:

Типичные модули вывода (встроенные и в /usr/lib64/rsyslog/om*):

Модуль вывода omfile обрабатывает разобранные сообщения и записывает их в файл. Имя файла может быть статическим или динамическим на основе шаблона. Модуль встроенный. Модуль ведёт счётчики статистики кеширования динамических файлов (кеш сбрасывается по HUP), отдельно для каждого шаблона с указанием имени шаблона и действия (используйте имена действий!):

Параметры загрузки модуля omfile ('module(load="builtin:omfile" ...)'; параметры в старом стиле не действуют):

Входные параметры модуля omfile:

Модуль вывода omfwd обрабатывает разобранные сообщения и пересылает их по UDP или TCP, включая TLS. Модуль встроенный. Собирается статистика: bytes.sent (отдельно для каждого адреса, порта и протокола; не заметил в выводе). Параметры загрузки модуля omfwd (module(load="builtin:omfwd" ...):

Входные параметры модуля omfwd:

Модуль вывода omhttp обрабатывает разобранные сообщения и пересылает их с помощью HTTP REST по отдельности и пакетами в форматах JSON, Elasticsearch, Loki и Kafka. Возможно сжатие и TLS.

Модуль вывода omjournal обрабатывает разобранные сообщения и пересылает их в systemd-journald. Параметры загрузки модуля:

Входные параметры модуля omjournal:

Модуль вывода ommail обрабатывает разобранные сообщения и пересылает их по email (прямая посылка по SMTP без аутентификации и прочего, так что рекомендуется организовать очередь своими средствами). Входные параметры модуля ommail:

Модуль вывода ompipe обрабатывает разобранные сообщения и пересылает их в поименованный канал (pipe, fifo): Модуль встроенный. Параметры загрузки модуля:

Входные параметры модуля ompipe:

Модуль вывода omprog обрабатывает разобранные сообщения и подаёт их на вход stdin указанной программе (с помощью анонимного pipe). Сообщения разделяются символами LF (при наличии многострочных сообщений рекомендуется использовать JSON). Программа запускается один раз в каждом потоке. При проблемах с запуском сообщение об ошибке выдаётся с помощью механизма syslog. При завершении программы она перезапускается. При завершении rsyslogd на вход программы подаётся конец файла. Входные параметры модуля omprog:

Модуль вывода omstdout обрабатывает разобранные сообщения и подаёт их на stdout. Параметры загрузки модуля:

Входные параметры модуля:

Модуль вывода omudpspoof (пакет rsyslog-udpspoof) обрабатывает разобранные сообщения и пересылает их по UDP с подделанным исходящим адресом. Требуются права суперпользователя. Параметры загрузки модуля:

Входные параметры модуля omudpspoof:

Модуль вывода omusrmsg обрабатывает разобранные сообщения и посылает их на терминалы пользователей. Модуль встроенный. Параметры загрузки модуля:

Входные параметры модуля omusrmsg:

Модуль вывода omuxsock обрабатывает разобранные сообщения и передаёт их в сокет. Обратное действие для imuxsock. Входные параметры модуля omuxsock:

Источники сообщений реализуются с помощью модулей ввода (im*), описываются директивами input, параметрами которой являются специфические входные параметры модуля и следующие параметры:

Модуль imfile превращает файл из строк, разделённых LF, в поток сообщений, пустые строки игнорируются, новые строки обрабатываются по мере поступления указанным в input() набором правил, поддерживается ротация входного файла (дочитывание старого файла обеспечивается только при непрерывной работе rsyslog). Информация об уже обработанной части файла может храниться в файле состояния чтения файла в рабочем каталоге; имя файла состоит из "imfile-state:" и уникального суффикса. Параметры загрузки:

Входные параметры input() модуля imfile:

Модуль imjournal принимает структурированные сообщения из базы systemd journald (в новых системах он перехватывает сообщения syslog). Модуль ведёт счётчики статистики для каждого ввода и каждого рабочего потока под именем imjournal: read, submitted, discarded, failed, poll_failed, rotations, recovery_attempts, ratelimit_discarded_in_interval, disk_usage_bytes (появились в версии ? нет в EL7). Параметры загрузки модуля imjournal:

Входные параметры input() модуля imjournal (в версии v8.2102.0 (EL8) недопустим input(), достаточно загрузить модуль; в документации отсутствует параметр Ruleset; отсутствует возможность указать расположение журнала):

Модуль imklog принимает сообщения из журнала ядра. Загрузка модуля активирует его (не нужен input()). Параметры загрузки:

Модуль imkmsg принимает сообщения ядра из структурированного /dev/kmsg ("уровень,номер,отметка-времени;сообщение\n[ключ/значение]...", см. "dd if=/dev/kmsg iflag=nonblock"). Загрузка модуля активирует его (не нужен input()). Несовместим с imklog.

Модуль immark ничего не принимает, а периодически выводит отметки "я ещё жив". Загрузка модуля активирует его (не нужен input()). Параметры загрузки:

Модуль improg принимает сообщения от stdout указанной программы, управление через stdin. Нет в пакете.

Модуль impstats ничего не принимает, а периодически выводит накопленные значения счётчиков, полученные от других модулей в качестве сообщений syslog (syslog.info). В частности, omfile ведёт счётчики статистики кеширования динамических файлов. Также модуль самостоятельно ведёт счётчики статистики использования ресурсов (см. getrusage): utime, stime, maxrss, minflt, majflt, inblock, outblock, nvcsw, nivcsw, openfiles (есть в EL8, нет в EL7). Загрузка модуля активирует его (не нужен input()), обязательно в начале конфигурации. Параметры загрузки:

impstats также выводит счётчики очередей (main Q, очереди наборов правил с указанием имени набора, очереди действий с указанием имени действия):

impstats также выводит счётчики действий (именуйте их, иначе вместо имён будут номера):

impstats позволяет создавать свои счётчики (dyn-stats), сгруппированные в корзины (stats-buckets) командами

impstats позволяет создавать свои процентные счётчики (Percentile Stats), сгруппированные в корзины (percentile-stats) командами

Модуль imptcp принимает сообщения по протоколу TCP (RFC 6587? RFC 5424 с разделителем LF или Octet Counting?) и через Unix сокеты быстро, но без поддержки TLS. Шифрование осуществляется внешними средствами (например, stunnel). Модуль ведёт счётчики статистики (отдельно для каждого источника - "имя-источника(адрес-привязки/порт/IPv4)", имя imptcp, если не указано): submitted. Слишком длинное сообщение обрезается и записывается сообщение об ошибке с указанием начала сообщения и оставшейся длины. Параметры загрузки:

Входные параметры модуля imptcp (параметры input()):

Модуль imtcp принимает сообщения по протоколу TCP (RFC 5425? RFC 6857?). Шифрование осуществляется сетевым потоковым драйвером (network stream driver) или внешними средствами (stunnel), imgssapi включает функциональность imtcp. Модуль ведёт счётчики статистики (отдельно для каждого источника - "имя-источника(порт)", имя imtcp, если не указано): submitted. Параметры загрузки):

Входные параметры модуля imtcp (для input()):

Модуль imudp принимает сообщения по протоколу UDP (RFC 3164). Можно сконфигурировать несколько приёмников с помощью input(). Модуль ведёт счётчики статистики отдельно для каждого потока ("imudp(wНомер)": called.recvmmsg (вызовов recvmmsg()), called.recvmsg (вызовов recvmsg()), msgs.received (полученных сообщений), disallowed (в версии 8.35.0). Модуль ведёт счётчики статистики отдельно для каждого источника (input()) - "имя-источника(адрес:порт)" (imudp, если забыли указать имя): submitted. Параметры загрузки:

Входные параметры модуля imudp:

Модуль imuxsock принимает сообщения через сокеты (не более 50) от syslog(3). Модуль ведёт глобальные счётчики статистики: submitted, ratelimit.discarded и ratelimit.numratelimiters. Параметры загрузки модуля (многие SysSock.* игнорируются при работе с systemd, который самостоятельно читает /dev/log и понравившееся выдаёт в /run/systemd/journal/dev-log (ссылка из /dev/log)):

Входные параметры модуля imuxsock (описание см. в параметрах загрузки):

Модули модификации используются как модули вывода или разбора (изменяют разобранное сообщение перед другими действиями).

Модуль анонимизации IP адресов mmanon заменяет IP адреса в сообщении на поддельные. Входные параметры (параметры action()):

Модуль mmcount позволяет подсчитать количество соответствующих фильтру сообщений. Результат записывается в json элемент mmcount ("$!mmcount"). Входные параметры (параметры action()):

Модуль mmexternal позволяет использовать внешнюю программу для модификации сообщений. Входные параметры (параметры action()):

Модуль mmfields извлекает поля и размещает их в формате CEE/lumberjack (поля именутся как fНомер). Входные параметры (параметры action()):

Модуль mmjsonparse позволяет разобрать структурированные сообщения в формате CEE/lumberjack (CEE cookie).

Модуль mmnormalize (пакет rsyslog-mmnormalize) позволяет использовать liblognorm (/usr/share/doc/liblognorm/html/index.html) для разбора сообщения на пользовательские свойства. Результат нормализации записывается в формате CEE/lumberjack (использовать можно, например, как "%$!hostname%"). Параметр загрузки: allow_regex="off". Входные параметры (параметры action()):

Пример правила из руководства liblognorm:

rule=:%date:date-rfc3164% %host:word% %tag:char-to:\x3a%: no longer listening on %ip:ipv4%#%port:number%

Модуль mmpstrucdata позволяет разобрать структурированные сообщения (sd) в формате RFC 5424. Результат нормализации записывается в формате CEE/lumberjack (например, "%$!hostname%") в корень!rfc5424-sd!имя. Входные параметры (параметры action()):

Модуль mmrfc5424addhmac позволяет добавить HMAC к сообщению (средств проверки не предоставлено).

Модуль mmrm1stspace позволяет удалить первый пробел из msg, если он есть.

Модуль mmutf8fix исправляет ошибки в последовательности UTF-8. Меняет само сообщение, но не меняет разобранные свойства (properties). Входные параметры (параметры action()):

Модули генерации строк вызываются из модулей вывода при использовании шаблонов для оптимизации (5%):

Имеются также библиотечные модули, которые загружаются автоматически и неподвластны пользователю. В документации они не перечислены, но в /usr/lib64/rsyslog/ имеются lmnet.so, lmnetstrms.so, lmnsd_ptcp.so, lmregexp.so, lmtcpclt.so, lmtcpsrv.so и lmzlibw.so.

Пример настройки коллектора в новом формате (клиент должен организовать DA-очередь при посылке сообщений на сервер):

global(workDirectory="/var/log/syslog/work")
global(net.ipprotocol="ipv4-only")
#global(net.enableDNS="off")
global(senders.keepTrack="on")
global(senders.timeoutAfter="604800")
global(senders.reportGoneAway="on")
global(senders.reportNew="on")
$AbortOnUncleanConfig on
timezone(id="MSK" offset="+03:00")
timezone(id="MSD" offset="+03:00")
$LocalHostIPIF bond0

main_queue(queue.type="FixedArray" queue.size="100000")

module(load="impstats")
module(load="pmlastmsg")
parser(name="custom.rfc3164" type="pmrfc3164" detect.YearAfterTimestamp="on")
# The imjournal module bellow is now used as a message source instead of imuxsock.
# imuxsock provides support for local system logging (e.g. via logger command)
module(load="imuxsock") 
module(load="imjournal" StateFile="imjournal.state" Ratelimit.Burst="100000")
#module(load="imklog") # reads kernel messages (the same are read from journald)
#module(load="immark")  # provides --MARK-- message capability
module(load="imudp" TimeRequery="1")
module(load="imptcp")

# шаблон для записи в файл в развёрнутом формате
template(name="SyslogRFC5424explained" type="string" string="%timegenerated:::date-rfc3339% %fromhost-ip% <%syslogfacility-text%:%syslogseverity-text%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% %structured-data% %msg%\n") 

# шаблоны для имён файлов (разделение по типам и хостам)
template (name="DynFile-kern" type="string" string="/var/log/syslog/current/kern/%fromhost%.log")
template (name="DynFile-user" type="string" string="/var/log/syslog/current/user/%fromhost%.log")
template (name="DynFile-mail" type="string" string="/var/log/syslog/current/mail/%fromhost%.log")
template (name="DynFile-daemon" type="string" string="/var/log/syslog/current/daemon/%fromhost%.log")
template (name="DynFile-secure" type="string" string="/var/log/syslog/current/secure/%fromhost%.log")
template (name="DynFile-ftp" type="string" string="/var/log/syslog/current/ftp/%fromhost%.log")
template (name="DynFile-cron" type="string" string="/var/log/syslog/current/cron/%fromhost%.log")
template (name="DynFile-news" type="string" string="/var/log/syslog/current/news/%fromhost%.log")
template (name="DynFile-uucp" type="string" string="/var/log/syslog/current/uucp/%fromhost%.log")
template (name="DynFile-syslog" type="string" string="/var/log/syslog/current/syslog/%fromhost%.log")
template (name="DynFile-lpr" type="string" string="/var/log/syslog/current/lpr/%fromhost%.log")
template (name="DynFile-ntp" type="string" string="/var/log/syslog/current/ntp/%fromhost%.log")
template (name="DynFile-unknown" type="string" string="/var/log/syslog/current/unknown/%fromhost%.log")
template (name="DynFile-by-host" type="string" string="/var/log/syslog/current/host/%fromhost%.log")
template (name="DynFile-routers" type="string" string="/var/log/syslog/current/routers/%fromhost%.log")
template (name="DynFile-dns" type="string" string="/var/log/syslog/current/dns/%fromhost%.log")
template (name="DynFile-samba" type="string" string="/var/log/syslog/current/samba/%fromhost%.log")
template (name="DynFile-ldap" type="string" string="/var/log/syslog/current/ldap/%fromhost%.log")
template (name="DynFile-squid" type="string" string="/var/log/syslog/current/squid/%fromhost%.log")
template (name="DynFile-jabber" type="string" string="/var/log/syslog/current/jabber/%fromhost%.log")
template (name="DynFile-ups" type="string" string="/var/log/syslog/current/ups/%fromhost%.log")
template (name="DynFile-boot" type="string" string="/var/log/syslog/current/boot/%fromhost%.log")
template (name="DynFile-systemd" type="string" string="/var/log/syslog/current/systemd/%fromhost%.log")
template (name="DynFile-hardware" type="string" string="/var/log/syslog/current/hardware/%fromhost%.log")
template (name="DynFile-backup" type="string" string="/var/log/syslog/current/backup/%fromhost%.log")

ruleset(name="common") {
  action(type="omfile" dynaFile="DynFile-by-host" dynaFileCacheSize="300" Template="SyslogRFC5424explained")
  if $syslogfacility-text == "kern"
  then { 
    action(type="omfile" dynaFile="DynFile-kern" dynaFileCacheSize="100" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/kern.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "user"
  then {
    action(type="omfile" dynaFile="DynFile-user" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/user.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "mail"
  then {
    action(type="omfile" dynaFile="DynFile-mail" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/mail.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "daemon"
  then {
    if $app-name == "ntpdate"
    then {
      action(type="omfile" dynaFile="DynFile-ntp" dynaFileCacheSize="100" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/ntp.log" Template="SyslogRFC5424explained")
    } else if $app-name == "systemd"
    then {
      action(type="omfile" dynaFile="DynFile-systemd" dynaFileCacheSize="100" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/systemd.log" Template="SyslogRFC5424explained")
    } else if $app-name == "rsyncd"
    then {
      action(type="omfile" dynaFile="DynFile-backup" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/backup.log" Template="SyslogRFC5424explained")
    } else if $app-name == "bacula-dir"
    then {
      action(type="omfile" dynaFile="DynFile-backup" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/backup.log" Template="SyslogRFC5424explained")
    } else if $app-name == "bacula-fd"
    then {
      action(type="omfile" dynaFile="DynFile-backup" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/backup.log" Template="SyslogRFC5424explained")
    } else if $app-name == "chronyd"
    then {
      action(type="omfile" dynaFile="DynFile-ntp" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/ntp.log" Template="SyslogRFC5424explained")
    } else if $app-name == "ntpd"
    then {
      action(type="omfile" dynaFile="DynFile-ntp" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/ntp.log" Template="SyslogRFC5424explained")
    } else if $app-name == "smartd"
    then {
      action(type="omfile" dynaFile="DynFile-hardware" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/hardware.log" Template="SyslogRFC5424explained")
    } else if $app-name == "mcelog"
    then {
      action(type="omfile" dynaFile="DynFile-hardware" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/hardware.log" Template="SyslogRFC5424explained")
    } else if $app-name == "crond"
    then {
      action(type="omfile" dynaFile="DynFile-cron" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/cron.log" Template="SyslogRFC5424explained")
    } else {
      action(type="omfile" dynaFile="DynFile-daemon" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/daemon.log" Template="SyslogRFC5424explained")
    }
  } else if ($syslogfacility-text == "auth" or $syslogfacility-text == "authpriv")
  then {
    action(type="omfile" dynaFile="DynFile-secure" dynaFileCacheSize="300" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/secure.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "syslog"
  then {
    action(type="omfile" dynaFile="DynFile-syslog" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/syslog.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "lpr"
  then {
    action(type="omfile" dynaFile="DynFile-lpr" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/lpr.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "news"
  then {
    action(type="omfile" dynaFile="DynFile-news" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/news.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "uucp"
  then {
    action(type="omfile" dynaFile="DynFile-uucp" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/uucp.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "cron"
  then {
    action(type="omfile" dynaFile="DynFile-cron" dynaFileCacheSize="300" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/cron.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "ftp"
  then {
    action(type="omfile" dynaFile="DynFile-ftp" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/ftp.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "ntp"
  then {
    action(type="omfile" dynaFile="DynFile-ntp" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/ntp.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility == "13"
  then {
    action(type="omfile" dynaFile="DynFile-unknown" Template="SyslogRFC5424explained")
  } else if $syslogfacility == "14"
  then {
    action(type="omfile" dynaFile="DynFile-unknown" Template="SyslogRFC5424explained")
  } else if $syslogfacility == "15"
  then {
    action(type="omfile" dynaFile="DynFile-unknown" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "local0"
  then {
    action(type="omfile" dynaFile="DynFile-routers" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/routers.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "local1"
  then {
    action(type="omfile" dynaFile="DynFile-dns" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/dns.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "local2"
  then {
    action(type="omfile" dynaFile="DynFile-samba" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/samba.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "local3"
  then {
    action(type="omfile" dynaFile="DynFile-ldap" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/ldap.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "local4"
  then {
    action(type="omfile" dynaFile="DynFile-squid" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/squid.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "local5"
  then {
    action(type="omfile" dynaFile="DynFile-jabber" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/jabber.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "local6"
  then {
    action(type="omfile" dynaFile="DynFile-ups" Template="SyslogRFC5424explained")
    action(type="omfile" file="/var/log/syslog/current/ups.log" Template="SyslogRFC5424explained")
  } else if $syslogfacility-text == "local7"
  then {
# некоторые модели коммутаторов не позволяют настраивать facility и сыплют в local7
    if ($fromhost-ip == '192.168.173.35') or ($fromhost-ip == '192.168.173.36') or ($fromhost-ip == '192.168.173.37') or ($fromhost-ip == '192.168.173.38') or ($fromhost-ip == '192.168.173.39') or ($fromhost-ip == '192.168.173.40') or ($fromhost-ip == '192.168.173.237') or ($fromhost-ip == '192.168.174.6')
    then {
      action(type="omfile" dynaFile="DynFile-routers" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/routers.log" Template="SyslogRFC5424explained")
    } else {
      action(type="omfile" dynaFile="DynFile-boot" Template="SyslogRFC5424explained")
      action(type="omfile" file="/var/log/syslog/current/boot.log" Template="SyslogRFC5424explained")
    }
  } else {
    action(type="omfile" dynaFile="DynFile-unknown" Template="SyslogRFC5424explained")
  }
#  action(type="omfile" file="/var/log/syslog/all" Template="RSYSLOG_SyslogProtocol23Format")
  action(type="omfile" file="/var/log/syslog/alltext" Template="SyslogRFC5424explained")
#  if $fromhost-ip == '127.0.0.1' then {
  if $fromhost-ip == '192.168.152.24' then {
# локальные сообщения на дублирующий сервер
    action(type="omfwd" template="RSYSLOG_SyslogProtocol23Format" Target="syslog2.cs.niisi.ras.ru" Protocol="tcp" Port="514")
    if $syslogfacility-text == "authpriv" then {
      action(type="omfile" file="/var/log/secure" Template="RSYSLOG_TraditionalFileFormat")
    } else {
      if $syslogfacility-text == "mail" then {
        action(type="omfile" file="/var/log/maillog" Template="RSYSLOG_TraditionalFileFormat")
      } else {
        if $syslogfacility-text == "cron" then {
          action(type="omfile" file="/var/log/cron" Template="RSYSLOG_TraditionalFileFormat")
        } else {
          action(type="omfile" file="/var/log/messages" Template="RSYSLOG_TraditionalFileFormat")
        }
      }
    }
  }
}
ruleset(name="rule3164" parser=["rsyslog.lastline","custom.rfc3164"]) {
  call common
}
ruleset(name="rule5424" parser=["rsyslog.lastline","rsyslog.rfc5424","custom.rfc3164"]) {
  call common
}
$DefaultRuleset rule5424

input(type="imuxsock" UsePIDFromSystem="on" Socket="/run/systemd/journal/syslog" Unlink="off")
input(type="imudp" Name="udp3164" Address="grid0024.cs.niisi.ras.ru" Port="514" DefaultTZ="+03:00" Ruleset="rule3164")
#input(type="imptcp" Name="tcp6857" Address="grid0024.cs.niisi.ras.ru" Port="514" DefaultTZ="+03:00" NotifyOnConnectionClose="on" NotifyOnConnectionOpen="on" Ruleset="rule5424")
input(type="imptcp" Name="tcp6857" Address="grid0024.cs.niisi.ras.ru" Port="514" DefaultTZ="+03:00" NotifyOnConnectionClose="on" Ruleset="rule5424")

Архитектура (v.5)

Имеет модульную структуру (загрузка модулей производится директивой "$ModLoad имя-модуля"):

Между модулем ввода (imtcp) и подлежащим транспортным уровнем можно поместить драйвер потока (Network Stream Drivers), который обеспечивает последовательность, аутентификацию и секретность:

Используемые файлы:

Реакция на сигналы:

В отличие от sysklogd синхронизация выключена по умолчанию. Формат временных отметок при записи в файл по умолчанию изменён. При передаче сообщений на удалённый сервер они предваряются именем хоста (как это обрабатывается logwatch?!), рекомендуется обеспечить совместимость следующим образом:

$template sysklogd,"<%PRI%>%TIMESTAMP% %syslogtag%%msg%"
*.* @192.168.0.1;sysklogd

Принимаемые сообщения могут складываться в главную очередь сообщений (MainMsg, параметры собираются по всему файлу настройки) перед обработкой правил (есть и другие очереди перед каждым действием - Action, отдельная очередь для каждого действия, параметры должны быть определены до описания действия). Типы очередей (QueueType):

Количество потоков обработки очереди выбирается автоматически в зависимости от заполнения очереди (QueueWorkerThreadMinimumMessages, QueueWorkerThreads). Ненужные более потоки уничтожаются при истечении времени неактивности (QueueWorkerTimeoutShutdown). При катастрофическом переполнении очереди (QueueDiscardMark) менее приоритетные сообщения (QueueDiscardSeverity) выкидываются. При длительном переполнении очереди приём новых сообщений останавливается полностью (QueueTimeoutEnqueue) и все входящие сообщения могут выкидываться. Скорость обработки можно замедлять паузами между обработкой сообщений (QueueDequeueSlowdown).

Не меняет права доступа к имеющимся файлам.

Ключи запуска (v5)

Ключи запуска (/etc/sysconfig/rsyslog, /etc/rc.d/init.d/rsyslog):

Настройка rsyslog.conf (версия 5)

Файл представляет собой набор общих директив, директив модулей и правил маршрутизации сообщений. Комментарии начинаются с символа '#'. Обратная косая черта в конце строки означает продолжение правила на следующей строке. Максимальная длина строки - 4KB. Директивы начинаются с символа '$'.

Общие директивы (параметры, описывающие действие должны быть до активизации действия; при задании размера можно использовать суффиксы: k, m, g, t (двоичные) и K, M, G, T (десятичные)):

Директивы модуля imudp:

Директивы модуля imtcp (возможно шифрование и аутентификация с помощью stunnel, gtls или imgssapi):

Директивы модуля imklog:

Директивы модуля immark:

Директивы модуля imuxsock:

Директивы модуля imfile (каждая строка считается сообщением, файл может быть динамически дополняться и подменяться (ротация), можно мониторить до 100 файлов):

Директивы модуля imrelp

Директивы модуля ommail (аутентификация SMTP не поддерживается, вызывается в форме: ":ommail:;имя-шаблона-для-тела-письма", рекомендуется фильтровать сообщения и использовать $ActionExecOnlyOnceEveryInterval):

Директивы модуля omsnmp (версии протокола SNMP - SNMPv1 и SNMPv2c, сообщение заворачивается в OCTED STRING, вызывается в форме: ":omsnmp:"):

Директивы модуля ommysql (при вызове ":ommysql:имя-сервера,имя-БД,имя-пользователя,пароль[;имя-шаблона]" выполняется SELECT с подставленным значением шаблона):

Директивы модуля omlibdbi (при вызове ":omlibdbi:[;имя-шаблона]" выполняется SELECT с подставленным значением шаблона):

Директивы модуля omrelp (при вызове использовать :omrelp:имя-сервера:порт;имя-шаблона)

Каждое правило маршрутизации состоит из селектора и действия, которые разделяются табуляциями или пробелами. Каждое сообщение из главной (входной) очереди проверяется селектором каждого правила. Если подходит, то выполняется указанное в правиле действие. Для одного сообщения м.б. выполнено произвольное количество действий (т.е. обработка сообщения не прекращается при первом успехе). Перед действием отфильтрованные сообщения преобразуются с использованием шаблона вывода (либо шаблона по умолчанию, указанного в директиве, либо явно указанного по имени через точку с запятой после описания действия). Шаблон также может использоваться для генерации самого текста действия с указанием символа '?' перед именем шаблона. Шаблон должен быть определён до использования, иначе селектор будет проигнорирован.

Встроенные шаблоны:

Описание шаблона заключается в кавычки. Обратная косая черта обеспечивает специальное действие следующего символа вида \7 или \n. Текст описания шаблона выводится в результат как есть, кроме переменных (property replacer), заключённых в знаки процента. Внутри знаков процента после имени переменной могут идти начальная и конечная позиция и опции, разделённый двоеточиями. Имена переменных:

Простейший шаблон для использования с модулем ommysql (однако, рекомендуется использовать встроенную схему, совместимую с phpLogCon, createDB.sql):

"insert into syslog(message) values ('%msg%')"

Использование начальной и конечной позиции позволяет выделять подстроку. Нумерация символов начинается с 1. Символ "$" означает конец строки. Если в качестве начальной позиции указать символ "R", то конечная позиция должна содержать регулярное выражение. В конце регулярного выражения необходимо дописать "--end". Имеются модификаторы типа регулярного выражения и что делать при отсутствии совпадения, подробности в документации (property_replacer.html). Если в качестве начальной позиции указать символ "F", то конечная позиция должна содержать номер требуемого поля (нумеруются с 1, разделителем по умолчанию является символ табуляции, можно изменить указав после символа "F" запятую и десятичное значение символя-разделителя. Тема UNICODE не раскрыта.

Опции позволяют форматировать результат обработки шаблона специальным образом (можно указать несколько опций, разделяя их запятыми):

Селектор состоит из двух частей, разделенных точкой: источник сообщения и уровень серьезности. Прописные и строчные буквы не различаются. Можно также использовать числа (см. /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 и восклицательный знак), то логическое И.

В качестве действия можно указывать:

Правила маршрутизации могут быть выделены в блоки, предварительно отфильтровывающие неподходящие сообщения на основе имени выдавшей сообщения программы и имени хоста, для этого в качестве селектора указывается (мутно описано и реализовано, не советую использовать):

В качестве селектора можно использовать значения переменных (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

Отличия 7.4.10 от 5.8.13

Отличия 8.24 (RHEL7) от 7.4.10

Отличия 8.38 от 8.24 (RHEL7)

Отличия 8.1901.0 от 8.38

Отличия 8.2102.0 (RHEL8) от 8.1901.0

Отличия 8.2310.0 (RHEL9) от 8.2102.0 (RHEL8)

Отличия от 8.2410 от 8.2310.0 (RHEL9)

Ссылки

@ Карта сайта News Автора!

Bog BOS: rsyslog - сервер syslog

apache inn MySQL nntpcache Cyrus IMAP exim Squid ssh syslog tacacs ProFTPD wu-ftpd xntpd

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru