Bug 36454 - 3.20.1-alt4 не работает при запущенном systemd
Summary: 3.20.1-alt4 не работает при запущенном systemd
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: syslog-ng (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Sergey Y. Afonin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-03-29 22:44 MSK by Sergey Y. Afonin
Modified: 2019-11-04 10:57 MSK (History)
3 users (show)

See Also:


Attachments
для правильного %def_disable systemd (1.14 KB, patch)
2019-03-30 00:12 MSK, Sergey Y. Afonin
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Sergey Y. Afonin 2019-03-29 22:44:47 MSK
Был такой баг: Bug 31799 - systemd compability and syslog-common dependency

Добрался я до установки нового syslog-ng в систему с systemd, и что-то у меня не особо работает, как хотелось бы. Пробую, правда, в p8 пока.

Есть syslog-ng 3.20.1-alt4 из задания 224120 (бакпорт в p8), и что-то я не вижу логов. Запущен процесс 

/sbin/syslog-ng -F --pidfile /var/run/syslog-ng.pid

но в логах тишина. Если, скажем, logger "test" написать. Если поставить syslog-ng 3.8.1-alt1 (где про systemd ещё ничего не было), то всё работает. Эксперимент весь, как написал уже, в p8. В /etc/systemd/journald.conf написано

Storage=none
ForwardToSyslog=yes

Вешаю не на себя пока, так как с systemd всё ещё не очень готов связываться. И ещё момент. В init-скрипте при рестарте делается проверка конфига и рестрт не выполняется, если что-то пошло не так:

do_config_sanity_check()
{
        action "Checking syslog-ng configuration:" "$DAEMON" -s || exit
}

restart()
{
        do_config_sanity_check
        stop
        start
}

В unit-файле это как-то можно сделать?
Comment 1 Sergey Y. Afonin 2019-03-30 00:12:01 MSK
Created attachment 8062 [details]
для правильного %def_disable systemd

Начинает работать, как надо, если собрать с %def_disable systemd (без libsystemd-devel то есть), только там всё равно unit-файл пакуется, и работает как-то не так:

# service syslog-ng restart
Job for syslog-ng.service failed because a timeout was exceeded.
See "systemctl status syslog-ng.service" and "journalctl -xe" for details.

Для %def_disable systemd надо этот патчик добавить.
Comment 2 Alexey Shabalin 2019-03-30 01:35:46 MSK
(В ответ на комментарий №1)
> Created an attachment (id=8062) [details]
> для правильного %def_disable systemd
> 
> Начинает работать, как надо, если собрать с %def_disable systemd (без
> libsystemd-devel то есть), только там всё равно unit-файл пакуется, и работает
> как-то не так:
> 
> # service syslog-ng restart
> Job for syslog-ng.service failed because a timeout was exceeded.
> See "systemctl status syslog-ng.service" and "journalctl -xe" for details.
> 
> Для %def_disable systemd надо этот патчик добавить.

У меня ощущение, что Вы делаете что-то совсем не правильно.
Comment 3 Sergey Y. Afonin 2019-03-30 09:23:30 MSK
(In reply to comment #2)

> У меня ощущение, что Вы делаете что-то совсем не правильно.

Хотелось бы понять, что именно. Вроде всё просто - включил у journal вывод в syslog, запустил syslog-ng. Собранный без libsystemd-devel работает, как ожидалось, а вот собранный с libsystemd-devel пишет в лог только свои сообщения, статистику например. Может, конечно, это у самого syslog-ng что-то как-то так задумано, но в документации пока ничего особенного про какие-нибудь опции, связанные с systemd, не увидел. Спрошу ещё в рассылке балабитовской.
Comment 4 Sergey Y. Afonin 2019-03-30 09:33:24 MSK
(In reply to comment #0)

> И ещё момент. В init-скрипте при рестарте делается проверка
> конфига и рестрт не выполняется, если что-то пошло не так

Вообще, пусть отдельно висит: Bug 36458
Comment 5 Sergey Y. Afonin 2019-03-30 15:56:22 MSK
Даже когда собрано без libsystemd-devel и, в основном, работает, некотрые сообщения до syslog, всё-таки, не долетают: https://lists.altlinux.org/pipermail/devel/2019-March/207486.html
Comment 6 Sergey Y. Afonin 2019-10-08 22:27:58 MSK
(In reply to comment #2)

> У меня ощущение, что Вы делаете что-то совсем не правильно.

Да, "кто-то" точно делает что-то совсем неправильно... После досустановки syslog-ng-journal в лог попало интересное сообщение:

syslog-ng[18233]: [2019-10-08T23:09:14.708119] Using /dev/log Unix socket with systemd is not possible. Changing to systemd-syslog source, which supports socket activation.;

После замены unix-dgram ("/dev/log") на unix-dgram ("/run/systemd/journal/dev-log") всё заработало (и без syslog-ng-journal). И я так понимаю, что разработчики systemd и этот баг за баг не посчитают.
Comment 7 Sergey Y. Afonin 2019-10-10 20:06:55 MSK
У syslog-ng в какой-то момент появился драйвер источника system(), который умеет выбирать, откуда следует доставать информацию. Пишут, что в 3.6+/3.7+, но в p8 с 3.8.1 тоже не работает. Зато работает в p9 c теперь уже 3.22.1, хотя может и с  3.20.1 работало бы. Сейчас правильная конфигурация источника по-умолчанию выглядеть должна так, судя по всему:

source sys {
    file ("/proc/kmsg" program-override("kernel") flags(kernel));
    system();
};

При этом syslog-ng нормально пишет логи как с sysvinit, так и с journal. При наличии systemd-journald требуется ещё доустановить пакет syslog-ng-journal:

# syslog-ng -s
Error parsing source statement, source plugin systemd-journal not found in source generator system

При этом, похоже, syslog-ng полностью не зависит от настроек в /etc/systemd/journald.conf, то есть достаёт логи даже с

[Journal]
Storage=
ForwardToSyslog=no

Либо journald работает не так, как предполагает конфигурационный файл. Это косвенно подтверждается тем, что если поменять конфигурацию и перезапустить systemd-journald, часть сообщений до syslog-ng долетать перестаёт, и вернуть их возвратом конфигурации и перезапуском это уже не получается, только перезагрузкой.
Comment 8 Sergey Y. Afonin 2019-10-10 23:00:15 MSK
(In reply to comment #7)

> [Journal]
> Storage=
> ForwardToSyslog=no

В этом месте я ошибся. "Storage=" - это не "Storage=no", а "Storage=auto". Но и с 

[Journal]
Storage=no
ForwardToSyslog=no

Syslog-ng сообщения откуда-то достаёт.
Comment 9 Repository Robot 2019-10-11 22:25:05 MSK
syslog-ng-3.24.1-alt1 -> sisyphus:

Fri Oct 11 2019 Sergey Y. Afonin <asy@altlinux> 3.24.1-alt1
- 3.24.1
- built syslog-ng-geoip2 instead of syslog-ng-geoip
- switched to python3-dev
- syslog-ng.conf:
  + used system() source instead of unix-dgram ("/dev/log") (ALT #36454)
  + logging own Syslog-ng's messages to /var/log/syslog/syslog-ng
Comment 10 Sergey Y. Afonin 2019-11-04 10:57:22 MSK
(In reply to comment #9)

> - syslog-ng.conf:
>   + used system() source instead of unix-dgram ("/dev/log") (ALT #36454)

И надо доустановить пакет syslog-ng-journal в случае использования с systemd.