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 :
grepfiltre les lignes contenant "Échec de l'authentification".awkextrait le onzième champ (l'adresse IP).sorttrie les adresses IP.uniq -ccomptabilise les occurrences uniques.sort -rntrie numériquement en ordre décroissant.head -n 5affiche 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).