Что касается протоколов, systemd-journald
...
- ... является слушателем в сокете потока с именем
/run/systemd/journal/stdout
. systemd подключает к этому сокету необработанные стандартные выходные данные и ошибки служб (которые по умолчанию или явно имеют StandardOutput=journal
/ StandardError=journal
). Таким образом, он получает протокол записей произвольного формата переменной длины, оканчивающийся переводом строки.
- … Является слушателем именованных сокетов дейтаграмм
/run/systemd/journal/dev-log
, который символически связан с /dev/log
. Он получает протокол, на котором syslog()
говорит функция библиотеки в библиотеке GNU C, связанной с приложениями.
- … Пытается быть клиентом другой службы, прослушивающей сокет дейтаграммы с именем
/run/systemd/journal/syslog
. Он также получает протокол, на котором syslog()
говорит библиотечная функция в библиотеке GNU C (хотя systemd-journald
фактически использует другую библиотеку и другую функцию для ее произнесения).
- ... читатель из устройства персонажа по имени
/dev/kmsg
. Он получает протокол, на котором говорит ядро Linux, - это протокол переменной длины, в основном в свободном формате, записи которого заканчиваются переводом строки.
- ... является слушателем в сокете дейтаграммы с именем
/run/systemd/journal/socket
. Это аналогично случаю библиотеки GNU C в том случае, когда приложения связываются с библиотекой, которая передает определенный протокол этому сокету; за исключением того, что эта функция есть sd_journal_sendv()
, она находится в библиотеке systemd C, на которую ссылаются приложения, и протокол не стандартизирован, а является протоколом только для systemd, содержащим массив пар ключ = значение и, необязательно, читаемый файловый дескриптор в каждой дейтаграмме ,
Протокол, используемый syslog()
функцией в библиотеке GNU C, не является ни RFC 5424, ни RFC 3164, а фактически является собственным стандартом де-факто. Это не RFC 5424, потому что он не имеет правильного количества пробелов и черточек, обозначающих необязательные поля со значениями NIL. Это не RFC 3164, потому что у него есть PROCID
поле вместо HOSTNAME
.
Пару лет назад ваша операционная система systemd имела бы:
systemd-journald
делать все вышеперечисленное (и некоторые вещи, которые не имеют отношения к протоколам ) и быть сервером, с которым общаются библиотека GNU C и библиотека systemd C, используя свои соответствующие протоколы
- вызывается необязательная программа syslog или rsyslog или syslog-ng, либо
xinetd
/ inetd
-style, когда что-то пытается отправлять сообщения /run/systemd/journal/syslog
и получать сокет в качестве дескриптора открытого файла, либо как прямой сервис, настроенный на открытие и прослушивание /run/systemd/journal/syslog
с его (эквивалентным rsyslog) imuxsock
модуль; и говоря протокол библиотеки GNU C
- опциональный syslog или rsyslog, syslog-ng или udp-syslog-read, прослушивающие трафик RFC 5426
В настоящее время ваша операционная система systemd имеет:
systemd-journald
снова выполняем все вышеперечисленное и являемся сервером, с которым общаются библиотека GNU C и библиотека systemd C
- дополнительная программа rsyslog, вызываемая как прямой сервис, а не через сокет, который напрямую считывает данные из файлов журнала systemd с помощью своего
imjournal
модуля
- опциональный syslog или rsyslog, syslog-ng или udp-syslog-read, прослушивающие трафик RFC 5426
дальнейшее чтение