1つのコマンドを使用してJournalctlログを単位と識別子で表示する方法は?

1つのコマンドを使用してJournalctlログを単位と識別子で表示する方法は?

ログを表示するために使用できるVPNサービスデバイスがあります。

journalctl -u vpn

VPNと手動で対話して記録するスクリプトもあります。

exec > >(systemd-cat -t vpn.sh) 2>&1

以下を使用してログを表示できます。

journalctl -t vpn.sh

私は両方のログを見ようとしました。

journalctl -u vpn -t vpn.sh

しかし、それはうまくいきませんでした。

両方のログを同時に表示する方法はありますか?または、スクリプトの識別子()-t vpn.shと一致するようにVPNサービス単位ファイルの識別子()を設定できますか?vpn.sh

答え1

要約:次のように動作します。

$ journalctl _SYSTEMD_UNIT=vpn.service + SYSLOG_IDENTIFIER=vpn.sh

+2つの結合セットを結合し、2つの式のいずれかに一致するログ行を見つけることができます。 (この内容はJournalctlのマニュアルページに記載されています。)

-uこれを行うには、正しいフィールド名(フラグと-tショートカット)で参照する必要があります。

あなたは見ることができますsystemd.journal-フィールド(5)フィールド名のドキュメントです。 (該当ページには、1つは下線で始まり、もう1つはない理由も説明されています。)

_SYSTEMD_UNITサフィックスを含む正確に一致する項目が必要なためです.service-uショートカットはスマートで、フィールド固有のクエリに変換するときに正確な単位名を探します)。

それらを組み合わせると、上記のコマンドを取得できます。

答え2

投稿したい代替ソリューションを見つけました。一部の人はそれが役に立つと思います。私のスクリプトの識別子と一致するように、ユニットファイルでSyslogIdentifier以下を設定できます。[Service]

だから

[Unit]
Description=vpn management service

[Service]
SyslogIdentifier=vpn.sh
Type=simple
ExecStart=/bin/bash /home/myusername/scripts/vpn.sh

したがって、スクリプトを手動で呼び出すと、識別子はvpn.shに設定されている識別子と一致します。スクリプトの上部には次のように設定されています。

exec > >(systemd-cat -t vpn.sh) 2>&1

ここで vpn.sh を呼び出し、vpn.sh を手動で呼び出す systemd のログを見てみましょう。

journalctl -t vpn.sh --since today

または

journalctl SYSLOG_IDENTIFIER=vpn.sh --since today

答え3

サービス名も識別子として使用できるようです。以下のクーマンが私にとって効果的です。

journalctl -t vpn -t vpn.sh

-t、--identifier = SYSLOG_IDENTIFIER指定されたシステムログ識別子SYSLOG_IDENTIFIERを使用してメッセージを表示します。

   This parameter can be specified multiple times.

関連情報