Ich möchte Journald-Protokolle in einer Datei protokollieren, damit ich sie später abrufen und an Logstash senden kann. Ich dachte darüber nach, syslog-ng auszuführen und es zu einem Client von Journald zu machen, damit ich Syslog-Dateien erhalte. Ich verwende Docker-Container auf einer CoreOS-Maschine, also habe ich versucht, syslog-ng als Container im CoreOS-Docker-Host auszuführen und eine systemd-Einheit zu erstellen, die den Container ausführt. Ich folgtediese Seite, um Syslog in systemd zu erhalten, aber wenn ich versuche, meinen Syslog-ng-Container direkt vom Syslog-Socket im Host lesen zu lassen (indem ich ihn mit einem Docker-Volume mounte), beschwert er sich über „Adresse bereits in Verwendung“. Ich habe also Journald-Protokollierung, einen Container mit laufendem Syslog-ng, aber ich weiß nicht, wie ich Journald-Protokolle in Syslog-ng bekomme.
Meine alternative Lösung, um Journald-Protokolle in einer Datei zu erhalten, besteht darin, eine Systemd-Einheit auszuführen, die Folgendes ausführt journalctl -f --json | tee -a /var/log/systemd
, aber ich bin mir nicht sicher, wie zuverlässig diese Lösung ist. Ist das eine ausreichend gute Lösung?
Antwort1
Mir ist zwar klar, dass diese Frage etwas veraltet ist, aber sie ist eines der ersten Suchergebnisse bei Google. Das und die Option --json scheinen bei mir nicht zu funktionieren und werden in den Manpages nicht angezeigt.
Ich habe mir die Manpage für journalctl angesehen und dort gibt es eine Option namens --no-tail, die das Datum direkt an std ausgibt, von wo aus es an eine andere Anwendung oder Datei weitergeleitet werden kann.
In meinem Fall wollte ich meine SSH-Protokolle von heute, also habe ich Folgendes ausgeführt:
journalctl -u sshd -S today --no-tail > main.log
.
Technische Erklärung: Holt alle Logs des heutigen Tages, die vom Gerät stammen sshd
und >
gibt diese anschließend in eine Datei aus.
In Ihrem Fall glaube ich, dass es das ist, was Sie wollen: journalctl --no-tail > test.log
.
Dies wurde in Arch Linux getestet.