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.
-
Trigger : Telegram
- Ajoutez un nœud “Telegram Trigger”.
- Configurez-le avec votre token de bot Telegram. Il écoutera les messages envoyés à votre bot.
-
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 extrairedns
etgoogle.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 } }];
- Ajoutez un nœud “Code” (ou “Function”) pour extraire les informations du message. Par exemple, pour un message
-
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”.
-
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.
- La réponse du Blackbox Exporter est au format Prometheus. Nous pouvons utiliser un simple nœud “IF” pour vérifier si la ligne
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 :
- iperf3 : Pour mesurer la bande passante maximale entre deux points. Vous pouvez créer un script shell que N8N exécute via SSH.
- mtr (My Traceroute) : Combine les fonctionnalités de
traceroute
etping
pour fournir une vue détaillée de la latence et de la perte de paquets sur un chemin réseau. - gRPC Health Checking Protocol : Si vous utilisez gRPC, vous pouvez utiliser des outils comme
grpc-health-probe
pour vérifier la santé de vos services gRPC, et l’appeler depuis N8N.
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.