Background Log Daemon

Le **Background Log Daemon** (15b_background_logger.php / 16_background_logger.php) est un service de streaming et d'archivage de journaux asynchrone côté serveur, conçu pour les environnements SAS Viya 4 exécutés sur Red Hat OpenShift / Kubernetes.

Les outils standard de diffusion de journaux basés sur le web (comme les Stern tails en direct) nécessitent une session de navigateur ouverte et une connexion HTTP active. Si un administrateur ferme son ordinateur, change de réseau ou quitte la page pendant des investigations de diagnostic prolongées ou la reproduction d'erreurs intermittentes, la session de diffusion s'arrête immédiatement. Le Background Log Daemon élimine cette limitation en générant un processus en arrière-plan indépendant et détaché sur le serveur, qui agrège en continu les journaux de tous les pods en cours d'exécution directement dans des fichiers d'archives persistants côté serveur.

Les administrateurs peuvent lancer une session de journalisation en toute sécurité, fermer leur navigateur et revenir des heures plus tard pour inspecter, rechercher, télécharger ou gérer des archives de journaux de plusieurs gigaoctets.

---

Fonctionnalités et Capacités Clés
1. Exécution Asynchrone Détachée
  • Démon Côté Serveur Persistant : Lance un processus détaché (nohup bash -x -c ... & echo $!) qui s'exécute complètement hors bande du cycle de vie des requêtes web Apache/PHP. La session web peut être fermée, le navigateur éteint ou l'utilisateur déconnecté sans interrompre l'ingestion des journaux.
  • Cycle de Vie du PID et Suivi d'Auto-Réparation :

- L'identifiant du processus est stocké dans /tmp/archives/daemon.pid.

- Le module vérifie activement la vitalité du processus à l'aide de requêtes de processus POSIX (ps -p -o comm=).

- Si un processus se termine ou est tué de l'extérieur, le démon détecte automatiquement le PID obsolète et purge le fichier .pid (unlink), ramenant l'UI à un état d'arrêt propre.

  • Terminaison Propre du Processus Enfant : L'arrêt du démon envoie un signal kill au wrapper parent et invoque automatiquement pkill -P pour terminer tous les processus enfants générés par le script bash, arrêtant proprement le processus binaire stern sous-jacent sans laisser de processus collecteurs orphelins.
2. Collecte de Journaux Stern à Haute Capacité
  • Agrégation de Journaux à l'Échelle des Namespaces : Exécute stern '.*' -n , s'attachant simultanément aux flux de journaux de chaque pod déployé dans le namespace SAS Viya cible.
  • Filtrage des Pods en Cours d'Exécution : Exploite --field-selector status.phase=Running pour exclure les pods terminés, les jobs batch achevés ou les instances expulsées, en se concentrant exclusivement sur les conteneurs opérationnels.
  • Stockage en Texte Brut Propre : Utilise --color never pour supprimer les codes d'échappement ANSI et les séquences de style du terminal, générant des fichiers texte propres optimaux pour la recherche regex et l'analyse.
  • Plafond de Concurrence Élevé : Configuré avec --max-log-requests 500 pour augmenter la limite de connexions simultanées par défaut de Stern, permettant une capture simultanée fluide sur des centaines de microservices SAS Viya sans atteindre les limites de requêtes de l'API Kubernetes.
  • Nommage d'Archive Horodaté : Les archives sont automatiquement créées avec des horodatages basés sur la norme ISO (stern_YYYYMMDD_HHMMSS.log) dans /tmp/archives/.
3. Moteur de Recherche à Haute Vitesse Intégré (Modal grep)
  • Recherche Instantanée d'Archives : Une boîte de dialogue modale interactive à haute capacité (modal-xl) permet aux administrateurs de rechercher des archives de journaux de plusieurs gigaoctets directement depuis le navigateur sans nécessiter un accès SSH au serveur hôte.
  • Exécution de Grep Côté Serveur : Exécute des recherches assainies en utilisant grep -in | head -n 1000 :

- Insensible à la Casse (-i) : Correspond aux motifs quelle que soit la casse.

- Numérotation des Lignes (-n) : Ajoute le numéro de ligne exact à chaque correspondance pour un référencement rapide.

- Plafonnement de la Sortie (head -n 1000) : Protège la mémoire du client et le rendu du navigateur en limitant les résultats aux 1 000 premières correspondances.

  • Syntaxe Dynamique et Mise en Évidence des Mots-clés : Le moteur JavaScript côté client analyse automatiquement les résultats retournés et met en évidence les termes de recherche correspondants dans des badges ambres () au sein d'une console terminal sombre (fenêtre défilante de 60vh).
4. Journaux de Démarrage et Trace d'Exécution (bash -x)
  • Onglet de Diagnostics de Démarrage Détaillé : Un onglet dédié Startup Logs affiche le contenu de /tmp/archives/startup.log.
  • Trace d'Exécution Bash : Parce que le wrapper du démon en arrière-plan est invoqué avec bash -x, chaque instruction d'initialisation est journalisée avec des préfixes de trace (+) :

- Exportations de variables d'environnement (OPSBUDDY_USER, PROFILE_NAME, DEFAULT_NAMESPACE).

- Flux d'authentification via /var/www/cmd/00_do_login.sh.

- Invocation de la commande Stern construite et liste des arguments.

  • Dépannage Rapide : Identifiez immédiatement les échecs d'authentification, les tokens API OpenShift expirés, les définitions de namespaces invalides ou les binaires Stern manquants sans inspecter les journaux du serveur au niveau de l'hôte.
5. Cycle de Vie des Archives de Journaux et Gestion des Téléchargements
  • Aperçu du Catalogue : Affiche un tableau interactif de toutes les archives stockées dans /tmp/archives/ détaillant :

- Nom de fichier : stern_.log

- Taille : Calcul dynamique en mégaoctets (MB)

- Horodatage de Création : Converti au format de date et d'heure local

- Tri : Automatiquement trié par ordre décroissant (les archives les plus récentes en premier)

  • Téléchargement Direct en Texte Brut : Diffuse les archives de journaux directement vers la station de travail de l'administrateur (?download=) sous forme de texte brut avec les en-têtes HTTP appropriés (Content-Disposition: attachment), permettant l'exportation vers des outils d'analyse de journaux externes ou des cas de support technique SAS.
  • Suppression Sécurisée d'Archive : Les administrateurs peuvent purger les archives individuelles via l'interface utilisateur avec des modales de confirmation pour éviter l'épuisement du disque dans /tmp/archives/.

---

Architecture Technique et Fonctionnement Interne

| Composant | Détail d'Implémentation |

| :--- | :--- |

| Endpoints PHP | 15b_background_logger.php & 16_background_logger.php |

| Helper Shell | cmd/15b_background_logger.sh |

| Binaire Collecteur | stern (version 1.30.0+ installée dans /usr/local/bin/stern) |

| Répertoire de Travail | /tmp/archives/ (créé avec des autorisations 0777) |

| Fichier de Suivi PID | /tmp/archives/daemon.pid |

| Fichier de Trace de Démarrage| /tmp/archives/startup.log |

| Format de Fichier d'Archive| /tmp/archives/stern_YYYYMMDD_HHMMSS.log |

| Invocation du Processus| nohup bash -x -c " && stern '.*' -n \ --color never --max-log-requests 500 --field-selector status.phase=Running >> " > /tmp/archives/startup.log 2>&1 & echo $! |

| Méthode de Terminaison | kill suivi de pkill -P |

| Mécanisme de Recherche | grep -in \| head -n 1000 |

---

Modules de Diagnostic et Opérationnels Connexes

Le Background Log Daemon travaille en synergie avec d'autres modules de diagnostic opérationnels disponibles dans la boîte à outils OpsBuddy :

  • CASDeployment Toolkit : Fournit une vue architecturale à 360° de tous vos déploiements CAS (CAS Deployments). Il extrait et visualise méticuleusement les contextes de sécurité, les limites de ressources, les variables d'environnement, les volumes de stockage, les affinités de nœuds et les statuts des pods en temps réel. Il inclut un puissant Security Alignment Check (Vérification de l'Alignement de la Sécurité) qui analyse automatiquement chaque conteneur par rapport à la sécurité de base du Pod pour signaler de manière proactive toutes les élévations de privilèges, surcharges ou mauvaises configurations.
  • Readiness Service : Un tableau de bord de préparation (readiness) opérationnelle qui interroge le pod sas-readiness. Il analyse intelligemment les journaux du pod pour confirmer si l'environnement Viya a complètement démarré, fournissant un résumé instantané de tous les composants principaux sains ou défaillants.
  • SAS Viya 4 Scheduler Audit : Un outil de gestion visuel pour le SAS Scheduler. Il trouve automatiquement les Pods de planificateur actifs et les CronJobs Kubernetes associés, tout en extrayant les journaux en temps réel dans une console facile à lire pour suivre les processus Viya planifiés actifs.
  • Backup Manager : Une interface entièrement graphique pour déclencher et gérer les sauvegardes. Amélioré avec des listes déroulantes pilotées par AJAX qui remplissent automatiquement les ID de sauvegarde disponibles et les noms de jobs directement depuis l'API OpenShift, éliminant le copier-coller manuel. Inclut des info-bulles Bootstrap interactives expliquant le rôle technique de toutes les options d'exécution.
Picto
Interface Background Log Daemon