Я хочу записывать журналы 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.