journalctl di systemd: come filtrare per messaggio?


8

journalctl sembra un ottimo strumento per consultare i registri, ma sono bloccato su ciò che sembra una semplice domanda: voglio vedere tutti i messaggi cron che contengono la frase update-ipsets.

Certo che posso farlo

journalctl -u cron.service | grep update-ipsets

ma poi perdi tutti gli altri vantaggi dell'output di journalctl (codifica a colori, paginazione automatica, live view ecc.)

Ho provato:

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.*/"

E non vuoi sperimentare colpendo tabdopo MESSAGE=- blocca la shell (zsh / Debian Jessie) e Ctrl-Cnon ha aiutato neanche!

Non riesco a credere che non abbia questa funzionalità di base integrata, quindi sono sicuro di aver perso qualcosa?

Grazie.

Risposte:


3

Attualmente journalctl non supporta modelli o caratteri jolly nelle corrispondenze dei campi. grepè la tua migliore opzione.

Ho avuto lo stesso problema e penso che journalctlcerchi solo una corrispondenza esatta per VALUE quando NAME=VALUEviene passato come argomento.

Le mie indagini:

  1. pagina man

    A partire dal journalctl(1)

    Il modello non è menzionato nella descrizione delle partite:

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

    La pagina man si riferisce a un modello quando si descrive -usolo l'opzione.

       -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. Codice sorgente

    La funzione fnmatchin src/journalviene utilizzata quando si cercano solo unità .

  3. debug journalctl

    Abilitando l'output di debug puoi vedere che il pattern è espanso solo quando lo usi -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)
    ...
    

    Tutte le partite sono considerate esatte, tra cui UNIT:

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

1
Si noti che questo è effettivamente implementato nell'ultima versione di systemd github.com/systemd/systemd/commit/…
Bigon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.