Monitoring de Scripts

Surveillez tous vos scripts quel que soit le langage

Les scripts automatisés sont la colonne vertébrale de l'infrastructure IT moderne. Scripts de maintenance, traitements de données, migrations, synchronisations, exports - ces programmes s'exécutent souvent en arrière-plan, sans supervision humaine directe.

Le problème majeur avec les scripts est leur nature silencieuse. Un script PHP qui échoue avec une erreur fatale ne prévient personne. Un script Python dont une dépendance est cassée s'arrête sans bruit. Un script Bash qui ne trouve pas le fichier attendu termine avec un code d'erreur que personne ne vérifie.

Le monitoring heartbeat résout ce problème fondamental : au lieu de vérifier le script lui-même, on vérifie qu'il a signalé sa bonne exécution. Si le signal attendu n'arrive pas, l'alerte est déclenchée. Simple, efficace, universel.

Pourquoi Surveiller vos Scripts ?

Chaque script non surveillé est une bombe à retardement potentielle :

  • Échecs silencieux : Un script qui plante n'envoie généralement aucune notification. Sans monitoring, vous ne saurez jamais qu'il a échoué.
  • Problèmes de planification : Cron mal configuré, serveur redémarré, tâche planifiée désactivée - le script ne démarre jamais et personne ne s'en rend compte.
  • Dégradation progressive : Un script qui met de plus en plus de temps à s'exécuter peut être le signe d'un problème croissant (base de données qui grossit, fuites mémoire).
  • Dépendances fragiles : Une mise à jour système, un module supprimé, une API modifiée - et votre script cesse de fonctionner sans prévenir.

Types d'Erreurs que le Monitoring Détecte

Le monitoring heartbeat permet de détecter trois grandes catégories de problèmes :

Erreurs de démarrage

  • Cron ou planificateur mal configuré
  • Permissions insuffisantes sur le script ou ses fichiers
  • Environnement non initialisé (variables manquantes)

Erreurs d'exécution

  • Exception non gérée ou erreur fatale
  • Timeout dépassé (script trop lent)
  • Ressource inaccessible (base de données, fichier, API)

Erreurs logiques

  • Script termine mais produit un résultat incorrect
  • Traitement partiel (certains éléments échouent)
  • Validation échouée après traitement

Exemples de Code par Langage

L'intégration du heartbeat se fait en quelques lignes de code, quel que soit votre langage :

Bash

#!/bin/bash
# script_backup.sh - Exemple avec monitoring heartbeat

HEARTBEAT_URL="https://monitao.com/ping/VOTRE_TOKEN"

# Fonction de gestion d'erreur
handle_error() {
    curl -s "$HEARTBEAT_URL/fail?error=$1" > /dev/null
    exit 1
}

# Exécution du script principal
echo "Démarrage du backup..."

if ! rsync -av /data /backup; then
    handle_error "rsync_failed"
fi

if ! gzip /backup/data.tar; then
    handle_error "gzip_failed"
fi

# Ping de succès à la fin
curl -s "$HEARTBEAT_URL" > /dev/null
echo "Backup terminé avec succès"

Le ping n'est envoyé que si toutes les étapes réussissent. En cas d'erreur, un ping d'échec est envoyé avec le détail.

PHP

getMessage()));
    error_log("Script échoué: " . $e->getMessage());
    exit(1);
}

Le bloc try/catch assure que le ping n'est envoyé qu'en cas de succès complet. Les erreurs sont loggées et signalées.

Python

#!/usr/bin/env python3
# script_sync.py - Exemple avec monitoring heartbeat

import requests
import sys

HEARTBEAT_URL = "https://monitao.com/ping/VOTRE_TOKEN"

def main():
    try:
        # Logique métier
        data = fetch_remote_data()
        processed = transform_data(data)
        save_results(processed)

        # Ping de succès
        requests.get(HEARTBEAT_URL, timeout=10)
        print("Synchronisation terminée")

    except Exception as e:
        # Ping d'échec
        requests.get(f"{HEARTBEAT_URL}/fail",
                    params={"error": str(e)},
                    timeout=10)
        print(f"Erreur: {e}", file=sys.stderr)
        sys.exit(1)

if __name__ == "__main__":
    main()

Le module requests gère proprement les appels HTTP. Le timeout évite de bloquer en cas de problème réseau.

Node.js

// script_process.js - Exemple avec monitoring heartbeat

const HEARTBEAT_URL = "https://monitao.com/ping/VOTRE_TOKEN";

async function main() {
    try {
        // Logique métier
        const data = await fetchData();
        const result = await processData(data);
        await saveResult(result);

        // Ping de succès
        await fetch(HEARTBEAT_URL);
        console.log("Traitement terminé");

    } catch (error) {
        // Ping d'échec
        await fetch(`${HEARTBEAT_URL}/fail?error=${encodeURIComponent(error.message)}`);
        console.error("Erreur:", error.message);
        process.exit(1);
    }
}

main();

L'async/await rend le code lisible. Le fetch natif de Node.js 18+ simplifie l'intégration.

Patterns d'Intégration

Plusieurs stratégies s'offrent à vous selon votre architecture :

  • Ping en fin de script : Le pattern le plus simple - ajoutez l'appel HTTP comme dernière instruction. Si le script échoue avant, le ping n'est pas envoyé.
  • Try/catch global : Encapsulez toute la logique dans un bloc try/catch. Le ping de succès dans le try, le ping d'échec dans le catch.
  • Ping conditionnel : Vérifiez le résultat avant d'envoyer le ping. Un script peut "terminer" sans avoir produit le bon résultat.
  • Script wrapper : Un script englobant qui appelle le script principal et gère le heartbeat. Utile pour les scripts qu'on ne peut pas modifier.

Bonnes Pratiques

Pour un monitoring efficace de vos scripts :

  • Testez manuellement d'abord : Exécutez le script à la main au moins une fois avant de le planifier. Vérifiez que le ping arrive bien.
  • Ajoutez un timeout sur le ping : Un problème réseau ne doit pas bloquer votre script. Utilisez un timeout de 5-10 secondes sur l'appel HTTP.
  • Loggez avant de pinger : En cas d'erreur, loggez le détail localement AVANT d'envoyer le ping d'échec. Si le ping échoue aussi, vous aurez toujours le log.
  • Un heartbeat par script : Ne réutilisez pas le même heartbeat pour plusieurs scripts. Vous perdriez la granularité de détection.

Checklist Monitoring de Script

  • Script testé manuellement avec succès
  • Heartbeat créé dans MoniTao avec le bon timeout
  • Appel de ping ajouté à la fin du script
  • Gestion d'erreur avec ping fail implémentée
  • Timeout configuré sur l'appel HTTP du ping
  • Première exécution planifiée vérifiée

Questions Fréquentes

Mon script PHP plante avec une erreur fatale. Le ping est-il envoyé ?

Non, une erreur fatale (parse error, out of memory, etc.) arrête l'exécution immédiatement. Le ping n'aura pas le temps d'être envoyé. C'est justement l'intérêt du heartbeat : l'absence de ping déclenche l'alerte.

Comment surveiller un script qui dure 2 heures ?

Configurez un timeout de 2h30 à 3h dans MoniTao (durée normale + marge de 25-50%). Pour les scripts très longs, ajoutez des pings de progression intermédiaires pour détecter les blocages avant le timeout global.

Puis-je surveiller des scripts sur plusieurs serveurs ?

Oui, chaque script peut utiliser le même heartbeat si vous voulez juste savoir qu'au moins un serveur l'exécute. Pour une surveillance individuelle, créez un heartbeat par serveur avec un nom explicite (backup-server-1, backup-server-2).

Le ping ajoute-t-il de la latence à mon script ?

Environ 50-150ms selon votre connexion. C'est négligeable pour 99% des scripts. Si c'est critique, vous pouvez faire l'appel en mode asynchrone (fire-and-forget) en Bash ou utiliser des promesses en Node.js.

Mon script utilise un VPN. Le ping peut-il sortir ?

Ça dépend de votre configuration VPN. Si le trafic vers monitao.com est bloqué, configurez une exception ou utilisez un proxy local qui transmet les pings vers l'extérieur.

Puis-je envoyer des métadonnées avec le ping ?

Oui, ajoutez des paramètres GET à l'URL : ?duration=120&items=5000&status=partial. Ces données sont stockées et visibles dans l'historique du heartbeat.

Fiabilisez vos Scripts Automatisés

Les scripts automatisés sont essentiels au bon fonctionnement de votre infrastructure. Backups, synchronisations, imports, exports, maintenance - ces processus critiques ne peuvent pas être laissés sans surveillance. Un script qui échoue silencieusement, c'est une bombe à retardement.

Le monitoring heartbeat avec MoniTao transforme chaque script en processus supervisé. Quelques lignes de code suffisent pour avoir la certitude que vos scripts s'exécutent comme prévu, et être alerté immédiatement en cas de problème.

Prêt à dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.