journalctl de systemd: ¿cómo filtrar por mensaje?


8

journalctl parece una gran herramienta para examinar registros, pero estoy atascado en lo que parece una simple pregunta: quiero ver todos los mensajes cron que contienen la frase update-ipsets.

Por supuesto que puedo hacer esto

journalctl -u cron.service | grep update-ipsets

pero luego pierde todos los otros beneficios de la salida de journalctl (codificación de colores, paginación automática, visualización en vivo, etc.)

He intentado:

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

Y no quieres experimentar golpeando tabdespués MESSAGE=: cuelga el shell (zsh / Debian Jessie) y Ctrl-Ctampoco ayudó.

No puedo creer que no tenga esta funcionalidad básica incorporada, así que estoy seguro de que me he perdido algo.

Gracias.

Respuestas:


3

Actualmente, journalctl no admite patrones o comodines en las coincidencias de campo. grepEs tu mejor opción.

Tuve el mismo problema, y ​​creo que journalctlsolo busca una coincidencia exacta para VALOR cuando NAME=VALUEse pasa como argumento.

Mis investigaciones:

  1. página man

    Desde journalctl(1)

    El patrón no se menciona en la descripción de los partidos:

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

    La página del manual se refiere a un patrón cuando se describe -usolo la opción.

       -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. Código fuente

    La función fnmatchen src/journalse usa cuando se buscan unidades solamente .

  3. diario de depuración

    Al habilitar la salida de depuración, puede ver que el patrón se expande solo cuando se usa -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)
    ...
    

    Todos los partidos se tratan como exactos, incluidos UNIT:

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

1
Tenga en cuenta que esto realmente se implementó en la última versión de systemd github.com/systemd/systemd/commit/…
Bigon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.