tail && journalctlの組み合わせ


27

私は自分のアプリとpostgresのログを追跡しています。

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

pgpoolのログを含める必要があります。以前はsyslogでしたが、現在はjournalctlにあります。

tail -f && journalctl -fを結び付ける方法はありますか?

回答:


27

次を使用できます。

journalctl -u service-name -f

-f、-follow

最新のジャーナルエントリのみを表示し、新しいエントリがジャーナルに追加されるたびに継続的に印刷します。

ここでは、この答えを他と区別するために「サービス名」を追加しました。テキストではなく実際のサービス名に置き換えますservice-name


20

ログエントリをjournalに転送できます

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

journalctl -f... を使用しますが、マークが述べたように、すべてのジャーナルエントリを印刷します。


それらのログとその特定のユニットからのメッセージのみをフィルタリングする1つの方法は、個別のユニットを使用することです。SYSLOG_IDENTIFIERつまり、ユニットファイルを編集し、[Service]セクションの下に追加します。

SyslogIdentifier=my_stuff

ユニットを再起動systemd-catし、同じ識別子で実行します

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

最後に、その特定の識別子についてのみジャーナルにクエリを実行します。

journalctl -f -t my_stuff

4

bashを使用できる場合は、パラメーターの1つとしてプロセス置換を使用できtailます。

tail -f /tmp/myapp.log /var/log/postgresql/postgresql.main.log <(journalctl -f)

これも私が試したエレガントな方法ですが、うまくいきません。Tailは/ dev / fd / xxを使用していることを示していますが、ログは表示されません。
バイクの

正しい; / dev / fd / xxxは、プロセス置換を実装するためにbashが使用する一時パイプです。すべてのjournalctl出力がそこに表示されます。
ジェフシャラー

5
おそらく、ジャーナル全体をフォローするのではなく、pgpoolユニットのジャーナルだけをフォローしたいでしょう。という名前のサービスを想定してpgpool.serviceくださいjournalctl -fu pgpool.service。また、これをrootとして実行していない場合は、ユーザーがsystemd-journalグループに属していることを確認してください!
マークストースバーグ

1

次のようなものを試してください:

tail -f /tmp/myapp.log >> /tmp/tail.log &
journalctl -f >> /tmp/tail.log &
tail -f /tmp/tail.log
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.