Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 и РУСБ.10015-10  (очередное обновление 1.7)
  • Astra Linux Special Edition РУСБ.10015-37  (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12

В Astra Linux Special Edition очередное обновление x.7 рекомендована к применению служба ведения журналов syslog-ng. В более ранних очередных обновлениях Astra Linux по умолчанию используется служба rsyslog. Служба syslog-ng:

  • устанавливается по умолчанию при установке оперативных обновлений Astra Linux x.7;
  • при установке замещает собой службу rsyslog. Служба rsyslog при этом полностью удаляется.

Дальнейшее использование службы rsyslog не соответствует поддерживаемым сценариям эксплуатации. Служба rsyslog более не поддерживается в составе основного репозитория Astra Linux Special Edition (доступна в составе расширенного репозитория). В находящихся в эксплуатации системах службу rsyslog необходимо заменить на службу syslog-ng.

Службы управления журналами

  • syslog-ng - служба управления журналами syslog-ng по умолчанию используется в Astra Linux Special Edition x.7, доступна в репозиториях более ранних очередных обновлений;

  • rsyslog - служба управления журналами rsyslog по умолчанию используется в Astra Linux Common Edition и Astra Linux Special Edition ранее очередного обновления x.7, доступна в основном репозитории Astra Linux Special Edition x.7;

  • syslog (sysklogd) - служба управления журналами syslog в настоящее время в Astra Linux не используется;
  • logrotate - служба архивирования и очистки (ротации) журналов.

Основные возможности служб:

  • получение и передача сообщение по сетевым протоколам TCP/UDP/... с возможностью настройки IP-портов и IP-адресов;
  • загрузка внешних модулей;
  • фильтрация и перенаправление сообщений по имени программы, источнику, номеру процесса и т.д.;
  • удаление ненужных сообщений;

Служба syslog-ng

Расположение файлов конфигурации

  • основной файл конфигурации: /etc/syslog-ng/syslog-ng.conf;
  • дополнительные файлы конфигурации — файлы с расширением .conf в каталоге /etc/syslog-ng/conf.d.

Базовые принципы функционирования

Служба syslog-ng получает системные сообщения из указанных источников и перенаправляет их в указанные приемники. Источниками могут быть файлы, удаленные хосты, системные сокеты и другие объекты. Источники и приемники являются независимыми объектами и соединяются путями передачи (далее - путь). Путь состоит из одного или нескольких источников и одного или нескольких приемников. Дополнительно определение пути может содержать:

  • фильтры — правила, применяемые для селекции сообщений;
  • анализаторы (parsers) — правила для анализа и разбора сообщений;
  • модификаторы (rewriting rules) — правила для модификации сообщений.

Базовые принципы внесения изменений в конфигурацию

  1. Для проверки корректности конфигурации следует после сохранения изменений выполнять проверку с помощью команды:

    sudo syslog-ng -sv

  2. Не допускается удалять (отключать, превращая в комментарии) инструкции включения содержимого других файлов (инструкции include), источники и фильтры, предоставляемые по умолчанию. Изменения в стандартную обработку журналов следует вносить путем редактирования цепочек log {}.

Конфигурационный файл состоит из определений объектов. Базовый синтаксис определения объекта:

<тип_объекта> <идентификатор_объекта> { <параметр>(<опция> ..., ...) ...; ... };

где:

  • тип объекта - один из типов:
    • source - источник;
    • destination - приемник;
    • log - путь;
    • filter - фильтр;
    • parser - анализатор;
    • rewrite rule - модификатор;
    • template - шаблон;
    • option - глобальные опции.
  • Идентификатор объекта - уникальное имя, определяющее объект. Имена регистр-зависимые. Имена, совпадающие с зарезервированными словами должны заключаться в кавычки. Рекомендуется использовать имена с префиксами, указывающими на тип объекта, например, префикс "s_" для источников, префикс "d_" для приемников и т.д. Повторное определение объектов не допускается если не задан параметр @define allow-config-dups 1;
  • Параметр - список параметров объекта, заключенный в фигурные скобки. Параметры разделяются символом "точка с запятой".
  • Опция - модификаторы параметров;
  • Определение объекта завершается символом "точка с запятой".

Пример: определение объекта типа источник и именем s_internal:

source s_internal { internal(); };

Пример: определение объекта типа приемник:

destination d_net { tcp("127.0.0.1" port(1000) log_fifo_size(1000)); };
Для приемника определен параметр tcp c тремя опциями - IP-адрес, IP-порт и размер буфера.

Далее на определенные объекты можно ссылаться по его идентификатору, например в определении объекта "путь":

log { source(s_internal); destination(d_net); };

Параметры объектов могут иметь обязательные и необязательные опции. Обязательные опции являются позиционными и должны быть указаны в заданном порядке. Необязательные опции имеют формат
<имя>(<значение>) и могут указываться в любом порядке.

Пример: Источник s_demo_stream имеет один параметр - драйвер источника unix-stream(), который имеет одну обязательную опцию - имя сокета, и необязательные опции - max_connection и group:

source s_demo_stream1 { unix-stream("<path-to-socket>" max-connections(10) group(log)); };
  • Объекты могут использоваться до их определения;
  • Объекты могут определяться при их использовании (inline), что полезно при однократном применении, например, фильтров;
  • Строки, начинающиеся с символа "#" считаются комментариями и игнорируются;

Синтаксис определения пути:

log {
 source(s1); source(s2); ...
 optional_element(filter1|parser1|rewrite1);
 optional_element(filter2|parser2|rewrite2);
 ...
 destination(d1); destination(d2); ...
 flags(flag1[, flag2...]);
};

Пример определения источника, приемника и простого пути:

source s_localhost {
    network(ip(127.0.0.1) port(1999));
};
destination d_tcp {
    network("10.1.2.3" port(1999) localport(999));
};
log {
    source(s_localhost);
    destination(d_tcp);
};

Тот же пример определения простого пути с использованием inline-определений источника и приемника:

log {
    source {
        network(ip(127.0.0.1) port(1999));
    };
    destination {
        network("10.1.2.3" port(1999) localport(999));
    };
};

В конфигурации syslog-ng поддерживаются глобальные опции для управления использование DNS, форматами временных отметок и других общих параметров. Синтаксис определения опций:

options { option1(params); option2(params); ... };

Пример применения глобальных опций:

Отключения разрешения имен через DNS:

options { use-dns(no); };

Перечень основных источников, приемников и фильтров:

Таблица 1. Драйверы источников

НазваниеОписаниеКомментарий
file()Получение сообщений из указанного файла.
internal()Сообщения, генерируемые службой syslog-ng.      
network()

Прием сообщений от удаленного хоста по протоколу BSD-syslog в сетях IPv4 и IPv6. Поддерживает сетевые протоколы TCP, UDP и TLS..


pipe()Чтение сообщений из указанного именованного потока.
program()Запуск указанного приложения и чтение сообщений из его стандартного вывода.
sun-stream()
sun-streams()
Чтение указанного устройства STREAMS (только в системах Solaris).
syslog()Прием сообщений по протоколу IETF-syslog.
system()Автоматическое определение платформы и сбор стандартных для этой платформы журналов.
systemd-journal()Прямое получение сообщений от служб журналов на платформах, использующих systemd.
systemd-syslog()Получение сообщений через сокет от служб журналов на платформах, использующих systemd.
unix-dgram()Получение сообщений через указанный сокет SOCK_DGRAM.
unix-stream()Получение сообщений через указанный сокет SOCK_STREAM.

Таблица 2. Драйверы приемников

НазваниеОписаниеКомментарий
elasticsearch
elasticsearch2

Отправка сообщений на сервер Elasticsearch. Вариант драйвера elasticsearch2 поддерживает Elasticsearch версия 2 и новее.


file() Запись сообщений в указанный файл.
hdfs()Запись сообщений в указанный файл на узле Hadoop Distributed File System (HDFS).
kafka()Публикация сообщений подписчикам через шину Apache Kafka.
loggly()Отправка сообщения провайдеру Loggly (https://www.loggly.com/).
logmatic()Отправка сообщения провайдеру Logmatic.io (https://logmatic.io/).
mongodb()Сохранение сообщений в СУБД MongoDB.
network()Отправка сообщений на удаленный хост по протоколу BSD через сети IPv4 IPv6. Поддерживает сетевые протоколы TCP, UDP и TLS.
pipe()Запись сообщений в указанный именованный поток.
program()Запуск указанной программы и отправка сообщений на ее стандартный ввод.
sql()Сохранение сообщений в СУБД SQL. Требует установки и настройки СУБД.
syslog()Отправка сообщений на удаленный хост по протоколу IETF-syslog protocol. Поддерживает сетевые протоколы TCP, UDP и TLS.
unix-dgram()Отправка сообщений в формате BSD через указанный сокет SOCK_DGRAM.
unix-stream()Отправка сообщений в формате Linux через указанный сокет SOCK_STREAM.
usertty()Отправка сообщений на терминал указанного пользователя если сессия пользователя активна.

Таблица 3. Доступные фильтры.

НазваниеОписаниеКомментарий
facility() Фильтрация сообщений по указанному объекту (facility).
filter()Вызов другого фильтра.
host()Фильтрация сообщений по имени хоста-отправителя.
inlist()Фильтрация сообщений по черным и белым спискам в файлах.
level()
priority()
Фильтрация сообщений по приоритету.
match()Фильтрация по регулярным выражениям, применяемым к заголовку и содержимому сообщения.
message() Фильтрация по регулярным выражениям, применяемым к содержимому сообщения.
netmask()Фильтрация сообщений по IP-адресу хоста-отправителя.
program()Фильтрация сообщений по названию приложения.
source()Фильтрация сообщений по указанному источнику.
tags()Фильтрация сообщений по наличию указанных тегов.

Настройки сервера syslog-ng для приема событий от удаленных источников, настроенных через fly-admin-events

Определение источника:

source remote_events_src {
    network(port(2222) transport(tcp) flags(syslog-protocol));
};

Конфигурация приемника для записи в защищенный журнал событий:

destination astra_remote_events_dst {
    file("/parsec/log/astra/events"
         template("${MESSAGE}\n")
         group("astra-admin")
         hook-commands(
             setup("/usr/bin/astra-protect-event-log")
         )
         overwrite-if-older(2678400)
         persist-name("remote"));
};

Конфигурация приемника для записи в не защищенный журнал событий

destination astra_unprotect_remote_events_dst {
    file("/parsec/log/astra/remote_events" template("${MESSAGE}\n"));
}

Журнал:


log {
    source(remote_events_src);
    destination(astra_remote_events_dst);
};

Служба rsyslog

Расположение файлов конфигурации

  • основной файл /etc/rsyslog.conf/;
  • дополнительные файлы .conf в каталоге /etc/rsyslog.d;

См. man rsyslog.conf

Служба logrotate

Расположение файлов конфигурации

  • основной файл /etc/logrotate.conf;
  • дополнительные файлы .conf /etc/logrotate.d;

Настройки по умолчанию (основной файл конфигурации /etc/logrotate.conf):

  • weekly - файлы журналов подвергаются ротации, если текущий день недели меньше дня недели последней ротации или если со времени последней ротации прошло больше недели;
  • rotate <количество> - файлы журнала ротируются указанное количество раз перед тем, как будут  удалены или  отправлены  на  адрес,  указанный  в директиве mail. Если количество равно нулю, прежние версии удаляются, а не ротируются. Количество по умолчанию - 4;
  • create <режим> <владелец> <группа> - сразу  после  ротации  (до запуска сценария postrotate) создать файл журнала (с таким же именем, как у только  что  ротированного  файл  журнала).  Поле  режим определяет  режим  для  файла  журнала  в  восьмеричном  представлении  (как  в chmod(2)),  поле  владелец  определяет  имя   пользователя   который   является владельцем  этого  файла  журнала,  и  поле  группа  определяет группу, которой              принадлежит файл журнала. Любой из этих атрибутов может быть пропущен, в  таком случае  для пропущенных атрибутов будут использоваться атрибуты исходного файла журнала. Эта опция может быть отключена с помощью опции nocreate;

Подробное описание см. man logrotate.

Взаимная замена служб rsyslog/syslog-ng

Замена пакетов

B Astra Linux Special Edition x.7 служба rsyslog не поддерживается. Если служба rsyslog была установлена ранее, то для замены службы rsyslog на службу syslog-ng выполнить команду:

sudo apt install syslog-ng
При выполнении указанной команды будут произведены следующие действия:

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

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

Миграция конфигурационных файлов

Для сохранения параметров записи журналов при замене служб необходимо обеспечить для новой службы наличие конфигурационных файлов, аналогичных конфигурационным файлам заменяемой службы. В состав некоторых пакетов входят конфигурационные файлы для какой-либо службы управления журналами. Для таких пакетов, по мере их выявления, в Astra Linux создаются и включаются в состав пакетов аналогичные альтернативные конфигурации для другой службы.

Для проверки синтаксической корректности конфигурационных файлов службы syslog-ng можно использовать команду:

sudo syslog-ng -s


Далее в качестве примера приведено соответствие конфигураций rsyslog и syslog-ng некоторых пакетов. :

Конфигурация rsyslogКонфигурация syslog-ng
/etc/rsyslog.d/21-cloudinit.conf/etc/syslog-ng/conf.d/21-cloudinit.conf
# Log cloudinit generated log messages to file
:syslogtag, isequal, "[CLOUDINIT]" /var/log/cloud-init.log

# comment out the following line to allow CLOUDINIT messages through.
# Doing so means you'll also get CLOUDINIT messages in /var/log/syslog
& stop
log {
    source(s_src);
    filter { message("^.*CLOUDINIT.*$"); };
    destination { file("/var/log/cloud-init.log"); };
    flags( final);
};
/etc/rsyslog.d/49-haproxy.conf/etc/rsyslog-ng/conf.d/49-haproxy.conf
# Create an additional socket in haproxy's chroot in order to allow logging via
# /dev/log to chroot'ed HAProxy processes
$AddUnixListenSocket /var/lib/haproxy/dev/log

# Send HAProxy messages to a dedicated logfile
:programname, startswith, "haproxy" {
  /var/log/haproxy.log
  stop
}
log {
    source { unix-dgram("/var/lib/haproxy/dev/log"); };
    filter { program("haproxy"); };
    destination { file("/var/log/haproxy.log"); };
	flags( final);
};
/etc/rsyslog.d/20-ufw.conf/etc/rsyslog-ng/conf.d/20-ufw.conf
# Log kernel generated UFW log messages to file
:msg,contains,"[UFW " /var/log/ufw.log

# Uncomment the following to stop logging anything that matches the last rule.
# Doing this will stop logging kernel generated UFW log messages to the file
# normally containing kern.* messages (eg, /var/log/kern.log)
#& stop
log {
    source(s_src);
    filter { message("^.*UFW.*$"); };
    destination { file("/var/log/ufw.log"); };
#    flags( final);
};
/etc/rsyslog.d/jetty9.conf/etc/rsyslog-ng/conf.d/jetty9.conf
# Send Jetty messages to jetty.out when using systemd

:programname, startswith, "jetty9" {
  /var/log/jetty9/jetty-console.log
  stop
}
log {
    source(s_src);
    filter { program("jetty9"); };
    destination { file("/var/log/jetty9/jetty-console.log"); };
    flags( final);	
};
/etc/rsyslog.d/postfix.conf/etc/rsyslog-ng/conf.d/postfix.conf
# Create an additional socket in postfix's chroot in order not to break
# mail logging when rsyslog is restarted.  If the directory is missing,
# rsyslog will silently skip creating the socket.
$AddUnixListenSocket /var/spool/postfix/dev/log
log {
    source { unix-stream("/var/spool/postfix/dev/log" keep-alive(yes)); };
    filter { program("postfix"); };
    destination(d_syslog);
};
/etc/rsyslog.d/tomcat9.conf/etc/rsyslog-ng/conf.d/tomcat9.conf
# Send Tomcat messages to catalina.out when using systemd
$template TomcatFormat,
    "[%timegenerated:::date-year%-
      %timegenerated:::date-month%-
      %timegenerated:::date-day% 
      %timegenerated:::date-hour%:
      %timegenerated:::date-minute%:
      %timegenerated:::date-second%]
     [%syslogseverity-text%]%msg%\n"
:programname, startswith, "tomcat9" {
  /var/log/tomcat9/catalina.out;TomcatFormat
  stop
}
log {
    source(s_src);
    filter { program("tomcat9"); };
    destination {
        file("/var/log/tomcat9/catalina.out",
        template("[$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC] [$PRIORITY]$MSG\n"));
    };
    flags( final);
};

Инструмент сбора журналов astra-create-debug-logs

В состав дистрибутивов ОС Astra Linux входит инструмент командной строки astra-create-debug-logs, предназначенный для автоматического сбора архива журналов системных служб.
Для создания архива журналов инструмент должен быть запущен от имени суперпользователя:

sudo astra-create-debug-logs
Файл с архивом журналов создаётся в каталоге /tmp/.

Расположение файлов журналов основных системных служб

Для справки в таблице ниже приведено расположение файлов журналов некоторых наиболее часто используемых служб:

СлужбаПуть к файлу журнала или каталогу с файлами журналов
WEB-сервер Apache2/var/log/apache2/
Система управления печатью Cups/var/log/cups/
Почтовый сервер IMAP/Pop3 Dovecot

Необходимо включить запись в журнал в конфигурационном файле /etc/dovecot/conf.d/10-logging.conf в параметре log_path.
Например, указать: /var/log/dovecot.log

Почтовый агент Exim4/var/log/exim4/
Системный журнал Syslog/var/log/syslog*
Samba/var/log/samba/
X server/var/log/Xorg.*.log

СУБД PostgreSQL

/var/lib/postgres/<версия>/<кластер>/pg_log
Журнал сообщений ядра/var/log/kern.log
Журнал доменной службы ALD/var/log/ald/
Двоичные файлы parsec аудита/var/log/parsec/
Система контроля целостности файлов afick/var/log/afick/
Сервер FTP Vsftpd/var/log/vsftpd.log.*