Discovery Agent

Le Discovery Agent surveille l’hote sur lequel il s’execute, decouvre les services, collecte les metriques systeme et processus, et genere des alertes basees sur des seuils.

Vue d’ensemble

Propriete Valeur
Nom du service MugnsoftDiscoveryAgent
Port par defaut 8070
Fichier de configuration discovery_agent.json
Version v4.0.0
Stockage magasin cle-valeur integre (discovery.db, metrics.db, process.db, system.db)

Gestion du service

Commandes CLI

# Install as service and register with the Webserver
discovery_agent install <webserver_ip>:<port>

# Re-register with the Webserver
discovery_agent register <webserver_ip>:<port>

# Migrate to a new Webserver
discovery_agent migrate <webserver_ip>:<port> <jwt_token>

# Start / Stop / Restart
discovery_agent start
discovery_agent stop
discovery_agent restart

# Run in foreground
discovery_agent run

# Remove the service
discovery_agent uninstall

Configuration

Parametres principaux

{
  "name": "agent1",
  "port": "8070",
  "webserver": "192.168.1.100:8050",
  "integratorEndPoint": "192.168.1.100:8052",
  "location": "Datacenter-1",
  "sched": "5MIN",
  "processes": "nginx,mysql,java",
  "ports": "80,443,3306",
  "logLevel": "info"
}
Champ Description Valeur par defaut
name Identifiant unique de l’agent obligatoire
port Port d’ecoute de l’API "8070"
webserver IP:port du Webserver pour l’enregistrement obligatoire
integratorEndPoint IP:port de l’Integrator pour le transfert de donnees (vide)
probeEndPoint Sonde(s) qui executent les controles URL/API/port delegues (obligatoire si urls, apis ou ports sont definis) (vide)
appName Nom de l’application sous laquelle les donnees de cet agent sont regroupees (vide)
location Label de localisation geographique/logique (vide)
tags Tags separes par des virgules pour la categorisation (vide)
sched Intervalle de decouverte "5MIN"
schedMonitors Intervalle des controles de moniteurs delegues identique a sched
processes Noms de processus separes par des virgules a surveiller (vide)
ports Ports separes par des virgules a surveiller (vide)

Options de planification

Label Intervalle
1MIN Toutes les minutes
2MIN Toutes les 2 minutes
5MIN Toutes les 5 minutes
10MIN Toutes les 10 minutes
30MIN Toutes les 30 minutes
1H Toutes les heures
4H Toutes les 4 heures
8H Toutes les 8 heures
1D Quotidien

Arborescence des repertoires

<install_dir>/
├── discovery_agent(.exe)     # Executable
├── discovery_agent.json      # Configuration du service
├── config/
│   ├── sec/                  # Cles RSA
│   └── ssl/                  # Certificats TLS
├── data/
│   ├── process_list.txt      # Noms des processus surveilles
│   ├── port_list.txt         # Ports reseau surveilles
│   ├── process_thresholds.json   # Configuration des seuils par processus
│   ├── system_thresholds.json    # Configuration des seuils systeme
│   ├── discover_metrics.json     # Dernieres metriques collectees
│   └── alerts.json           # Alertes generees
├── dbs/                      # Bases de donnees cle-valeur integrees
│   ├── discovery.db          # Donnees de decouverte principales
│   ├── metrics.db            # Historique des metriques
│   ├── process.db            # Donnees des processus
│   ├── system.db             # Donnees systeme
│   └── backup/               # Sauvegardes automatisees
└── log/                      # Fichiers journaux avec rotation

Mecanismes de decouverte

Decouverte des processus

Le Discovery Agent surveille les processus par nom. Configurez les processus a surveiller :

Methode 1 : Fichier de configuration

{
  "processes": "nginx,mysqld,java,python3"
}

Methode 2 : Fichier de liste de processus (data/process_list.txt)

nginx:web,production
mysqld:database,production
java:application
python3.12:scripts

Format : nomprocessus[.exe]:tag1,tag2 (separe par deux-points, avec tags optionnels)

Processus par defaut : si aucune liste de processus n’est fournie, l’agent surveille un ensemble par defaut incluant Python, Java, Node, les bases de donnees (MySQL, PostgreSQL, MongoDB, Oracle), les serveurs web (Nginx, Apache, Tomcat), les courtiers de messages (Kafka, RabbitMQ), les environnements d’execution de conteneurs (Docker, Kubernetes) et les outils de surveillance (Prometheus, Grafana, Zabbix).

Decouverte des ports

Surveillez quels processus ecoutent sur des ports specifiques :

Fichier de configuration :

{
  "ports": "80,443,3306,5432,8080"
}

Fichier de liste de ports (data/port_list.txt) :

80
443
3306
5432

L’agent associe les ecouteurs de ports aux noms de processus via l’enumeration des connexions TCP.

Decouverte du trafic reseau

Utilise la capture de paquets (pcap) via la bibliotheque gopacket pour l’analyse du trafic en direct :

  • Capture les paquets sur toutes les interfaces reseau
  • Duree configurable via discoCapInterval
  • Agrege le trafic par identifiant de processus (PID)
  • Calcule la bande passante en kbits/s (entrant/sortant)
  • Genere un graphique de topologie reseau au format Cytoscape pour la visualisation

Moniteurs delegues (controles URL / API / port)

Au-dela des metriques de l’hote, un agent de decouverte peut definir des controles synthetiques — urls, apis, pings, nslookups, tcps, dbs et syss — directement dans sa configuration. L’agent n’execute pas ces controles lui-meme ; il les delegue a une ou plusieurs sondes Monitor nommees dans probeEndPoint.

{
  "appName": "Shop",
  "probeEndPoint": "probe1,probe-win2",
  "ports": "80,443,3306",
  "urls": [{ "name": "shop-home", "url": "https://shop.example.com/" }],
  "apis": [
    {
      "name": "checkout-api",
      "url": "https://api.example.com/health",
      "typeApi": "GET"
    }
  ]
}
probeEndPoint est obligatoire des que urls, apis ou ports sont definis. Sans lui, l’agent journalise une erreur et les controles ne sont pas enregistres. L’intervalle de ces controles delegues est pilote par schedMonitors.

Cela permet de decrire toute la surface de service d’un hote (sante systeme et ses endpoints) au meme endroit, tandis que l’execution reelle des URL/API se fait sur une sonde ayant un acces reseau aux cibles.


Metriques collectees

Metriques systeme

Metrique Description Configuration des seuils
CPU % Pourcentage d’utilisation CPU global discoCPUGFixedThreshCri/Maj/Min
Memory % Pourcentage d’utilisation memoire discoMEMGFixedThreshCri/Maj/Min
Load Average (Linux) Charge moyenne sur 5 minutes discoLoadAvg5minGFixedThreshCri/Maj/Min
Filesystem % Utilisation disque par point de montage discoFSGFixedThreshCri/Maj/Min
TCP Sockets Nombre de sockets TCP ouverts discoTCPSocketsGFixedThreshCri/Maj/Min
CPU I/O Wait (Linux) Temps CPU en attente d’E/S discoCpuIOWaitGFixedThreshCri/Maj/Min
Uptime Temps de fonctionnement du systeme (informatif)
Boot time Horodatage du dernier demarrage (informatif)

Metriques par processus

Metrique Description Configuration des seuils
CPU % Utilisation CPU du processus discoCPUPFixedThresh* ou discoCPUPAutoThreshold
Memory Utilisation memoire RSS discoMEMPFixedThresh* ou discoMEMPAutoThreshold
Swap Utilisation du swap discoSWAPPFixedThresh* ou discoSWAPPAutoThreshold
I/O Read Octets lus sur disque/s discoIostatReadPFixedThresh* ou auto
I/O Write Octets ecrits sur disque/s discoIostatWritePFixedThresh* ou auto
CPU User % Temps CPU en mode utilisateur discoCPUUserPFixedThresh*
Threads Nombre de threads discoNumThreadsPFixedThresh*
File Descriptors (Linux) Nombre de descripteurs de fichiers ouverts discoNumFDsPFixedThresh*
Network Traffic In Bande passante entrante (kbits/s) via trafficThresholds
Network Traffic Out Bande passante sortante (kbits/s) via trafficThresholds

Activation/desactivation des metriques

Chaque metrique peut etre activee ou desactivee individuellement :

{
  "discoCPUGMonEnabled": "true",
  "discoMEMGMonEnabled": "true",
  "discoLoadAvg5minGMonEnabled": "true",
  "discoCPUPMonEnabled": "true",
  "discoMEMPMonEnabled": "true",
  "discoSWAPPMonEnabled": "false"
}

Configuration des seuils

Seuils fixes

Definissez des valeurs de seuil explicites par metrique :

{
  "discoCPUGFixedThreshCri": "95",
  "discoCPUGFixedThreshMaj": "85",
  "discoCPUGFixedThreshMin": "75"
}

Seuils automatiques

Laissez l’agent calculer les seuils a partir des donnees historiques :

{
  "discoCPUPAutoThreshold": "true",
  "discoMEMPAutoThreshold": "true"
}

Les seuils automatiques utilisent une analyse statistique (ecart-type) des metriques historiques pour definir dynamiquement les valeurs de seuil.

Quand le seuil automatique est active pour une metrique, laissez les champs *FixedThresh* correspondants vides (""). L’interface web affiche ces champs avec : pendant le calcul de la baseline (periode de warm-up), aucune alerte n’est emise pour cette metrique.

Seuils non definis. Une valeur de seuil fixe vide signifie “non defini” : l’agent applique en interne un seuil inatteignable, l’alerte reste donc silencieuse jusqu’a ce que la baseline du seuil automatique soit prete ou qu’une valeur explicite soit definie. Les anciennes versions persistaient la valeur litterale 999999999999999.00 a cet effet — l’agent normalise desormais automatiquement cette valeur heritee en "" au chargement et a la sauvegarde de sa configuration.

Seuils de trafic

Seuils de trafic reseau par processus avec operateurs directionnels :

{
  "trafficThresholds": {
    "nginx": {
      "operator": ">",
      "critical": 10000,
      "major": 5000,
      "minor": 1000
    }
  }
}

Operateurs : > (alerter lorsque au-dessus) ou < (alerter lorsque en dessous).


Alertes

Niveaux de statut des alertes

Niveau Entier Description
OK 0 Dans la plage normale
MINOR 1 Seuil mineur depasse
MAJOR 2 Seuil majeur depasse
CRITICAL 3 Seuil critique depasse

Canaux de notification

Identiques aux autres composants :

Canal Configuration
Email smtpEnabled, smtpServerName, smtpPort, smtpUsername, smtpPwd, smtpTLS
Slack slackChannel, slackToken
Teams teamsWebhook
PagerDuty pagerDutyAPIKey
Script personnalise scriptAction, scriptActionT

Temporisation des alertes

Parametre Description
notifyAfter Attendre N depassements consecutifs de seuil avant la premiere alerte
notifyFor Continuer les alertes pendant N cycles apres le depassement
notifyStatus Niveau de statut minimum pour declencher (ex. : “CRITICAL”)

Routage des alertes

Les alertes peuvent etre acheminees de deux facons :

  1. Via l’Integrator (recommande) – le Discovery Agent envoie les metriques a l’Integrator, qui gere les alertes de maniere centralisee
  2. Alertes locales – le Discovery Agent envoie les alertes directement via les canaux configures (lorsqu’aucun Integrator n’est configure)

La concurrence est controlee par des semaphores : 20 goroutines simultanees pour la communication avec l’Integrator, 10 pour les alertes locales.


Flux d’execution

Cron trigger (every N minutes)
  |
  v
execDiscovery()
  |
  v
runDiscoveryMetrics()
  ├── CollectSystemMetrics()    --> CPU, memory, load, FS, sockets
  ├── CollectProcessMetrics()   --> per-process CPU, memory, I/O, traffic
  ├── CollectNetworkMetrics()   --> pcap traffic capture, connections
  └── GenerateCytoscapeData()   --> network topology graph
  |
  v
Write data/discover_metrics.json + data/alerts.json
  |
  v
discoveryDataFile()
  ├── processMetricsKV()    --> evaluate per-process thresholds
  ├── systemMetricsKV()     --> evaluate system thresholds
  └── Route alerts:
       ├── goDataSent2Integrator()   (if Integrator configured)
       └── goHandleAlerting()         (local fallback)

Taches cron en arriere-plan

Tache Planification Objectif
Decouverte Configurable par l’utilisateur (1MIN-1D) Collecte principale des metriques
Metriques systeme Toutes les minutes Echantillonnage leger CPU/memoire
Sauvegarde automatique Intervalle configurable Sauvegardes cle-valeur integrees
Purge des metriques Quotidien a 01:00 Suppression des anciennes metriques
Purge des moniteurs Quotidien a 03:00 Nettoyage des donnees historiques

Endpoints de l’API REST

Authentification

Methode Chemin Description
POST /api/auth Connexion (JWT)
POST /loginComponent Jeton composant (15min)
POST /loginComponent1Year Jeton d’un an
GET /refresh_token Rafraichir le JWT

Decouverte

Methode Chemin Description
GET /runDiscovery Declencher la collecte immediate des metriques
GET /getProcessByPort/:port Obtenir le processus utilisant un port specifique
POST /computeThreshold Calculer les seuils de reference automatiques

Acces aux donnees

Methode Chemin Description
GET /api/db/:dbname/bucket/:bucket/key/:key Obtenir une metrique specifique
GET /v1/db/:dbname/bucket/:bucket/all Toutes les cles/valeurs
GET /v1/db/:dbname/bucket/:bucket/allJSON Toutes les donnees en JSON
GET /api/reportSysMetricsGraph/:start/:end Graphique des metriques systeme
GET /:type/reportGraph/:key/:start/:end Graphique des metriques de processus

Parametres

Methode Chemin Description
GET /api/setting Obtenir la configuration actuelle
POST /updateSetting Mettre a jour la configuration
GET /setting Obtenir les parametres (chiffres)

Sante

Methode Chemin Description
GET /ping Verification de sante
GET /uptime Temps de fonctionnement du service
GET /api/metrics Metriques systeme actuelles
GET /docs Documentation Swagger

Sauvegarde et restauration

Methode Chemin Description
POST /backupDatabase Sauvegarde manuelle
POST /reinitDatabase Reinitialiser les bases de donnees
GET /api/backupKV Sauvegarde via l’API
GET /api/reinitKV Reinitialisation via l’API

Certificats

Methode Chemin Description
GET /reloadCertificates Recharger les certificats TLS
GET /getCert Obtenir le certificat TLS
POST /getCertFile/:filename Recevoir un fichier de certificat

Journaux

Methode Chemin Description
GET /discovery/logfile/:key/:filename Telecharger un fichier journal
GET /partServerlogfile/:nbbytes Diffuser les entrees de journal recentes
GET /serverlogfiles/:filename Telecharger une archive de journaux

Traductions