Получение журналов journald в виде простого текстового файла

Получение журналов journald в виде простого текстового файла

Я хочу записывать журналы journald в файл, чтобы позже извлечь его и отправить в Logstash. Я думал о запуске syslog-ng и сделать его клиентом journald, чтобы получать файлы syslog. Я использую контейнеры Docker на машине CoreOS, поэтому я попытался запустить syslog-ng как контейнер на хосте CoreOS docker, создав юнит systemd, который выполняет контейнер. Я следовалэта страница для получения syslog в systemd, но если я попытаюсь заставить свой контейнер syslog-ng напрямую читать из сокета syslog на хосте (смонтировав его с томом docker), он выдаст сообщение «Адрес уже используется». Итак, у меня есть журналирование journald, контейнер с запущенным syslog-ng, но я не знаю, как получить журналы journald внутри syslog-ng.

Альтернативное решение для получения журналов journald в файле — запустить systemd unit, который выполняет journalctl -f --json | tee -a /var/log/systemd, но я не уверен в надежности этого решения. Достаточно ли это хорошее решение?

решение1

Я понимаю, что этот вопрос немного устарел, но это один из первых результатов поиска в Google. Это и опция --json, похоже, не работают у меня и не отображаются на страницах руководства.

Я посмотрел на страницу руководства по journalctl и увидел там опцию --no-tail, которая просто выведет дату непосредственно в std, откуда ее можно будет передать в другое приложение или файл.

В моем случае мне нужны были мои логи SSH за сегодня, поэтому я выполнил это: journalctl -u sshd -S today --no-tail > main.log.

Техническое объяснение: получить все журналы за сегодня, которые есть в подразделении sshd; >затем вывести их в файл.

В вашем случае, я полагаю, это то, что вы хотите: journalctl --no-tail > test.log.

Это было протестировано в Arch Linux.

Связанный контент