Analyse des journaux Linux avec grep, awk et les commandes pipe pour diagnostiquer les problèmes

Lorsque vous administrez un serveur Linux, les fichiers journaux sont votre principale source d'informations pour identifier les pannes, les intrusions ou les goulets d'étranglement. Localisés généralement dans /var/log/, ces fichiers requièrent des outils spécialisés pour en extraire des données pertinentes. Voici trois outils essentiels pour maîtriser l'analyse de journaux.

Utilisation de grep pour filtrer les lignes de texte

grep recherche des motifs dans les fichiers et affiche les lignes correspondantes. Par exemple, pour trouver toutes les entrées d'erreur dans un journal Nginx, sans distinction de casse :

grep -i "erreur" /var/log/nginx/error.log

Pour examienr le contexte autour d'une ligne critique, utilisez l'option -C :

grep -C 3 "panne" /var/log/nginx/error.log

Cette commande affiche trois lignes avant et après chaque occurrence du mot "panne".

Manipulation de données avec awk

awk traite les fichiers texte en les divisant en champs. Par défaut, les espaces servent de séparateurs. Pour extraire les adresses IP d'un journal d'accès Nginx (premier champ) :

awk '{print $1}' /var/log/nginx/access.log

Pour lister les URL qui ont retourné un code 404, en supposant que le code d'état est dans le neuvième champ et l'URL dans le septième :

awk '$9 ~ /^404$/ {print $1, $7}' /var/log/nginx/access.log

Ici, la condition vérifie si le neuvième champ correspond exactement à "404".

Création de pipelines avec le symbole pipe |

Le pipe permet de chaîner les commandes, en utilisant la sortie d'une commande come entrée pour la suivante. Par exemple, pour analyser les tentatives de connexion SSH infructueuses et identifier les adresses IP les plus actives :

grep "Échec de l'authentification" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -n 5

Cette séquence :

  • grep filtre les lignes contenant "Échec de l'authentification".
  • awk extrait le onzième champ (l'adresse IP).
  • sort trie les adresses IP.
  • uniq -c comptabilise les occurrences uniques.
  • sort -rn trie numériquement en ordre décroissant.
  • head -n 5 affiche les cinq premières lignes.

Pour une surveillance en temps réel, vous pouvez combiner tail -f avec ces outils :

tail -f /var/log/nginx/access.log | awk '$9 ~ /^50[0-9]$/ {print $0}'

Cette commande affiche en continu les lignes où le code d'état (neuvième champ) correspond à une erreur serveur (500-509).

Étiquettes: grep awk pipe Linux bash

Publié le 16 juin à 21h01