Que vous soyez administrateur système, développeur ou responsable DevOps, la lecture des fichiers de logs est une tâche quotidienne. L’outil grep (Global Regular Expression Print) est l’un des plus puissants et des plus rapides pour filtrer ces fichiers volumineux.

Dans cet article, nous allons explorer 10 exemples concrets d’utilisation de grep pour détecter des erreurs dans divers types de logs (système, applications, serveurs web, etc.). Chaque exemple est accompagné d’explications et de variantes pour affiner vos recherches.


1. Rechercher une erreur spécifique dans un fichier

La commande la plus simple consiste à chercher le mot-clé ERROR dans un fichier de log.

bash grep "ERROR" /var/log/syslog

Cette commande affiche toutes les lignes contenant le mot "ERROR". Pour ignorer la casse (error, Error, ERROR), utilisez l’option -i :

bash grep -i "error" /var/log/syslog


2. Rechercher récursivement dans plusieurs fichiers

Pour analyser un dossier entier contenant des logs (par exemple /var/log/), utilisez l’option récursive -r :

bash grep -r "ERROR" /var/log/

Ajoutez -n pour afficher les numéros de ligne, ce qui est très utile pour localiser précisément une erreur :

bash grep -rn "ERROR" /var/log/


3. Afficher le contexte autour de l’erreur

Une erreur isolée perd souvent son sens sans son contexte. Les options -A, -B et -C permettent d’afficher les lignes avant, après ou autour du résultat :

bash grep -A 5 "ERROR" app.log # Affiche l'erreur et les 5 lignes suivantes grep -B 5 "ERROR" app.log # Affiche les 5 lignes précédant l'erreur grep -C 5 "ERROR" app.log # Affiche 5 lignes avant et après


4. Compter le nombre d’erreurs

Pour évaluer la fréquence d’une erreur sans afficher toutes les lignes, utilisez -c :

bash grep -c "ERROR" /var/log/nginx/error.log

Pour compter les occurrences en ignorant la casse :

bash grep -ci "warning" /var/log/syslog


5. Exclure certaines lignes avec -v

L’option -v inverse la recherche. C’est pratique pour ignorer les erreurs bénignes ou les lignes trop verbeuses.

bash grep -v "INFO" app.log | grep "ERROR"

Cette commande affiche les lignes contenant "ERROR" mais en excluant celles qui contiennent également "INFO".


6. Rechercher plusieurs mots-clés (OU logique)

Pour chercher plusieurs types d’erreurs à la fois, utilisez l’option -e ou l’expression régulière | (attention à l’échappement) :

bash grep -E "ERROR|FATAL|CRITICAL" app.log

Ou bien :

bash grep -e "ERROR" -e "FATAL" -e "CRITICAL" app.log


7. Utiliser des expressions régulières avancées

Les logs contiennent souvent des patterns comme des dates, des adresses IP ou des codes d’erreur. Avec -E (extended regex), vous pouvez créer des filtres précis.

Exemple : trouver toutes les erreurs survenues entre 10h et 11h :

bash grep -E "2024-06-15 (10|11):[0-9]{2}:[0-9]{2}.*ERROR" app.log

Exemple : trouver les erreurs liées à une adresse IP spécifique :

bash grep -E "192\.168\.1\.[0-9]{1,3}.*ERROR" /var/log/auth.log


8. Rechercher en temps réel avec tail -f

Pour surveiller un fichier de log en direct et ne voir apparaître que les erreurs, combinez tail -f avec grep :

bash tail -f /var/log/syslog | grep --line-buffered "ERROR"

L’option --line-buffered assure que grep affiche immédiatement chaque ligne trouvée.


9. Enregistrer les résultats dans un fichier

Lorsque vous analysez des logs volumineux, il est souvent utile de rediriger la sortie vers un fichier pour une analyse ultérieure :

bash grep -rn "ERROR" /var/log/ > erreurs_$(date +%Y%m%d).txt

Cela crée un fichier nommé erreurs_20240615.txt contenant toutes les lignes d’erreur avec leurs chemins et numéros de ligne.


10. Combiner grep avec d’autres outils (awk, sed, cut)

Pour extraire des informations spécifiques (comme les codes d’erreur, les horodatages ou les utilisateurs), combinez grep avec awk ou cut.

Exemple : extraire uniquement la colonne du message d’erreur après le timestamp :

bash grep "ERROR" app.log | awk '{ $1=""; $2=""; $3=""; print $0 }'

Exemple : lister les types d’erreurs uniques dans un fichier :

bash grep -oE "ERROR [A-Z_]+" app.log | sort | uniq -c

Cette commande utilise -o pour n’afficher que la partie correspondante du motif, puis compte les occurrences uniques.


Bonus : Créer un alias pratique

Pour gagner du temps, ajoutez ces alias dans votre ~/.bashrc ou ~/.zshrc :

bash alias log-errors='grep -E "ERROR|FATAL|CRITICAL"' alias log-watch='tail -f /var/log/syslog | grep --line-buffered -E "ERROR|WARNING"'

Rechargez votre configuration avec source ~/.bashrc et utilisez-les directement.


Conclusion

grep est bien plus qu’un simple outil de recherche textuelle. Avec ces 10 exemples, vous pouvez désormais explorer efficacement vos fichiers de logs, identifier rapidement les erreurs critiques, et automatiser une partie de votre veille technique.

Que ce soit pour un dépannage urgent ou une analyse de fiabilité à long terme, maîtriser grep est une compétence indispensable pour tout professionnel de l’informatique.

Prochaine étape : essayez d’intégrer ces commandes dans des scripts de surveillance automatisés ou combinez-les avec cron pour recevoir des rapports d’erreurs quotidiens.