Filtrer tout fichier journal système par date ou plage de dates


12

Ce que je veux réaliser:

Je voudrais filtrer un fichier journal système par date, c'est-à-dire quand je le fais:

$ cat /var/log/syslog | grep -i "error\|warn\|kernel" 

il imprime des lignes comme celles-ci pour les trois derniers jours disons:

(...)
Apr  3 06:17:38 computer_name kernel: [517239.805470] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
(...)
Apr  4 19:34:21 computer_name kernel: [517242.523165] e1000e: enp0s25 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
(...)
Apr  5 09:00:52 computer_name kernel: [517242.523217] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s25: link becomes ready

Comment grep (sélectionner ou filtrer):

  • par date?
  • par date + heure?

Ce que j'ai essayé:

$ cat /var/log/syslog | grep -i "Apr  5" | grep -i "error\|warn\|kernel" 

Il fonctionne comme prévu sur le syslogdossier, mais pas sur le kern.logfichier par exemple, qui ne les rendements: Binary file (standard input) matches. Et quand je tailce fichier particulier, je peux voir le même format de date de début que dans le syslogfichier.

Question:

Comment obtenir la même chose sur d'autres journaux comme le kern.logfichier?

De plus, est-il possible de filtrer:

  • par plage de dates?
  • par date + plage horaire?

Astuce: si possible, avec des "commandes faciles à retenir".

Réponses:


14

Avec systemd, nous avons obtenu journalctl qui permet facilement un filtrage à grain fin comme celui-ci:

sudo journalctl --since "2 days ago"   
sudo journalctl --since "2019-03-10" --until "2019-03-11 03:00"
sudo journalctl -b # last boot 
sudo journalctl -k # kernel messages
sudo journalctl -p er # by priority (emerg|alert|crit|err|warning|info|debug)
sudo journalctl -u sshd # by unit 
sudo journalctl _UID=1000 # by user id

Les exemples peuvent être combinés!


5
Ok maintenant c'est trop cool!
George Udosen

2
Souvent, il n'est même pas sudonécessaire (en particulier si l'utilisateur est membre du admgroupe, qui est généralement l'utilisateur "principal").
PerlDuck

4

En général, kern.logc'est un fichier texte. Mais il arrive parfois qu'il contienne des données binaires , en particulier lorsque le système est tombé en panne auparavant et que le système n'a pas pu fermer correctement le fichier. Vous pouvez alors remarquer des lignes contenant du texte comme ^@^@^@^@^@^@^@^@^@et tel.

Si vous grepremarquez que son entrée est binaire , il arrête généralement le traitement et imprime à la ... binary file ...place. Mais il y a un interrupteur pour changer ce comportement. Depuis la page de manuel :

[...]
File and Directory Selection
   -a, --text
          Process a binary file as if it were text; 
          this is equivalent to the --binary-files=text option.
[...]

Vous pouvez essayer ce qui suit:

$ grep -a -i "Apr  5" /var/log/kern.log  | grep -i "error\|warn\|kernel"

(Mais je préférerais en fait la journalctlsolution donnée dans une autre réponse.)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.