Был такой баг: 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-файле это как-то можно сделать?
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 надо этот патчик добавить.
(В ответ на комментарий №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 надо этот патчик добавить. У меня ощущение, что Вы делаете что-то совсем не правильно.
(In reply to comment #2) > У меня ощущение, что Вы делаете что-то совсем не правильно. Хотелось бы понять, что именно. Вроде всё просто - включил у journal вывод в syslog, запустил syslog-ng. Собранный без libsystemd-devel работает, как ожидалось, а вот собранный с libsystemd-devel пишет в лог только свои сообщения, статистику например. Может, конечно, это у самого syslog-ng что-то как-то так задумано, но в документации пока ничего особенного про какие-нибудь опции, связанные с systemd, не увидел. Спрошу ещё в рассылке балабитовской.
(In reply to comment #0) > И ещё момент. В init-скрипте при рестарте делается проверка > конфига и рестрт не выполняется, если что-то пошло не так Вообще, пусть отдельно висит: Bug 36458
Даже когда собрано без libsystemd-devel и, в основном, работает, некотрые сообщения до syslog, всё-таки, не долетают: https://lists.altlinux.org/pipermail/devel/2019-March/207486.html
(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 и этот баг за баг не посчитают.
У 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 долетать перестаёт, и вернуть их возвратом конфигурации и перезапуском это уже не получается, только перезагрузкой.
(In reply to comment #7) > [Journal] > Storage= > ForwardToSyslog=no В этом месте я ошибся. "Storage=" - это не "Storage=no", а "Storage=auto". Но и с [Journal] Storage=no ForwardToSyslog=no Syslog-ng сообщения откуда-то достаёт.
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
(In reply to comment #9) > - syslog-ng.conf: > + used system() source instead of unix-dgram ("/dev/log") (ALT #36454) И надо доустановить пакет syslog-ng-journal в случае использования с systemd.