Introduction
C’est votre troisième jour chez LabEx Corporation, et le projet Phoenix vient de subir une catastrophe ! En arrivant au bureau, vous trouvez Sarah Chen et l’équipe de développement en pleine crise. L’application que vous avez aidé à organiser hier rencontre des erreurs critiques pendant sa première phase majeure de test.
Les alertes d’urgence affluent dans les systèmes de supervision, les utilisateurs signalent des défaillances de l’application et le pipeline de déploiement est complètement bloqué. Sarah se tourne vers vous, désespérée : l’ingénieur DevOps senior est absent pour maladie et la date limite du projet approche à grands pas.
« Nous avons besoin de notre meilleur enquêteur », vous dit Sarah en vous tendant le rapport d’incident. « Votre méthode systématique pour organiser nos fichiers était exactement ce qu’il nous fallait. Maintenant, nous avons besoin de cette même rigueur pour résoudre ce mystère. »
Votre mission consiste à examiner en profondeur le serveur du projet Phoenix, à analyser les journaux et les fichiers de configuration, puis à découvrir la cause racine de ces défaillances. Vous utiliserez des outils avancés de la ligne de commande Linux pour rassembler les indices et rétablir la stabilité de l’application que votre équipe a mis tant d’efforts à construire. L’avenir du projet Phoenix — et peut-être votre carrière chez TechNova — dépend de vos talents d’enquêteur !
Examiner le contenu du fichier journal de l’application
Votre première tâche consiste, en tant qu’enquêteur, à vérifier le fichier journal de l’application du projet Phoenix. L’application écrit ses journaux dans ~/project/logs/app.log. Une grande quantité de messages peut être difficile à examiner ; vous devez donc trouver rapidement les messages d’erreur critiques pour comprendre ce qui ne va pas dans le système que vous avez aidé à organiser hier.
Tâches
- Filtrez le fichier
~/project/logs/app.logafin de trouver toutes les lignes contenant le motERROR. - Enregistrez les lignes filtrées dans un nouveau fichier nommé
~/project/error_report.txt.
Exigences
- Vous devez utiliser un outil de la ligne de commande pour rechercher le fichier.
- Le fichier d’entrée de la recherche est
~/project/logs/app.log. - La sortie doit être enregistrée dans un fichier nommé
~/project/error_report.txt, situé dans le répertoire~/project. - Le fichier de sortie doit contenir uniquement les lignes contenant le mot
ERROR.
Indications
- La commande
grepest parfaitement adaptée à la recherche de motifs dans des fichiers texte. - Pour enregistrer la sortie d’une commande dans un fichier, vous pouvez utiliser l’opérateur de redirection
>. Il crée le fichier s’il n’existe pas ou l’écrase s’il existe déjà.
Exemples
Après avoir filtré correctement le fichier journal, le fichier ~/project/error_report.txt doit contenir uniquement les lignes d’erreur :
$ cat ~/project/error_report.txt
[2023-10-26 10:00:03] ERROR: Failed to process payment transaction #12345.
[2023-10-26 10:00:05] ERROR: NullPointerException at com.innovatech.Billing.process(Billing.java:101).
Le fichier doit contenir exactement 2 lignes, qui commencent toutes deux par un horodatage et contiennent le mot « ERROR ».
Examiner les messages de démarrage du système
Les erreurs de l’application peuvent être le symptôme d’un problème matériel ou lié au noyau. Le tampon circulaire du noyau est un bon endroit pour rechercher ce type de problème : il contient les messages du processus de démarrage du système et des opérations des pilotes.
Tâches
- Examinez les messages du noyau afin de trouver les lignes liées à
failou àerror. - Enregistrez ces résultats dans un fichier nommé
~/project/boot_issues.txt.
Exigences
- Vous devez utiliser la commande
dmesgpour afficher les messages du noyau. - La recherche de
failouerrordoit respecter la casse. - Les résultats doivent être enregistrés dans un fichier nommé
~/project/boot_issues.txt. - Remarque : vous devrez peut-être disposer de privilèges administrateur (
sudo) pour accéder aux messages du noyau.
Indications
- La commande
dmesgaffiche les messages du noyau. Vous pouvez transmettre sa sortie à une autre commande au moyen d’un « tube » pour la filtrer. - L’opérateur de tube
|envoie la sortie d’une commande vers l’entrée d’une autre commande. - L’option
-ide la commandegreprend la recherche insensible à la casse. - Pour rechercher plusieurs motifs à la fois, par exemple
failOUerror, vous pouvez utilisergrep -E 'pattern1|pattern2'. - Remarque : si vous obtenez l’erreur « Operation not permitted », essayez d’exécuter la commande avec
sudoafin d’obtenir les privilèges nécessaires.
Exemples
Après avoir filtré correctement les messages du noyau, le fichier ~/project/boot_issues.txt doit contenir les messages système pertinents :
$ cat ~/project/boot_issues.txt
[ 0.330755] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.
[ 1.026520] RAS: Correctable Errors collector initialized.
[ 28.260800] kernel: [ 10.123456] my-driver: probe of 0000:00:1f.0 failed with error -2
Le fichier doit contenir des messages du noyau incluant des mots comme « fail » ou « error », sans distinction entre majuscules et minuscules, et signalant d’éventuels problèmes matériels ou liés aux pilotes pendant le démarrage du système.
Examiner le fichier de configuration du serveur web
Aucun problème matériel critique n’a été trouvé. Le problème se situe peut-être dans la configuration du serveur web. Examinons le fichier de configuration de Nginx pour voir comment le serveur est configuré. Une mauvaise configuration, par exemple un nombre trop faible de processus worker, peut parfois créer des goulots d’étranglement et entraîner des défaillances de l’application sous charge.
Tâches
- Recherchez dans le fichier de configuration du serveur web situé à
~/project/config/nginx.conf. - Trouvez la ligne contenant la directive
worker_processes. - Ajoutez cette ligne à la fin du fichier
~/project/error_report.txtcréé à la première étape.
Exigences
- Le fichier d’entrée est
~/project/config/nginx.conf. - Vous devez ajouter le résultat à la fin de
~/project/error_report.txt, sans l’écraser.
Indications
- Vous pouvez utiliser à nouveau
grep. - Pour ajouter la sortie à la fin d’un fichier au lieu de l’écraser, utilisez l’opérateur
>>.
Exemples
Après avoir ajouté la ligne worker_processes à votre rapport d’erreurs existant, le fichier ~/project/error_report.txt doit contenir les lignes d’erreur initiales ainsi que la nouvelle ligne de configuration :
$ cat ~/project/error_report.txt
[2023-10-26 10:00:03] ERROR: Failed to process payment transaction #12345.
[2023-10-26 10:00:05] ERROR: NullPointerException at com.innovatech.Billing.process(Billing.java:101).
worker_processes 4;
Le fichier doit contenir 3 lignes au total : les 2 lignes d’erreur initiales et 1 nouvelle ligne contenant « worker_processes 4; ».
Comparer les fichiers de configuration de staging et de production
Les différences de configuration sont une cause fréquente de problèmes en production. Une fonctionnalité peut fonctionner parfaitement en staging, mais échouer en production à cause d’une petite différence de configuration. Comparons les fichiers de configuration de l’application dans les deux environnements afin de repérer d’éventuelles différences.
Tâches
- Comparez le fichier de configuration du staging
~/project/config/staging/app.confavec celui de la production~/project/config/production/app.conf. - Enregistrez les différences dans un nouveau fichier nommé
~/project/config_diff.txt.
Exigences
- Vous devez utiliser la commande
diff. - La sortie présentant les différences doit être enregistrée dans
~/project/config_diff.txt.
Indications
- La commande
diffest spécialement conçue pour comparer deux fichiers ligne par ligne. - La syntaxe de base est
diff file1 file2. Elle indique les modifications à apporter àfile1pour le rendre identique àfile2. - L’ordre des fichiers est important !
diff A Betdiff B Aproduisent des sorties différentes. - Vous pouvez rediriger la sortie de
diffvers un fichier, comme vous l’avez fait avecgrep.
Exemples
Après avoir comparé les fichiers de configuration du staging et de la production, le fichier ~/project/config_diff.txt doit afficher les différences entre les deux environnements :
$ cat ~/project/config_diff.txt
1,5c1,5
< ## Staging Configuration
< database.url=jdbc:mysql://staging-db:3306/nexus
< api.key=staging_key_abc123
< feature.flag.new_dashboard=true
< timeout.ms=3000
---
> ## Production Configuration
> database.url=jdbc:mysql://prod-db:3306/nexus
> api.key=prod_key_xyz789
> feature.flag.new_dashboard=false
> timeout.ms=5000
La sortie de diff indique les modifications à apporter au fichier de configuration du staging pour le rendre identique à celui de la production. Les lignes commençant par < proviennent du fichier de staging, tandis que les lignes commençant par > proviennent du fichier de production. Cela révèle que l’environnement de production utilise des URL de base de données, des clés d’API, des indicateurs de fonctionnalité et des valeurs de délai d’attente différents de ceux du staging.
Vérifier la cohérence des répertoires entre les serveurs
La différence de configuration constitue une piste importante ! Il semble que le serveur de production puisse également être dépourvu de certains fichiers essentiels présents sur le serveur de staging. Cela pourrait être dû à un déploiement ayant échoué. Simulons cette situation en comparant deux répertoires qui représentent les structures de fichiers de deux serveurs différents.
Tâches
- Vous disposez de deux répertoires :
/home/labex/project/server1_filesreprésente le serveur de staging, et/home/labex/project/server2_filesreprésente le serveur de production. - Comparez ces deux répertoires afin de déterminer quels fichiers sont propres à
server1_files. - Enregistrez la sortie complète de la comparaison dans un fichier nommé
/home/labex/project/missing_files.txt.
Exigences
- Vous devez utiliser la commande
diffpour comparer les deux répertoires. - La sortie doit être enregistrée dans
/home/labex/project/missing_files.txt.
Indications
- La commande
diffpeut également comparer des répertoires lorsque vous lui fournissez des chemins de répertoires plutôt que des chemins de fichiers. - Il est recommandé d’utiliser l’option
-rou--recursiveavecdiffpour comparer des répertoires, car cette option compare récursivement tous les fichiers qu’ils contiennent. - Le format de sortie de
diffpour les répertoires indique explicitement quels fichiers sont « Only in » un répertoire donné. - Comme pour les fichiers, l’ordre des répertoires est important.
diff dir1 dir2indique ce qui se trouve dansdir1mais pas dansdir2, tandis quediff dir2 dir1affiche l’inverse.
Exemples
Après avoir comparé les deux répertoires des serveurs, le fichier /home/labex/project/missing_files.txt doit indiquer quels fichiers sont absents du serveur de production :
$ cat /home/labex/project/missing_files.txt
Only in /home/labex/project/server1_files: asset2.js
Cette sortie indique que asset2.js existe dans le premier répertoire (server1_files, qui représente le serveur de staging), mais qu’il est absent du deuxième répertoire (server2_files, qui représente le serveur de production). En comparant d’abord le staging, puis la production, vous pouvez identifier facilement les fichiers absents de la production, ce qui pourrait expliquer certaines défaillances de l’application.
Résumé
Excellent travail d’enquête ! Vous avez identifié avec succès les causes racines des défaillances critiques du projet Phoenix et fourni à Sarah Chen ainsi qu’à l’équipe de développement des informations concrètes pour résoudre ces problèmes.
Grâce à votre investigation méthodique, vous maîtrisez désormais plusieurs commandes essentielles de dépannage :
grep: pour filtrer les fichiers journaux et extraire les informations critiques sur les erreurs.dmesg: pour examiner les problèmes matériels et les problèmes liés au noyau au niveau du système.diff: pour comparer les fichiers de configuration et repérer les différences entre les environnements.- Les pipelines de commandes et la redirection : pour traiter et documenter efficacement vos résultats.
Votre approche méthodique de l’analyse des journaux a évité au projet Phoenix une défaillance potentiellement catastrophique. L’équipe de développement dispose maintenant d’une direction claire pour corriger les différences de configuration et les fichiers de déploiement manquants que vous avez découverts.
Sarah Chen a été tellement impressionnée par vos talents d’enquêteur qu’elle vous recommande pour un poste dans la sécurité. Demain, vous endosserez le rôle du Gardien de la Forteresse afin de sécuriser l’infrastructure du projet Phoenix et de la protéger contre les menaces futures !



