Я хочу записывать журналы journald в файл, чтобы потом получить его и отправить в Logstash. Я подумал о том, чтобы запустить syslog-ng и сделать его клиентом journald, чтобы получить файлы syslog. Я использую контейнеры Docker на машине CoreOS, поэтому я попытался запустить syslog-ng в качестве контейнера на хосте докеров CoreOS, создав модуль systemd, который запускает контейнер. Я последовал за эта страница, чтобы получить системный журнал в systemd, но если я попытаюсь сделать так, чтобы мой контейнер syslog-ng считывался напрямую из сокета syslog на хосте (установив его с помощью тома докера), он жалуется на «Адрес уже используется». Итак, у меня есть журнал journald, контейнер с запущенным syslog-ng, но я не знаю, как получить журналы journald внутри syslog-ng.
Мое альтернативное решение для получения журналов journald в файле - запустить модуль systemd, который выполняет journalctl -f --json | tee -a /var/log/systemd
, но я не уверен в надежности этого решения. Достаточно ли это хорошее решение?
Я понимаю, что этот вопрос немного устарел, но это один из первых результатов поиска в Google. Это и опция --json, похоже, не работают для меня и не отображаются на страницах руководства.
Я просмотрел страницу руководства для journalctl, и есть опция с именем: --no-tail, которая просто выводит дату непосредственно на std, откуда ее можно передать в другое приложение или файл.
В моем случае я хотел, чтобы мои журналы ssh были с сегодняшнего дня, поэтому выполнил это: journalctl -u sshd -S today --no-tail > main.log
.
Техническое объяснение: получите все журналы с сегодняшнего дня, полученные от объекта sshd
; в >
затем выводит это в файл.
В вашем случае я считаю, что это то, чего вы хотите: journalctl --no-tail > test.log
.
Это было протестировано в Arch Linux.