Уже пробовал продвинуть аналогичную мысль для syslog-ng - https://bugzilla.altlinux.org/show_bug.cgi?id=31799 - но видимо пока успеха не имел. Существует как минимум два сценария для rsyslog / syslog-ng, в которых зависимость от syslog-common (для удобства раскладывания логов по локальным файлам) является избыточной: 1) получение локальных логов от journald 2) сбор сетевых логов Может стоит каким-нибудь способом сделать эту зависисимость необязательной?
Предложите патч.
(В ответ на комментарий №1) > Предложите патч. Хотелось бы для начала знать мнение майнтейнера, вдруг он такой патч не примет
Я попробую описать как бы я это сделал: 1) Исключил бы из основного пакета зависимость на syslog-common и файл /etc/syslog.conf и ссылку на него в /etc/rsyslog.conf 2) Сделал бы пакет rsyslog-classic с зависимостью на сам rsyslog, syslog-common, и с файлами /etc/syslog.conf и /etc/rsyslog.d/00_classic.conf (последний со ссылкой на первый) 3) в /etc/rsyslog.d/00_common.conf закомментировал бы imuxsock и imklog, т.к. при наличии journald первый должен читать из /run/systemd/journal/socket, а второй совсем не нужен, и от Requires=syslog.socket в /lib/systemd/system/rsyslog.service при живом journald тоже один вред, как я понял А еще я совсем не уловил смысла ExecStartPre=/lib/systemd/altlinux-rsyslog-extrasockets в /lib/systemd/system/rsyslog.service: зачем слушать каждый файл в /etc/rsyslog.d как будто это симлинк на сокет (тем более что в дефолтной конфигурации таких симлинков нет)? И зачем нужен симлинк /lib/systemd/system/rsyslogd.service - это атавизм такой?
Вообще судя по комментариям в /lib/systemd/system/syslog.socket зависимость на него более чем нужна, однако при ее наличии rsyslog как правило (не всегда) стартует с такой ошибкой: systemd[1]: syslog.socket: Socket service syslog.service not loaded, refusing. systemd[1]: Failed to listen on Syslog Socket. systemd[1]: Dependency failed for System Logging Service. systemd[1]: rsyslog.service: Job rsyslog.service/start failed with result 'dependency'. И при этом: # systemctl status syslog.socket ● syslog.socket - Syslog Socket Loaded: loaded (/lib/systemd/system/syslog.socket; static; vendor preset: disabled) Active: inactive (dead) Docs: man:systemd.special(7) http://www.freedesktop.org/wiki/Software/systemd/syslog Listen: /run/systemd/journal/syslog (Datagram) Что бы это значило при живом journald?
(В ответ на комментарий №3) > Я попробую описать как бы я это сделал: теперь более понятно, что требуется :) В общем и целом поддерживаю, но надо еще все обдумать. > А еще я совсем не уловил смысла > ExecStartPre=/lib/systemd/altlinux-rsyslog-extrasockets в > /lib/systemd/system/rsyslog.service: зачем слушать каждый файл в /etc/rsyslog.d > как будто это симлинк на сокет (тем более что в дефолтной конфигурации таких > симлинков нет)? Если точнее, то в /etc/syslog.d(без r). И ты не поверишь, но он для этого и предназначен :) в /etc/syslog.d собираются симлинки на отличные от /dev/log сокеты. А не подгружаемые конфиги, как можно было бы подумать. И таких, отличных от /dev/log сокетов в altlinux очень много - это все сервисы, работающие в chroot. Например postfix, устанавливаемый по-умолчанию. sysklogd обучен сам смотреть в директорию /etc/syslog.d, и принимать на вход с этих сокетов. Для rsyslog я сделал такой костыль. Возможно пришло время его переделать.
> в /etc/syslog.d собираются симлинки на отличные от /dev/log сокеты. А не > подгружаемые конфиги, как можно было бы подумать. > И таких, отличных от /dev/log сокетов в altlinux очень много - это все сервисы, > работающие в chroot. Например postfix, устанавливаемый по-умолчанию. > sysklogd обучен сам смотреть в директорию /etc/syslog.d, и принимать на вход с > этих сокетов. Для rsyslog я сделал такой костыль. Возможно пришло время его > переделать. А как это переделать? И кстати я запустил postfix (и баг на него повесил заодно - https://bugzilla.altlinux.org/show_bug.cgi?id=31827) и: # readlink /etc/syslog.d/postfix /var/spool/postfix/dev/log # file /var/spool/postfix/dev/log /var/spool/postfix/dev/log: ERROR: cannot open `/var/spool/postfix/dev/log' (No such file or directory) А postgresql уже давно вылез из чрута. Короче, я сомневаюсь в актуальности этой фичи, и особенно в случае systemd, который и chroot желающим организует, и stderr примет.
А получение логов от journald через сокет похоже гиблое дело. Хотя бы потому, что пока rsyslog не получит те логи, что были записаны до его запуска. Кроме того, я часто получаю через сокет какие-то странные огрызки с метками journald, которые на стандартные syslog-сообщения совсем не похожи. И наконец, у нас не появляется файла /run/systemd/journal/syslog (вместо него приходится /run/systemd/journal/socket указывать) вне зависимости от того, что написано в ForwardToSyslog в /etc/systemd/journald.conf. Поэтому и syslog.socket всегда дохлый, и rsyslog через раз запускается.
При этом imjournal несмотря на то, что документация обещает за его использование различные кары, работает у меня вполне прилично - в отличие от imuxsock
Прошу посмотреть на http://git.altlinux.org/people/enp/packages/rsyslog.git?p=rsyslog.git;a=commitdiff;h=536a5d20165c811787239fdd5d9347ea68a36479 Локально это меня устраивает, хотелось бы видеть что-то подобное в Сизифе.
(В ответ на комментарий №9) > Прошу посмотреть на > http://git.altlinux.org/people/enp/packages/rsyslog.git?p=rsyslog.git;a=commitdiff;h=536a5d20165c811787239fdd5d9347ea68a36479 > > > Локально это меня устраивает, хотелось бы видеть что-то подобное в Сизифе. посмотрел. меня в общем тоже устраивает. но есть ньюансы :) - надо объявить, что обновление несовместимо с предыдущими версиями. - /bin/touch /var/lock/subsys/rsyslogd и bin/rm -f /var/lock/subsys/rsyslogd делались не просто так, а для работы /sbin/reload-syslog. думаю для rsyslog-classic можно добавить drop-in конфиг для rsyslog.service в этот же drop-in конфиг можно так же добавить и Requires=syslog.socket и -Alias=syslog.service
> посмотрел. меня в общем тоже устраивает. но есть ньюансы :) > - надо объявить, что обновление несовместимо с предыдущими версиями. > - /bin/touch /var/lock/subsys/rsyslogd и bin/rm -f /var/lock/subsys/rsyslogd > делались не просто так, а для работы /sbin/reload-syslog. думаю для > rsyslog-classic можно добавить drop-in конфиг для rsyslog.service > в этот же drop-in конфиг можно так же добавить и Requires=syslog.socket и > -Alias=syslog.service Спасибо, жду в Сизифе :)
посмотрите на мои правки. http://git.altlinux.org/people/shaba/packages/rsyslog.git если устраивает, отправлю в сизиф.
(В ответ на комментарий №12) > посмотрите на мои правки. > http://git.altlinux.org/people/shaba/packages/rsyslog.git > если устраивает, отправлю в сизиф. Более чем устраивает, как много я оказывается упустил. Спасибо!
Предупреждать надо. После обновления rsyslog-а изчез /etc/syslog.conf и логи перестали писаться. Не сразу понял, что надо доустановить rsyslog-classic.
(В ответ на комментарий №14) > Предупреждать надо. После обновления rsyslog-а изчез /etc/syslog.conf и логи > перестали писаться. Не сразу понял, что надо доустановить rsyslog-classic. Ну так: > - надо объявить, что обновление несовместимо с предыдущими версиями. Об этом Алексей подумал и таки видимо забыл :) А за обновление спасибо, баг можно закрывать.
(В ответ на комментарий №15) > (В ответ на комментарий №14) > > Предупреждать надо. После обновления rsyslog-а изчез /etc/syslog.conf и логи > > перестали писаться. Не сразу понял, что надо доустановить rsyslog-classic. > > Ну так: > > > - надо объявить, что обновление несовместимо с предыдущими версиями. > > Об этом Алексей подумал и таки видимо забыл :) А за обновление спасибо, баг > можно закрывать. умышленно забыл :) т.к. посчитал что это не актуально. - если система под sysv, то rsyslog-classic должен вытянуться автоматом (из-за Provides: syslogd-daemon) - если система под systemd, где syslogd-daemon провайдится journal'ом, то там обычно и rsyslog-classic не нужен, т.к. есть journal. а rsyslog используется для сбора логов по udp,tcp. Возможно я был не прав.
У меня rsyslog под systemd стоит и для приёма udp и чтобы писать логи в чистом тексте. После обновления первое работало, второе - нет.