Agent IA de Diagnostic Réseau

Dans un monde où la disponibilité des services est reine, pouvoir diagnostiquer rapidement un problème réseau est crucial. Plutôt que de se connecter manuellement à des serveurs pour lancer des ping ou des curl, pourquoi ne pas créer un agent intelligent qui le fait pour nous, de n’importe où, via une simple conversation ?

Cet article vous guidera dans la création d’un tel agent en utilisant N8N comme orchestrateur et le Prometheus Blackbox Exporter comme sonde de diagnostic décentralisée.

Architecture de la Solution

Notre objectif est de pouvoir envoyer une commande comme /diag dns google.com à un bot Telegram et de recevoir en retour le résultat d’une résolution DNS effectuée depuis un serveur distant.

Voici comment les différents composants interagissent :

graph TD
    subgraph "👨‍💻 Utilisateur"
        A[Admin Telegram]
    end

    subgraph "🤖 Orchestrateur (N8N)"
        B(Webhook Telegram)
        C{Type de diagnostic ?}
        D[Test DNS]
        E[Test HTTP]
        F[Test TCP]
        G[Requête vers Blackbox]
        H{Résultat ?}
        I[✅ Succès]
        J[❌ Échec]
        K[Réponse à l'Admin]
    end

    subgraph "📡 Sonde (Blackbox Exporter)"
        L[Sonde Blackbox]
        M[Cible du test]
    end

    A -- "/diag dns google.com" --> B
    B --> C
    C -- DNS --> D
    C -- HTTP --> E
    C -- TCP --> F
    D --> G
    E --> G
    F --> G
    G -- "GET /probe?..." --> L
    L --> M
    G --> H
    H -- Oui --> I
    H -- Non --> J
    I --> K
    J --> K
    K --> A

Étape 1 : Déployer les Outils avec Docker Compose

La première étape consiste à mettre en place notre infrastructure. Nous utiliserons Docker Compose pour lancer N8N et le Blackbox Exporter. Créez un fichier docker-compose.yml avec le contenu suivant :

version: '3.7'

services:
  n8n:
    image: n8nio/n8n
    container_name: n8n_workflow_automation
    restart: always
    ports:
      - "5678:5678"
    environment:
      - GENERIC_TIMEZONE=Europe/Paris
    volumes:
      - ./n8n_data:/home/node/.n8n

  blackbox_exporter:
    image: prom/blackbox-exporter:latest
    container_name: blackbox_exporter
    command:
      - '--config.file=/etc/blackbox_exporter/config.yml'
    volumes:
      - ./blackbox.yml:/etc/blackbox_exporter/config.yml
    ports:
      - "9115:9115"
    restart: always

Étape 2 : Configurer le Blackbox Exporter

Le Blackbox Exporter a besoin d’un fichier de configuration pour savoir quels types de tests (modules) il peut effectuer. Créez un fichier blackbox.yml :

modules:
  http_2xx:
    prober: http
    timeout: 5s
    http:
      valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
      method: GET
  tcp_connect:
    prober: tcp
    timeout: 5s
  icmp:
    prober: icmp
    timeout: 5s
  dns:
    prober: dns
    timeout: 5s
    dns:
      query_name: "example.com" # Sera remplacé par le paramètre 'target'

Lancez le tout avec docker-compose up -d. Votre Blackbox Exporter est maintenant prêt à recevoir des requêtes sur le port 9115.

Étape 3 : Créer le Workflow N8N

Maintenant, connectez-vous à votre interface N8N (http://localhost:5678) et créez un nouveau workflow.

  1. Trigger : Telegram

    • Ajoutez un nœud “Telegram Trigger”.
    • Configurez-le avec votre token de bot Telegram. Il écoutera les messages envoyés à votre bot.
  2. Extraire la commande et la cible

    • Ajoutez un nœud “Code” (ou “Function”) pour extraire les informations du message. Par exemple, pour un message /diag dns google.com, nous voulons extraire dns et google.com.
    // Exemple de code pour le nœud "Code"
    const text = $json.body.message.text;
    const parts = text.split(' '); // Sépare la commande par des espaces
    
    if (parts.length < 3 || parts[0] !== '/diag') {
      return; // Ignore les messages mal formatés
    }
    
    const module = parts[1]; // "dns", "http", "tcp", etc.
    const target = parts[2]; // "google.com"
    
    // Retourne les données pour les nœuds suivants
    return [{
      json: {
        module: module,
        target: target
      }
    }];
    
  3. Construire et envoyer la requête au Blackbox Exporter

    • Ajoutez un nœud “HTTP Request”.
    • Configurez-le pour faire une requête GET.
    • Utilisez des expressions pour construire l’URL dynamiquement. L’URL doit ressembler à ceci : http://localhost:9115/probe?module={{$json["module"]}}&target={{$json["target"]}}
    • Dans les options, assurez-vous de sélectionner “Response Format: Text” et “Never Error”.
  4. Analyser la réponse et envoyer le résultat

    • La réponse du Blackbox Exporter est au format Prometheus. Nous pouvons utiliser un simple nœud “IF” pour vérifier si la ligne probe_success 1 est présente.
    • Condition : {{$json.data.includes("probe_success 1")}}
    • Si vrai, envoyez un message de succès sur Telegram.
    • Si faux, envoyez un message d’échec.

Aller plus loin : Étendre les capacités de l’agent

Le Blackbox Exporter est excellent, mais il ne couvre pas tout. Pour des diagnostics plus avancés, vous pouvez étendre votre agent avec d’autres outils :

En créant des “agents” de diagnostic spécialisés (chacun dans son propre conteneur Docker) et en les appelant depuis N8N, vous pouvez construire une boîte à outils de dépannage réseau extrêmement puissante et centralisée.

Conclusion

Vous avez maintenant un agent de diagnostic réseau fonctionnel ! En combinant la flexibilité de N8N avec la puissance des outils de diagnostic comme le Blackbox Exporter, vous pouvez réduire considérablement le temps de résolution des incidents. Fini les connexions SSH en urgence pour lancer un simple ping. Désormais, une simple commande depuis votre téléphone suffit pour obtenir une vision claire de l’état de votre réseau, où que vous soyez.