From b6a602e8480d0afa995f1b06d188f88e1fdfe00f Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Tue, 28 Apr 2026 01:27:42 +0200 Subject: [PATCH] ui(qualys/agents): wording diag prudent (constat/hypothese/proposition vers ticket support, pas affirmer) --- app/services/realtime_audit_service.py | 113 ++++++++++++++----------- app/templates/qualys_agent_audit.html | 5 +- 2 files changed, 67 insertions(+), 51 deletions(-) diff --git a/app/services/realtime_audit_service.py b/app/services/realtime_audit_service.py index d5d692f..ebbbf4f 100644 --- a/app/services/realtime_audit_service.py +++ b/app/services/realtime_audit_service.py @@ -682,10 +682,12 @@ def _analyze_qualys_audit(r): if disk_full: suggestions.append({ "severity": "critical", - "title": "Partition /var/log saturée", - "fix": "Cause : disque 100% rempli, l'agent ne peut plus écrire ses logs et crashe.\n" - "Pistes possibles : cleanup logs anciens (.log.0/1/2 du crash loop), " - "extension du FS si LVM avec espace libre dans le VG (voir bloc LVM ci-dessous)." + "title": "Partition /var/log apparaît saturée", + "fix": "Constat : une partition est à 100% et/ou l'agent rapporte 'no space left'. " + "Hypothèse : pourrait empêcher l'agent d'écrire ses logs.\n" + "Proposition : ouvrir un ticket support pour vérifier l'état du disque " + "et envisager soit un cleanup des logs archivés, soit une extension du FS " + "(snapshot vCenter recommandé avant toute action)." }) # Si LVM avec free dans VG -> note diagnostic @@ -695,16 +697,18 @@ def _analyze_qualys_audit(r): free_gb = float(m_vg.group(3)) suggestions.append({ "severity": "high", - "title": f"LVM : extension FS possible (VG {vg_name} a {free_gb}G libres)", - "fix": f"Le VG {vg_name} dispose de {free_gb}G non alloués → extension du LV /var/log faisable. " - f"⚠ Snapshot vCenter de la VM obligatoire avant toute action de redimensionnement." + "title": f"LVM : extension FS potentiellement possible (VG {vg_name} ~{free_gb}G libres)", + "fix": f"Constat : le VG {vg_name} semble disposer de ~{free_gb}G non alloués. " + f"Proposition : ticket support pour validation et extension du LV /var/log si pertinent " + f"(snapshot vCenter à prévoir au préalable)." }) if "cannot write file" in s_sys or "logger initialization failed" in s_sys: suggestions.append({ "severity": "critical", - "title": "Agent ne peut pas écrire son log", - "fix": "Cause : permissions /var/log/qualys cassées, ou disque saturé. " - "L'agent fail-fast à l'init du logger." + "title": "L'agent semble ne pas pouvoir écrire son log", + "fix": "Constat : présence de 'Cannot write file' / 'Logger initialization failed' dans les logs. " + "Hypothèses possibles : disque saturé, permissions cassées sur /var/log/qualys. " + "Proposition : ticket support pour analyse." }) # Crash loop @@ -712,10 +716,11 @@ def _analyze_qualys_audit(r): if m and int(m.group(1)) > 50: suggestions.append({ "severity": "high", - "title": f"Crash loop ({m.group(1)} restarts depuis la dernière stabilité)", - "fix": "Le service est en boucle de redémarrage permanente. " - "À stopper temporairement (sudo systemctl stop qualys-cloud-agent) " - "le temps que le problème racine soit traité — sinon il pollue les logs et stresse le système." + "title": f"Possible boucle de redémarrage (~{m.group(1)} restarts observés)", + "fix": "Constat : le compteur de restart systemd est élevé. " + "Hypothèse : crash loop persistant. " + "Proposition : ticket support pour analyse de la cause racine et arrêt temporaire du service " + "le temps de l'investigation (afin de limiter le bruit dans les logs)." }) # Connectivité KO @@ -723,49 +728,54 @@ def _analyze_qualys_audit(r): "could not resolve", "no route", "unreachable", "dns ko"]): suggestions.append({ "severity": "high", - "title": "Connectivité Qualys cloud KO (flux direct bloqué)", - "fix": "L'agent doit joindre qagpublic.qg1.apps.qualys.eu:443 en direct (pas via proxy). " - "Le test échoue → flux 443 sortant probablement bloqué côté firewall périmétrique. " - "Comparer avec un serveur où l'agent fonctionne pour confirmer " - "que les mêmes règles de flux sont appliquées." + "title": "Connectivité Qualys cloud apparaît KO (flux direct)", + "fix": "Constat : le test direct vers qagpublic.qg1.apps.qualys.eu:443 ne répond pas. " + "Hypothèse : flux 443 sortant peut-être bloqué côté firewall périmétrique. " + "Proposition : ticket réseau pour vérifier les règles de flux applicables à ce serveur, " + "en comparaison avec un serveur où l'agent fonctionne." }) if "certificate verify failed" in s_conn or ("ssl" in s_conn and "verify" in s_conn): suggestions.append({ "severity": "high", - "title": "Erreur TLS/SSL", - "fix": "Cause possible : interception SSL par un proxy MITM, ou bundle CA système obsolète. " - "À investiguer avec l'équipe réseau/sécu." + "title": "Erreur TLS/SSL observée", + "fix": "Constat : la vérification du certificat semble échouer. " + "Hypothèses : interception SSL par un équipement intermédiaire, ou bundle CA système à mettre à jour. " + "Proposition : ticket support sécu/réseau pour analyse." }) # Service désactivé / arrêté if "masked" in s_status: suggestions.append({ "severity": "medium", - "title": "Service masked", - "fix": "Le service Qualys a été explicitement masqué. À unmask + enable une fois la cause identifiée." + "title": "Service apparaît masked", + "fix": "Constat : le service systemd Qualys semble masqué. " + "Proposition : ticket support pour identifier la raison (manuel ? configuration ?) " + "et décider de l'action." }) elif "disabled" in s_status: suggestions.append({ "severity": "medium", - "title": "Service disabled au boot", - "fix": "Le service ne démarrera pas au prochain reboot. " - "Soit voulu (serveur en décom), soit oubli post-intervention — à clarifier." + "title": "Service apparaît disabled au boot", + "fix": "Constat : le service ne démarrera pas automatiquement au prochain reboot. " + "Hypothèses : volontaire (serveur en décom) ou oubli post-intervention. " + "Proposition : ticket support pour clarifier." }) elif any(k in s_status for k in ["inactive (dead)", "stopped", "not running"]) \ and "active" not in s_status: suggestions.append({ "severity": "medium", - "title": "Service arrêté", - "fix": "L'agent n'est plus en cours d'exécution. Voir les logs ci-dessous pour la cause de l'arrêt." + "title": "Service apparaît arrêté", + "fix": "Constat : l'agent ne semble plus en cours d'exécution. " + "Proposition : ticket support pour identifier la cause de l'arrêt (voir logs ci-dessous)." }) # Agent obsolète if re.match(r"^qualys-cloud-agent-([0-5]\.|6\.[01]\.)", s_ver): suggestions.append({ "severity": "low", - "title": f"Agent obsolète ({s_ver.strip()})", - "fix": "Version ancienne, plus supportée par Qualys. " - "À planifier en upgrade vers 7.x dans le cadre des MAJ de l'agent." + "title": f"Version agent ancienne détectée ({s_ver.strip()})", + "fix": "Constat : version antérieure à 7.x, potentiellement plus supportée. " + "Proposition : à inclure dans le plan de MAJ des agents Qualys." }) # Logrotate Qualys mal configuré @@ -774,15 +784,18 @@ def _analyze_qualys_audit(r): not re.search(r"^\s*compress\s*$", s_lrt, re.MULTILINE)): suggestions.append({ "severity": "medium", - "title": "Logrotate Qualys : compression désactivée", - "fix": "Sans compression, les logs archivés occupent 5-10× plus de place — " - "contribution potentielle à la saturation de /var/log." + "title": "Logrotate Qualys : compression semble désactivée", + "fix": "Constat : la directive 'compress' n'apparaît pas active. " + "Hypothèse : les logs archivés peuvent occuper 5-10× plus de place sans compression. " + "Proposition : ticket support pour vérifier la configuration logrotate." }) if "rotate" not in s_lrt: suggestions.append({ "severity": "low", - "title": "Logrotate Qualys : pas de directive rotate", - "fix": "Pas de politique de rétention définie → les logs s'accumulent indéfiniment." + "title": "Logrotate Qualys : directive rotate absente", + "fix": "Constat : pas de politique de rétention détectée. " + "Hypothèse : les logs pourraient s'accumuler indéfiniment. " + "Proposition : ticket support pour ajout d'une politique adaptée." }) # Core dump + package absent = installation incomplète / corrompue @@ -790,19 +803,20 @@ def _analyze_qualys_audit(r): ("introuvable" in s_ver.lower() or s_ver.lower().startswith("version introuvable")): suggestions.append({ "severity": "critical", - "title": "Installation Qualys cassée (core dump + package absent du RPM)", - "fix": "Le service systemd existe mais le binaire est manquant ou corrompu — " - "core dump systématique au démarrage. Désinstallation incomplète probable. " - "Nécessite cleanup complet (service unit + fichiers) puis réinstallation " - "via le RPM SANEF (/root/QualysCloudAgent.rpm) avec ré-activation." + "title": "Possible installation Qualys cassée (core dump + package non détecté)", + "fix": "Constat : service systemd actif mais aucun package qualys-cloud-agent dans la base RPM, " + "et core dumps répétés. " + "Hypothèse : désinstallation incomplète ou installation corrompue. " + "Proposition : ticket support pour cleanup complet et réinstallation via RPM SANEF " + "(/root/QualysCloudAgent.rpm) avec ré-activation." }) elif "core-dump" in s_sys or "core dumped" in s_sys: suggestions.append({ "severity": "high", - "title": "Agent Qualys core dumps en boucle", - "fix": "Le binaire crashe au démarrage (signal SIGABRT). " - "Cause possible : lib système cassée (ldd manquant), bug version agent vs OS, " - "ou conflit avec autre package." + "title": "Core dumps observés sur l'agent", + "fix": "Constat : le binaire semble crasher au démarrage (signal SIGABRT). " + "Hypothèses : lib système cassée, incompatibilité version agent vs OS, conflit. " + "Proposition : ticket support pour analyse approfondie." }) # OS EOL (RHEL 5/6) @@ -810,9 +824,10 @@ def _analyze_qualys_audit(r): if "release 5" in s_os or "release 6" in s_os: suggestions.append({ "severity": "low", - "title": "OS en fin de vie", - "fix": "RHEL 5/6 EOL — l'agent Qualys 7.x n'est plus supporté sur ces versions. " - "À traiter dans le plan de migration / décom du serveur." + "title": "OS détecté en fin de vie", + "fix": "Constat : RHEL 5/6 EOL. " + "Hypothèse : l'agent Qualys 7.x peut ne pas être supporté sur cette version. " + "Proposition : à intégrer au plan de migration/décom du serveur." }) return suggestions diff --git a/app/templates/qualys_agent_audit.html b/app/templates/qualys_agent_audit.html index 4d8d50e..a8189cc 100644 --- a/app/templates/qualys_agent_audit.html +++ b/app/templates/qualys_agent_audit.html @@ -88,8 +88,9 @@

- → Action : - ouvrir un ticket support avec ces éléments de diagnostic + l'export complet de cette page (capture/PDF) pour traçabilité. + → Proposition : + ces constats sont basés sur les sorties d'audit, à valider en contexte. Ouvrir un ticket support + avec une capture/PDF de cette page pour analyse et action côté équipe en charge.