DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesScripting Bash et administration système Linux08 - Projet Capstone : Automatisation et supervision avec Bash

Détails

  • 1h
  • Avancé

Objectifs

  • Écrire un script Bash complet avec fonctions et gestion d'erreurs
  • Traiter des données avec awk et sed
  • Planifier des tâches avec cron
  • Créer et gérer un service systemd personnalisé
  • Mettre en place un système de supervision automatisé
Module Scripting Bash et administration système Linux

Exercice 08 : Projet Capstone - Automatisation et Supervision avec Bash

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Écrire un script Bash robuste avec set -euo pipefail, fonctions et arguments
  • ✅ Extraire et transformer des données avec awk et sed
  • ✅ Planifier l'exécution automatique de scripts avec cron
  • ✅ Créer un service systemd personnalisé qui démarre au boot
  • ✅ Assembler un système de supervision complet qui surveille des services

Durée estimée : 1h

Difficulté : ⭐⭐⭐⭐⭐ (Expert)

Prérequis :

  • Avoir complété les exercices 01 à 07
  • Avoir suivi le module Linux Avancé (scripting Bash, awk, sed, cron, systemd)
  • Un système Ubuntu/Debian avec accès sudo

📖 Contexte

Vous êtes ingénieur DevOps dans une startup. L'équipe a besoin d'un système de supervision léger, 100 % ligne de commande, qui :

  1. Surveille l'état de plusieurs services
  2. Génère un rapport d'état toutes les heures
  3. Tourne en tant que service systemd au démarrage
  4. Enregistre les métriques dans un fichier CSV analysable

📋 Énoncé

Construisez ce système de supervision en 5 tâches. Chaque tâche produit un livrable concret.


🧭 Déroulement de l'exercice

Tâche 1 : Script de surveillance des services

Écrivez /opt/supervision/healthcheck.sh qui :

  • Prend en argument une liste de services (./healthcheck.sh nginx ssh cron)
  • Pour chaque service, vérifie s'il est actif avec systemctl is-active
  • Affiche une ligne CSV : timestamp,service,status (ex : 2026-04-29T10:00:00,nginx,OK)
  • Ajoute chaque ligne à /var/log/supervision/services.csv
  • Retourne un code de sortie non-nul si au moins un service est DOWN

Indice : date -Iseconds produit un timestamp ISO 8601. systemctl is-active --quiet service retourne 0 si actif. Structurez votre script avec set -euo pipefail et une fonction check_service(). Créez le répertoire de log avec mkdir -p si absent.

Vérification : sudo bash /opt/supervision/healthcheck.sh nginx ssh && echo "Tous OK" doit afficher "Tous OK" et créer /var/log/supervision/services.csv.


Tâche 2 : Analyse du CSV avec awk et sed

Écrivez /opt/supervision/rapport.sh qui lit /var/log/supervision/services.csv et produit :

  1. Le nombre total de vérifications par service (awk)
  2. Le nombre de fois où chaque service était DOWN (awk)
  3. Un affichage nettoyé où OK est remplacé par ✓ et DOWN par ✗ (sed)

Indice : Le CSV a 3 colonnes séparées par des virgules. awk -F',' définit le séparateur. Pour compter : awk -F',' '{count[$2]++} END {for (s in count) print s, count[s]}'. Pour sed : sed 's/,OK$/,✓/' | sed 's/,DOWN$/,✗/'.

Vérification : bash /opt/supervision/rapport.sh doit afficher les statistiques par service et le CSV formaté.


Tâche 3 : Planification avec cron

Configurez cron pour exécuter le healthcheck toutes les 5 minutes en vérifiant nginx, ssh et cron. Redirigez les erreurs vers /var/log/supervision/cron-errors.log.

Indice : crontab -e (en root, donc sudo crontab -e) ouvre l'éditeur. Une entrée cron toutes les 5 min commence par */5 * * * *. Redirigez stdout vers /dev/null et stderr vers le fichier de log : >> /dev/null 2>> /var/log/supervision/cron-errors.log.

Vérification : sudo crontab -l | grep healthcheck doit afficher votre entrée cron.


Tâche 4 : Service systemd personnalisé

Créez un service systemd /etc/systemd/system/supervision.service qui :

  • Lance /opt/supervision/healthcheck.sh nginx ssh cron au démarrage
  • Se relance automatiquement en cas d'échec (Restart=on-failure)
  • S'exécute en tant que root
  • Démarre après le réseau (After=network.target)

Activez et démarrez le service.

Indice : Un fichier unit systemd minimal a 3 sections : [Unit], [Service] et [Install]. La directive ExecStart= définit la commande. WantedBy=multi-user.target dans [Install] est le target standard pour les services système. Après création, rechargez systemd avec systemctl daemon-reload.

Vérification : systemctl status supervision doit afficher "active (running)" ou "active (exited)".


Tâche 5 : Script de rapport quotidien

Écrivez /opt/supervision/rapport-quotidien.sh qui :

  1. Calcule le taux de disponibilité de chaque service (lignes OK / total lignes × 100)
  2. Alerte (affichage en rouge dans le terminal) si un service a un taux < 95 %
  3. Génère un fichier /tmp/rapport-$(date +%Y%m%d).txt avec le résumé

Indice : Le taux de dispo en awk : awk -F',' -v service="nginx" '$2==service {total++; if($3=="OK") ok++} END {printf "%.1f%%\n", (ok/total)*100}'. Pour coloriser en rouge dans le terminal : echo -e "\e[31mALERTE : ...\e[0m". La comparaison en bash pour les flottants : awk -v rate="$rate" 'BEGIN {exit (rate >= 95)}'.

Vérification : bash /opt/supervision/rapport-quotidien.sh doit afficher les taux et créer le fichier rapport.


🗂️ Mini-Projet : Système de supervision complet

Assemblez les 5 tâches en validant l'ensemble du système :

bash
# 1. Préparer la structure
sudo mkdir -p /opt/supervision /var/log/supervision

# 2. Générer des données de test (simuler 10 vérifications)
for i in $(seq 1 10); do
  sudo bash /opt/supervision/healthcheck.sh nginx ssh cron
  sleep 1
done

# 3. Vérifier le CSV
head -5 /var/log/supervision/services.csv

# 4. Lancer l'analyse
bash /opt/supervision/rapport.sh

# 5. Vérifier cron
sudo crontab -l

# 6. Tester le service systemd
systemctl status supervision

# 7. Générer le rapport quotidien
bash /opt/supervision/rapport-quotidien.sh
cat /tmp/rapport-$(date +%Y%m%d).txt

Checkpoints de validation :

  • /opt/supervision/healthcheck.sh accepte des arguments et produit un CSV valide
  • /var/log/supervision/services.csv existe et contient des lignes timestamp,service,OK
  • bash /opt/supervision/rapport.sh affiche des statistiques par service
  • sudo crontab -l | grep "*/5" retourne l'entrée cron configurée
  • systemctl status supervision affiche "active"
  • bash /opt/supervision/rapport-quotidien.sh crée /tmp/rapport-$(date +%Y%m%d).txt

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Script de surveillance des services
  • Tâche 2 : Analyse du CSV avec awk et sed
  • Tâche 3 : Planification avec cron
  • Tâche 4 : Service systemd personnalisé
  • Tâche 5 : Script de rapport quotidien
  • 🗂️ Mini-Projet : Système de supervision complet