Kombinierter Schwanz && journalctl

27

Ich verfolge Protokolle meiner eigenen App und meiner Postgres.

tail -f /tmp/myapp.log /var/log/postgresql/postgresql.main.log

Ich muss die Protokolle von pgpool einschließen. Früher war es Syslog, jetzt ist es in Journalctl.

Gibt es eine Möglichkeit, tail -f && journalctl -f zusammenzubinden?

Bikey
quelle

Antworten:

27

Du könntest benutzen:

journalctl -u service-name -f

-F, -Folgen

Zeigen Sie nur die neuesten Journaleinträge an und drucken Sie fortlaufend neue Einträge, wenn sie an das Journal angehängt werden.

Hier habe ich "Dienstname" hinzugefügt, um diese Antwort von anderen zu unterscheiden. Sie ersetzen den tatsächlichen Dienstnamen anstelle des Texts service-name.

Toufic
quelle
20

Sie können Ihre Protokolleinträge an das Journal weiterleiten :

systemd-cat tail -f /tmp/myapp.log /var/log/postgresql.log

und dann verwenden journalctl -f ... verwenden, obwohl, wie Mark erwähnt, alle Journaleinträge gedruckt werden.


Eine Möglichkeit, nur die Nachrichten aus diesen Protokollen und von diesem bestimmten Gerät zu filtern, besteht darin, eine eigene SYSLOG_IDENTIFIERDatei zu verwenden, dh die Gerätedatei zu bearbeiten und unter dem [Service]Abschnitt Hinzufügen z

SyslogIdentifier=my_stuff

Starten Sie das Gerät neu und führen Sie es systemd-catmit derselben Kennung aus

systemd-cat -t my_stuff tail -f /tmp/myapp.log /var/log/postgresql.log

und schließlich fragen Sie das Journal nur nach diesem bestimmten Bezeichner ab:

journalctl -f -t my_stuff
don_crissti
quelle
4

Wenn Bash verfügbar ist, können Sie die Prozessersetzung als einen der folgenden tailParameter verwenden:

tail -f /tmp/myapp.log /var/log/postgresql/postgresql.main.log <(journalctl -f)
Jeff Schaller
quelle
Dies ist die elegante Art, wie ich es auch versucht habe, aber es funktioniert nicht. Tail zeigt, dass es / dev / fd / xx verwendet, aber keine Protokolle angezeigt werden.
Bikey
richtig; / dev / fd / xxx ist die temporäre Pipe, die bash verwendet, um die Prozessersetzung zu implementieren. Alle Journalausgaben werden dort angezeigt.
Jeff Schaller
5
Sie möchten wahrscheinlich nicht das gesamte Tagebuch verfolgen, sondern nur die für die pgpool-Einheit. Angenommen, der Dienst heißt pgpool.service, versuchen Sie es journalctl -fu pgpool.service. Wenn Sie dies nicht als root ausführen, vergewissern Sie sich, dass sich der Benutzer in der systemd-journalGruppe befindet!
Mark Stosberg
1

versuchen Sie etwas wie:

tail -f /tmp/myapp.log >> /tmp/tail.log &
journalctl -f >> /tmp/tail.log &
tail -f /tmp/tail.log
Paul
quelle