Bug 31819

Summary: Зависимость от syslog-common
Product: Sisyphus Reporter: enp <enp>
Component: rsyslogAssignee: Alexey Shabalin <shaba>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: evg, shaba
Version: unstable   
Hardware: all   
OS: Linux   

Description enp 2016-02-18 20:19:12 MSK
Уже пробовал продвинуть аналогичную мысль для syslog-ng - https://bugzilla.altlinux.org/show_bug.cgi?id=31799 - но видимо пока успеха не имел.

Существует как минимум два сценария для rsyslog / syslog-ng, в которых зависимость от syslog-common (для удобства раскладывания логов по локальным файлам) является избыточной:

1) получение локальных логов от journald
2) сбор сетевых логов

Может стоит каким-нибудь способом сделать эту зависисимость необязательной?
Comment 1 Evgenii Terechkov 2016-02-19 08:27:29 MSK
Предложите патч.
Comment 2 enp 2016-02-19 15:12:56 MSK
(В ответ на комментарий №1)
> Предложите патч.

Хотелось бы для начала знать мнение майнтейнера, вдруг он такой патч не примет
Comment 3 enp 2016-02-19 21:15:45 MSK
Я попробую описать как бы я это сделал:

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 - это атавизм такой?
Comment 4 enp 2016-02-19 21:24:29 MSK
Вообще судя по комментариям в /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?
Comment 5 Alexey Shabalin 2016-02-19 21:48:50 MSK
(В ответ на комментарий №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 я сделал такой костыль. Возможно пришло время его переделать.
Comment 6 enp 2016-02-20 10:53:20 MSK
> в /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 примет.
Comment 7 enp 2016-02-20 11:00:45 MSK
А получение логов от journald через сокет похоже гиблое дело. Хотя бы потому, что пока rsyslog не получит те логи, что были записаны до его запуска. Кроме того, я часто получаю через сокет какие-то странные огрызки с метками journald, которые на стандартные syslog-сообщения совсем не похожи. И наконец, у нас не появляется файла /run/systemd/journal/syslog (вместо него приходится /run/systemd/journal/socket указывать) вне зависимости от того, что написано в ForwardToSyslog в /etc/systemd/journald.conf. Поэтому и syslog.socket всегда дохлый, и rsyslog через раз запускается.
Comment 8 enp 2016-02-20 11:36:47 MSK
При этом imjournal несмотря на то, что документация обещает за его использование различные кары, работает у меня вполне прилично - в отличие от imuxsock
Comment 9 enp 2016-02-24 13:11:37 MSK
Прошу посмотреть на http://git.altlinux.org/people/enp/packages/rsyslog.git?p=rsyslog.git;a=commitdiff;h=536a5d20165c811787239fdd5d9347ea68a36479


Локально это меня устраивает, хотелось бы видеть что-то подобное в Сизифе.
Comment 10 Alexey Shabalin 2016-02-24 13:31:56 MSK
(В ответ на комментарий №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
Comment 11 enp 2016-02-24 14:12:27 MSK
> посмотрел. меня в общем тоже устраивает. но есть ньюансы :)
> - надо объявить, что обновление несовместимо с предыдущими версиями.
> - /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

Спасибо, жду в Сизифе :)
Comment 12 Alexey Shabalin 2016-02-25 14:47:03 MSK
посмотрите на мои правки.
http://git.altlinux.org/people/shaba/packages/rsyslog.git
если устраивает, отправлю в сизиф.
Comment 13 enp 2016-02-25 20:05:09 MSK
(В ответ на комментарий №12)
> посмотрите на мои правки.
> http://git.altlinux.org/people/shaba/packages/rsyslog.git
> если устраивает, отправлю в сизиф.

Более чем устраивает, как много я оказывается упустил. Спасибо!
Comment 14 Evgenii Terechkov 2016-03-01 03:12:19 MSK
Предупреждать надо. После обновления rsyslog-а изчез /etc/syslog.conf и логи перестали писаться. Не сразу понял, что надо доустановить rsyslog-classic.
Comment 15 enp 2016-03-01 07:58:48 MSK
(В ответ на комментарий №14)
> Предупреждать надо. После обновления rsyslog-а изчез /etc/syslog.conf и логи
> перестали писаться. Не сразу понял, что надо доустановить rsyslog-classic.

Ну так:

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

Об этом Алексей подумал и таки видимо забыл :) А за обновление спасибо, баг можно закрывать.
Comment 16 Alexey Shabalin 2016-03-01 13:36:43 MSK
(В ответ на комментарий №15)
> (В ответ на комментарий №14)
> > Предупреждать надо. После обновления rsyslog-а изчез /etc/syslog.conf и логи
> > перестали писаться. Не сразу понял, что надо доустановить rsyslog-classic.
> 
> Ну так:
> 
> > - надо объявить, что обновление несовместимо с предыдущими версиями.
> 
> Об этом Алексей подумал и таки видимо забыл :) А за обновление спасибо, баг
> можно закрывать.
умышленно забыл :) т.к.  посчитал что это не актуально.
- если система под sysv, то rsyslog-classic должен вытянуться автоматом (из-за Provides: syslogd-daemon)
- если система под systemd, где syslogd-daemon провайдится journal'ом, то там обычно и rsyslog-classic не нужен, т.к. есть journal. а rsyslog используется для сбора логов по udp,tcp.
Возможно я был не прав.
Comment 17 Evgenii Terechkov 2016-03-01 13:48:23 MSK
У меня rsyslog под systemd стоит и для приёма udp и чтобы писать логи в чистом тексте. После обновления первое работало, второе - нет.