systemdのjournalctl:メッセージでフィルターする方法?


8

journalctlは、ログを調べるのに最適なツールのように見えますが、単純な質問のように感じられることに行き詰まっていますupdate-ipsets

もちろんこれはできます

journalctl -u cron.service | grep update-ipsets

しかし、その後、journalctlの出力の他のすべての利点(カラーコーディング、自動ページング、ライブビューなど)を失います。

私はもう試した:

journalctl -u cron.service MESSAGE=update-ipsets
journalctl -u cron.service "MESSAGE=*update-ipsets*"
journalctl -u cron.service "MESSAGE=.*update-ipsets.*"
journalctl -u cron.service "MESSAGE=/.*update-ipsets.*/"

そして、あなたはtab後に打って実験したくないMESSAGE=-(zsh / Debian Jessie)シェルをハングさせて、Ctrl-Cどちらも助けにはならなかった!

この基本的な機能が組み込まれていないとは信じられないので、何かを見逃していたに違いないと思いますか?

ありがとう。

回答:


3

現在、journalctlはフィールド照合でのパターンまたはワイルドカードをサポートしていません。grepあなたの最良の選択肢です。

同じ問題があり、引数として渡されたjournalctl場合にのみVALUEの完全一致を検索すると思いNAME=VALUEます。

私の調査:

  1. マニュアルページ

    から journalctl(1)

    パターンは一致の説明に記載されていません:

     [...] A match is in the format "FIELD=VALUE", e.g.
     "_SYSTEMD_UNIT=httpd.service", referring to the components
     of a structured journal entry. [...]
    

    マニュアルページは、-uオプションのみを説明するときのパターンを参照しています。

       -u, --unit=UNIT|PATTERN
           Show messages for the specified systemd unit UNIT 
           (such as a service unit), or for any of the units
           matched by PATTERN. 
    
  2. ソースコード

    関数fnmatchin src/journalは、ユニットのみを検索する場合に使用されます。

  3. ジャーナルctlをデバッグする

    デバッグ出力を有効にすると、パターンは、を使用する場合にのみ展開されることがわかります-u

    $ SYSTEMD_LOG_LEVEL=debug journalctl -n1 -u gdm*
    ...
    Matched gdm.service with pattern _SYSTEMD_UNIT=gdm*
    Matched gdm.service with pattern UNIT=gdm*
    Journal filter: ((OBJECT_SYSTEMD_UNIT=gdm.service AND _UID=0) OR (UNIT=gdm.service AND _PID=1) OR (COREDUMP_UNIT=gdm.service AND _UID=0 AND MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1) OR _SYSTEMD_UNIT=gdm.service)
    ...
    

    次を含むすべての一致は完全一致として扱われUNITます。

    $ SYSTEMD_LOG_LEVEL=debug journalctl -n1 UNIT=gdm.*
    ...
    Journal filter: UNIT=gdm*
    ...
    

1
これは実際に最後にsystemdリリースで実装されていることを注意github.com/systemd/systemd/commit/...
バイゴン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.