journaldのログをファイルに記録して、後でそれを取得してLogstashに送信できるようにしたいです。syslog-ngを実行してjournaldのクライアントにして、syslogファイルを取得することを考えました。CoreOSマシンでDockerコンテナを使用しているので、CoreOS dockerホストでコンテナとしてsyslog-ngを実行し、コンテナを実行するsystemdユニットを作成しようとしました。systemdでsyslogを取得するにはこのページを参照してくださいしかし、syslog-ng コンテナをホストの syslog ソケットから直接読み取ろうとすると (docker ボリュームでマウントすることによって)、「アドレスが既に使用されています」というエラーが表示されます。そのため、syslog-ng が稼働しているコンテナである journald ログがありますが、syslog-ng 内で journald ログを取得する方法がわかりません。
journald ログをファイルに取得するための代替ソリューションは、 を実行する systemd ユニットを実行することですjournalctl -f --json | tee -a /var/log/systemd
が、このソリューションの信頼性については確信がありません。これは十分なソリューションでしょうか?
答え1
この質問は少し古いものであることは承知していますが、Google で最初に表示される結果の 1 つです。また、--json オプションは機能していないようで、man ページにも表示されません。
journalctl のマニュアル ページを確認したところ、--no-tail というオプションがあり、このオプションは日付を std に直接出力し、それを別のアプリケーションまたはファイルにパイプすることができます。
私の場合は、今日の ssh ログが欲しかったので、これを実行しました:
journalctl -u sshd -S today --no-tail > main.log
。
技術的な説明: ユニットからの今日のすべてのログを取得しsshd
、>
それをファイルに出力します。
あなたの場合、これがあなたが望んでいることだと私は信じています: journalctl --no-tail > test.log
。
これはArch Linuxでテストされました。