Взаимосвязь rsyslog и journald в Ubuntu 16.04

18

Я использую ванильный сервер Ubuntu 16.04 и пытаюсь понять, как настраивается ведение журналов по умолчанию. Я вижу, что оба journaldи rsyslogустановлены, и работают, но мне совсем не ясно, как обрабатываются сообщения журнала.

Большинство сообщений , кажется , чтобы показать , как в /var/log/syslogи через journalctl, но я не вижу какой - либо конкретной конфигурации для пересылки между ними в любой /etc/systemd/journald.conf(который в основном все закомментирована по умолчанию), /etc/rsyslog.confили /etc/rsyslog.d/50-default.conf. Я пытался найти официальную документацию или даже сообщение в блоге, объясняющее, как эти два настроены в Ubuntu, но не смог ничего найти.

Чтобы еще больше прибавить путаницы, я выполнил logger -p local1.info Testна хосте и обнаружил, что ничего не было записано /var/log/syslog, в то время как сообщение отображалось в journalctl.

Мои вопросы:

  1. Как в действительности работают journald и rsyslog в Ubuntu 16.04 (по умолчанию)?
  2. Почему сообщения, отправленные с, по- loggerвидимому, попадают в журнал, а не в системный журнал?

Обновление: Оказывается, loggerне работает, как ожидалось, было ошибкой с моей стороны, так что это не имеет отношения к основному вопросу.

motns
источник

Ответы:

12

По умолчанию rsyslogиспользуется модуль imuxsock, модуль обеспечивает:

возможность принимать сообщения системного журнала через локальные сокеты Unix. Самое главное, это механизм, с помощью которого вызов syslog (3) доставляет сообщения syslog в rsyslogd [1] .

Можно rsyslogимпортировать сообщения структурированного журнала из systemd-journal, используя модуль с именем «imjournal» [2] .

Это можно загрузить как:

module(load="imjournal") 

в:

/etc/rsyslog.conf

С другой стороны, «systemd-journald» собирает все данные:

man systemd-journald

systemd-journald - системный сервис, который собирает и хранит данные журналов. Он создает и поддерживает структурированные, проиндексированные журналы на основе информации журнала, полученной из различных источников:

   ·   Kernel log messages, via kmsg
   ·   Simple system log messages, via the libc syslog(3) call
   ·   Structured system log messages via the native Journal API, 
       see sd_journal_print(4)
   ·   Standard output and standard error of system services
   ·   Audit records, via the audit subsystem

Вы можете отключить, rsyslogdпока у вас есть доступ к системным журналам с помощью journalctl.

$ sudo systemctl mask rsyslogd
$ sudo systemctl stop syslog.socket
$ sudo systemctl stop rsyslog.service
$ systemctl is-active rsyslog.service 
inactive
$ logger -p mail.info Helllooo
$ journalctl

Например, centos использует модуль «imuxsock» для захвата всех данных «systemd-journald» через rsyslog то время как opensuse вообще не имеет «syslog».


Чтобы выяснить, почему ваше сообщение не закончилось /var/log/syslog, проверьте этот файл:

less /etc/rsyslog.d/50-default.conf

Ищу *.info , смотрите, где они будут храниться, это может быть другой файл, как messages.

Для меня это проявляется в обоих journalctlи syslog.

Ravexina
источник
logger -p .info helloне является допустимым. Вы не дали название объекта.
luv.preet
Обновил
Как я отмечал в моей редакции, loggerмоя вина была неработающая, так что теперь это исправлено (спасибо за советы в любом случае). Что касается журналов, отображаемых в двух местах, ваша заметка imuxsockкажется ключевой: кажется, что и rsyslog, и journald прослушивают локальные сообщения системного журнала, поэтому эти записи попадают в два отдельных журнала.
motns
Я следовал вышеизложенному на Ubuntu, и теперь я не получаю никаких журналов от регистратора, хмм: root @ T: ~ # logger -p mail.info Helllooo root @ T: ~ # journalctl Файлы журнала не найдены. - Нет записей - есть идеи?
Хакерон
Отличный ответ. Однако мне не хватает заметки о том, как journald знает, как открыть сокет системного журнала (или, если нет, как он получает сообщения syslog в противном случае), когда rsyslog отключен? Или нужна какая-то ручная настройка journald?
Маттис
4

Systemd - это система инициализации, используемая для запуска служб при загрузке системы. Journald отвечает за создание журналов для служб, запускаемых systemd. Благодаря интеграции journald с systemd, даже самые ранние сообщения процесса загрузки доступны для journald.

Rsyslog - это демон, специально созданный для обработки журналов, никак не связанный с journald. Он может принимать логи разными способами и выводить их разными способами. По умолчанию он не включен, поэтому он также принимает сообщения журнала из journald. Для этого вы должны написать в файле /etc/rsyslog.conf,

$ModLoad imjournal # im -> input module
OR
load(type="imjournal")

Теперь он также будет принимать логи fromm journald. Но я предлагаю вам не менять файл /etc/rsyslog.conf.

В конце файла /etc/rsyslog.conf написана строка

$IncludeConfig /etc/rsyslog.d/*.conf

Это означает, что все файлы, имеющие .conf в конце в папке /etc/rsyslog.d/, должны быть включены во время загрузки rsyslog. Итак, все ваши пользовательские конфиги должны быть в этих файлах

Я бы предложил вам создать файл /etc/rsyslog.d/journald.conf и вставить в него приведенный ниже фрагмент.

Ниже приведен фрагмент официальной страницы журнала rsyslog.

module(load="imjournal" PersistStateInterval="100"
   StateFile="/path/to/file") #load imjournal module
module(load="mmjsonparse") #load mmjsonparse module for structured logs

template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n" ) #template for messages

action(type="mmjsonparse")
action(type="omfile" file="/var/log/ceelog" template="CEETemplate")

Строка 1 - загружает модуль журнала для приема логов из журнала.

2 - загружен модуль mmjsonparse, используемый при разборе логов

3 - Они структурированы в описанный формат в шаблоне

4 - Он анализирует эти журналы, используя модуль mmjsonparse.

5 - Он отправляет эти журналы в файл, а именно / var / log / ceelog в соответствии со структурой, предоставленной в данном шаблоне, используя модуль omfile (файл модуля вывода - файлы в файл).

Внесите изменения в конфигурации в соответствии с вашими потребностями.

luv.preet
источник
Спасибо за объяснение, но я думаю, что ответ @Ravexina ближе к тому, чтобы помочь мне понять, что происходит с rsyslog и journald по умолчанию (без дополнительной настройки).
motns