Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
« Supervision des mises à jour de l'infrastructure AJLSM » : différence entre les versions
Page créée avec « = Supervision des mises à jour de l'infrastructure AJLSM = {| class="wikitable" ! Élément ! Information |- | Serveur de supervision | Saturne3 |- | Systèmes surveill... » |
Aucun résumé des modifications |
||
| (3 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
= Supervision des mises à jour de l'infrastructure AJLSM = | = Supervision des mises à jour de l'infrastructure AJLSM = | ||
Dernière mise à jour : '''14 octobre 2026''' | |||
== Présentation générale == | |||
{| class="wikitable" | {| class="wikitable" | ||
| Ligne 6 : | Ligne 10 : | ||
|- | |- | ||
| Serveur de supervision | | Serveur de supervision | ||
| Saturne3 | | '''Saturne3''' | ||
|- | |- | ||
| Systèmes surveillés | | Systèmes surveillés | ||
| Saturne3, Beotos3, Eole3, PBS100 | | Saturne3, Beotos3, Eole3, PBS100, AD64, APBP2 | ||
|- | |- | ||
| Mise en service | | Mise en service initiale | ||
| 13 octobre 2026 | | 13 octobre 2026 | ||
|- | |||
| Extension à six serveurs | |||
| 14 octobre 2026 | |||
|- | |- | ||
| Contrôle quotidien | | Contrôle quotidien | ||
| 6 h | | Tous les jours à 6 h | ||
|- | |- | ||
| Rapport hebdomadaire | | Rapport hebdomadaire | ||
| Ligne 21 : | Ligne 28 : | ||
|- | |- | ||
| Installation automatique | | Installation automatique | ||
| Aucune | | '''Aucune''' | ||
|- | |- | ||
| Redémarrage automatique | | Redémarrage automatique | ||
| Aucun | | '''Aucun''' | ||
|- | |- | ||
| Notifications | | Notifications | ||
| Courriel hebdomadaire | | Courriel hebdomadaire à ajlsm@ajlsm.com | ||
|- | |||
| Configuration des serveurs | |||
| /etc/ajlsm/supervision-serveurs.conf | |||
|} | |} | ||
== Objectif == | == Objectif == | ||
La supervision des mises à jour AJLSM permet de surveiller quotidiennement | La supervision des mises à jour AJLSM permet de surveiller quotidiennement les mises à jour disponibles sur les principaux serveurs de l'infrastructure. | ||
les mises à jour disponibles sur les principaux serveurs de l'infrastructure. | |||
Le dispositif est centralisé sur '''Saturne3'''. | Le dispositif est centralisé sur '''Saturne3'''. | ||
| Ligne 41 : | Ligne 50 : | ||
* D'actualiser les index APT des serveurs. | * D'actualiser les index APT des serveurs. | ||
* D'identifier les mises à jour disponibles. | * D'identifier les mises à jour disponibles. | ||
* De distinguer les mises à jour de sécurité Debian/Ubuntu des autres mises à jour lorsque cette distinction est possible. | * De distinguer les mises à jour de sécurité Debian/Ubuntu des autres mises à jour, lorsque cette distinction est possible. | ||
* De détecter les erreurs d'accès SSH et les échecs des commandes APT. | * De détecter les erreurs d'accès SSH et les échecs des commandes APT. | ||
* De conserver les incidents rencontrés entre deux rapports. | * De conserver les incidents rencontrés entre deux rapports. | ||
* De vérifier que chaque serveur configuré figure exactement une fois dans le rapport. | |||
* D'envoyer un rapport hebdomadaire récapitulatif. | * D'envoyer un rapport hebdomadaire récapitulatif. | ||
'''Aucun paquet n'est installé automatiquement par ces scripts.''' | '''Aucun paquet n'est installé automatiquement par ces scripts.''' | ||
Les mises à jour et les éventuels redémarrages restent des opérations | Les mises à jour et les éventuels redémarrages restent des opérations de maintenance manuelles. | ||
de maintenance manuelles. | |||
Le suivi opérationnel, les versions des systèmes et les historiques d'intervention sont documentés dans : | |||
[[Maintenance et mises à jour de l'infrastructure AJLSM]] | |||
== Architecture == | == Architecture == | ||
| Ligne 57 : | Ligne 70 : | ||
{| class="wikitable" | {| class="wikitable" | ||
! Serveur | ! Serveur | ||
! Fonction | ! Fonction | ||
! Cible de supervision | |||
! Mode | |||
|- | |- | ||
| Saturne3 | | Saturne3 | ||
| | | Hyperviseur principal et serveur de supervision | ||
| | | local | ||
| | | Exécution locale | ||
|- | |- | ||
| Beotos3 | | Beotos3 | ||
| | | Hyperviseur et serveur de sauvegarde | ||
| root@192.168.123.104 | | root@192.168.123.104 | ||
| | | SSH | ||
|- | |- | ||
| Eole3 | | Eole3 | ||
| | | Serveur de données et d'images | ||
| root@192.168.123.202 | | root@192.168.123.202 | ||
| | | SSH | ||
|- | |- | ||
| PBS100 | | PBS100 | ||
| | | Serveur Proxmox Backup Server | ||
| root@51.178.245.43 | | root@51.178.245.43 | ||
| Serveur | | SSH | ||
|- | |||
| AD64 | |||
| Serveur applicatif AD64 | |||
| root@192.168.123.41 | |||
| SSH | |||
|- | |||
| APBP2 | |||
| Serveur applicatif APBP2 | |||
| root@192.168.123.42 | |||
| SSH | |||
|} | |} | ||
'''Attention :''' Beotos3 et PBS100 sont deux systèmes distincts. | |||
Beotos3 est le serveur physique Proxmox. PBS100 est la machine virtuelle hébergeant Proxmox Backup Server. | |||
Ils sont supervisés séparément. | |||
=== Principe de fonctionnement === | === Principe de fonctionnement === | ||
| Ligne 98 : | Ligne 120 : | ||
Les opérations sont ordonnancées par systemd. | Les opérations sont ordonnancées par systemd. | ||
Les contrôles quotidiens sont silencieux : ils n'envoient pas | Les contrôles quotidiens sont silencieux : ils n'envoient pas directement de courriel. | ||
de | |||
Les anomalies sont enregistrées dans un journal d'incidents et reprises dans le rapport hebdomadaire. | |||
=== Schéma de fonctionnement === | |||
<pre> | |||
SATURNE3 | |||
Serveur de supervision | |||
| | |||
| | |||
Configuration centralisée | |||
/etc/ajlsm/supervision-serveurs.conf | |||
| | |||
| | |||
Tous les jours à 6 h | |||
| | |||
v | |||
supervision_updates.sh | |||
| | |||
+-------------+-------------+ | |||
| | | |||
Exécution locale Connexions SSH | |||
| | | |||
Saturne3 +-------------+-------------+ | |||
| | | | |||
Beotos3 Eole3 PBS100 | |||
| | | | |||
+-------------+-------------+ | |||
| | |||
AD64 | |||
APBP2 | |||
| | |||
v | |||
supervision_updates_collect.py | |||
| | |||
v | |||
Résultat quotidien | |||
| | |||
+----------+----------+ | |||
| | | |||
dernier-rapport.txt incidents.log | |||
| | | |||
+----------+----------+ | |||
| | |||
Lundi à 7 h | |||
| | |||
v | |||
supervision_rapport.sh | |||
| | |||
v | |||
Postfix | |||
| | |||
v | |||
ajlsm@ajlsm.com | |||
</pre> | |||
== Configuration centralisée des serveurs == | |||
=== Emplacement === | |||
La liste des serveurs supervisés est définie dans : | |||
<syntaxhighlight lang="text"> | |||
/etc/ajlsm/supervision-serveurs.conf | |||
</syntaxhighlight> | |||
Cette configuration est utilisée par les deux scripts : | |||
* supervision_updates.sh | |||
* supervision_rapport.sh | |||
Elle évite de maintenir deux listes de serveurs indépendantes. | |||
=== Contenu actuel === | |||
<syntaxhighlight lang="text"> | |||
# Supervision APT AJLSM | |||
# Format : Nom|Cible SSH | |||
# Utiliser "local" pour Saturne3. | |||
Saturne3|local | |||
Beotos3|root@192.168.123.104 | |||
Eole3|root@192.168.123.202 | |||
PBS100|root@51.178.245.43 | |||
AD64|root@192.168.123.41 | |||
APBP2|root@192.168.123.42 | |||
</syntaxhighlight> | |||
=== Format === | |||
Chaque ligne contient : | |||
<syntaxhighlight lang="text"> | |||
Nom|Cible | |||
</syntaxhighlight> | |||
Exemples : | |||
<syntaxhighlight lang="text"> | |||
Saturne3|local | |||
Beotos3|root@192.168.123.104 | |||
</syntaxhighlight> | |||
Les lignes vides et les commentaires commençant par # sont ignorés. | |||
Les scripts vérifient : | |||
* La présence du fichier de configuration. | |||
* La présence d'au moins un serveur. | |||
* Le format des entrées. | |||
* L'absence de noms de serveurs en double. | |||
Une configuration invalide provoque l'arrêt du script concerné. | |||
=== Ajouter un serveur === | |||
Pour ajouter un serveur : | |||
# Vérifier que le serveur dispose d'APT et de Python 3 avec la bibliothèque python-apt. | |||
# Configurer l'authentification SSH depuis Saturne3. | |||
# Vérifier la clé d'identité SSH du serveur distant. | |||
# Tester la connexion SSH sans agent interactif. | |||
# Ajouter une ligne dans supervision-serveurs.conf. | |||
# Vérifier la syntaxe des scripts. | |||
# Lancer une collecte de supervision. | |||
# Vérifier que le serveur apparaît dans le rapport. | |||
# Mettre à jour la documentation MediaWiki. | |||
# Enregistrer la modification dans SVN. | |||
Exemple : | |||
<syntaxhighlight lang="text"> | |||
NOUVEAU|root@192.168.123.50 | |||
</syntaxhighlight> | |||
'''Important :''' l'ajout d'un serveur ne nécessite pas de modifier les listes internes des scripts. | |||
== Authentification SSH == | |||
=== Principe === | |||
Saturne3 interroge les serveurs distants en SSH avec le compte root. | |||
L'authentification repose sur une clé publique autorisée sur les serveurs distants. | |||
Le script utilise notamment : | |||
<syntaxhighlight lang="bash"> | |||
-o BatchMode=yes | |||
-o ConnectTimeout=10 | |||
-o StrictHostKeyChecking=yes | |||
</syntaxhighlight> | |||
* BatchMode=yes empêche les demandes interactives de mot de passe. | |||
* ConnectTimeout=10 limite le délai d'établissement de la connexion. | |||
* StrictHostKeyChecking=yes impose la vérification de la clé d'identité du serveur distant. | |||
Les clés d'identité SSH des serveurs doivent donc être connues et vérifiées avant leur utilisation automatisée. | |||
=== Clé SSH de Saturne3 === | |||
La clé publique ED25519 du compte root de Saturne3 possède l'empreinte : | |||
<syntaxhighlight lang="text"> | |||
SHA256:fTlK1a2y6at6ZPpDWVy1of+Q210IxxaU1NkmqMgDkyw | |||
</syntaxhighlight> | |||
Elle est autorisée dans le fichier suivant sur les serveurs supervisés : | |||
<syntaxhighlight lang="text"> | |||
/root/.ssh/authorized_keys | |||
</syntaxhighlight> | |||
Le fichier authorized_keys contient les clés publiques des clients autorisés à se connecter. | |||
Il ne doit pas être confondu avec les clés d'identité SSH propres au serveur. | |||
=== Incident du 14 octobre 2026 === | |||
Lors du contrôle automatique de 6 h, trois connexions SSH ont échoué : | |||
* Beotos3 ; | |||
* Eole3 ; | |||
* PBS100. | |||
Les erreurs étaient enregistrées avec le code 255. | |||
Les connexions fonctionnaient pourtant depuis une session interactive root sur Saturne3. | |||
'''Cause identifiée :''' | |||
La session interactive disposait d'un agent SSH, accessible par la variable : | |||
<syntaxhighlight lang="bash"> | |||
SSH_AUTH_SOCK | |||
</syntaxhighlight> | |||
Cet agent permettait l'utilisation de clés qui n'étaient pas directement disponibles pour le service systemd. | |||
Le service systemd ne disposait pas de cet agent. | |||
Les connexions échouaient donc lors de l'exécution automatique. | |||
'''Correction appliquée :''' | |||
La clé publique ED25519 du compte root de Saturne3 a été ajoutée aux fichiers authorized_keys de Beotos3, Eole3 et PBS100. | |||
Les clés déjà autorisées ont été conservées. | |||
Les connexions ont ensuite été vérifiées sans agent SSH. | |||
Le contrôle quotidien a été relancé via systemd et s'est terminé sans erreur sur les six serveurs. | |||
=== Tester une connexion sans agent SSH === | |||
Depuis Saturne3 : | |||
<syntaxhighlight lang="bash"> | |||
env -u SSH_AUTH_SOCK ssh \ | |||
-o IdentityAgent=none \ | |||
-o BatchMode=yes \ | |||
-o IdentitiesOnly=yes \ | |||
-i /root/.ssh/id_ed25519 \ | |||
root@192.168.123.104 \ | |||
'hostname' | |||
</syntaxhighlight> | |||
Adapter l'adresse au serveur concerné. | |||
Les | Ce test vérifie que l'authentification fonctionne sans dépendre de l'agent SSH de la session interactive. | ||
Pour vérifier tous les serveurs, utiliser les cibles indiquées dans le fichier de configuration. | |||
=== Particularité de template3 === | |||
Le modèle de VM Ubuntu '''template3''' contient désormais la clé publique ED25519 de Saturne3 dans : | |||
<syntaxhighlight lang="text"> | |||
/root/.ssh/authorized_keys | |||
</syntaxhighlight> | |||
Les nouvelles VM clonées à partir de template3 héritent de cette autorisation. | |||
En parallèle, template3 possède un mécanisme de régénération automatique des clés SSH d'identité du serveur après clonage. | |||
Il faut distinguer : | |||
{| class="wikitable" | |||
! Élément | |||
! Fonction | |||
! Comportement après clonage | |||
|- | |||
| /root/.ssh/authorized_keys | |||
| Autorise Saturne3 à se connecter | |||
| Conservé | |||
|- | |||
| /etc/ssh/ssh_host_* | |||
| Identifie le serveur SSH | |||
| Régénéré automatiquement | |||
|} | |||
Le README de template3 documente ce fonctionnement. | |||
'''Attention :''' une VM clonée doit recevoir sa propre configuration réseau avant d'être démarrée simultanément avec une autre VM utilisant les mêmes adresses. | |||
== Scripts == | == Scripts == | ||
| Ligne 130 : | Ligne 412 : | ||
=== supervision_updates.sh === | === supervision_updates.sh === | ||
Ce script assure la supervision quotidienne des | Ce script assure la supervision quotidienne des six serveurs. | ||
Il lit la liste des serveurs dans : | |||
<syntaxhighlight lang="text"> | |||
/etc/ajlsm/supervision-serveurs.conf | |||
</syntaxhighlight> | |||
Pour chaque serveur : | Pour chaque serveur : | ||
| Ligne 139 : | Ligne 427 : | ||
# Enregistrement des mises à jour disponibles. | # Enregistrement des mises à jour disponibles. | ||
# Enregistrement des incidents éventuels. | # Enregistrement des incidents éventuels. | ||
# Ajout d'un marqueur de fin de contrôle lorsque la vérification est réussie. | |||
La commande d'actualisation utilise notamment : | |||
<syntaxhighlight lang="bash"> | |||
apt-get update -qq -o APT::Update::Error-Mode=any | |||
</syntaxhighlight> | |||
L'option Error-Mode=any permet de considérer comme une erreur un échec d'actualisation d'un dépôt APT. | |||
Le script utilise des délais maximaux d'exécution | Le script utilise des délais maximaux d'exécution pour éviter qu'un serveur indisponible bloque indéfiniment la supervision. | ||
qu'un serveur indisponible bloque indéfiniment la supervision. | |||
Les erreurs d'accès SSH et les erreurs APT sont enregistrées. | Les erreurs d'accès SSH et les erreurs APT sont enregistrées. | ||
=== Marqueurs de contrôle === | |||
Lorsqu'un serveur a été vérifié avec succès, le script ajoute une ligne : | |||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
CONTROLE TERMINE : Saturne3 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Chaque serveur possède son propre marqueur. | |||
Le | Le rapport hebdomadaire vérifie la présence d'un en-tête et d'un marqueur pour chaque serveur configuré. | ||
Il exige que chacun apparaisse exactement une fois. | |||
Cela permet notamment de détecter : | |||
* Un serveur absent du rapport. | |||
* Un contrôle interrompu. | |||
* Un contrôle incomplet. | |||
* Un serveur présent plusieurs fois. | |||
=== supervision_updates_collect.py === | === supervision_updates_collect.py === | ||
| Ligne 169 : | Ligne 474 : | ||
* La version candidate. | * La version candidate. | ||
Les mises à jour sont réparties en deux catégories | Les mises à jour sont réparties en deux catégories. | ||
'''Sécurité Debian/Ubuntu''' | '''Sécurité Debian/Ubuntu''' | ||
Versions candidates provenant des dépôts de sécurité Debian | Versions candidates provenant des dépôts de sécurité Debian ou Ubuntu. | ||
ou Ubuntu. | |||
'''Autres mises à jour''' | '''Autres mises à jour''' | ||
| Ligne 180 : | Ligne 484 : | ||
Versions candidates provenant des autres dépôts, notamment Proxmox. | Versions candidates provenant des autres dépôts, notamment Proxmox. | ||
Exemple | Exemple : | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
ATTENTION : 3 mise(s) a jour APT disponible(s) | ATTENTION : 3 mise(s) a jour APT disponible(s) | ||
Securite Debian/Ubuntu : 1 | Securite Debian/Ubuntu : 1 | ||
exemple-paquet : 1.0 -> 1.1 | exemple-paquet : 1.0 -> 1.1 | ||
| Ligne 195 : | Ligne 498 : | ||
'''Limite importante :''' | '''Limite importante :''' | ||
Une mise à jour classée parmi les autres mises à jour peut | Une mise à jour classée parmi les autres mises à jour peut également contenir un correctif de sécurité. | ||
également contenir un correctif de sécurité. | |||
La classification repose sur la provenance APT de la version candidate. | La classification repose sur la provenance APT de la version candidate. | ||
| Ligne 202 : | Ligne 504 : | ||
Elle ne constitue pas une analyse exhaustive des vulnérabilités. | Elle ne constitue pas une analyse exhaustive des vulnérabilités. | ||
Le dispositif ne réalise pas de classification automatique des CVE | Le dispositif ne réalise pas de classification automatique des CVE selon leur gravité. | ||
selon leur gravité. | |||
Les correctifs Ubuntu Pro ESM ne font pas l'objet d'un suivi spécifique. | Les correctifs Ubuntu Pro ESM ne font pas l'objet d'un suivi spécifique. | ||
| Ligne 210 : | Ligne 511 : | ||
Le script produit le rapport hebdomadaire. | Le script produit le rapport hebdomadaire. | ||
Il lit également : | |||
<syntaxhighlight lang="text"> | |||
/etc/ajlsm/supervision-serveurs.conf | |||
</syntaxhighlight> | |||
Il vérifie notamment : | Il vérifie notamment : | ||
| Ligne 215 : | Ligne 522 : | ||
* La présence du rapport quotidien. | * La présence du rapport quotidien. | ||
* Son ancienneté, limitée à 25 heures. | * Son ancienneté, limitée à 25 heures. | ||
* La présence | * La présence de tous les serveurs configurés. | ||
* La présence d'un en-tête et d'un marqueur de contrôle exactement une fois par serveur. | |||
* L'absence d'erreurs dans la dernière collecte. | * L'absence d'erreurs dans la dernière collecte. | ||
* L'existence de mises à jour disponibles. | * L'existence de mises à jour disponibles. | ||
| Ligne 235 : | Ligne 543 : | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
ajlsm@ajlsm.com | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Cette adresse est une liste de diffusion. | |||
Les destinataires peuvent être modifiés dans la gestion de la liste sans intervenir sur Saturne3. | |||
== Classification des rapports == | |||
{| class="wikitable" | {| class="wikitable" | ||
| Ligne 245 : | Ligne 557 : | ||
! Objet du courriel | ! Objet du courriel | ||
|- | |- | ||
| OK | | '''OK''' | ||
| Aucun paquet à mettre à jour et aucune anomalie | | Aucun paquet à mettre à jour et aucune anomalie | ||
| [AJLSM][OK] Maintenance hebdo | | [AJLSM][OK] Maintenance hebdo | ||
|- | |- | ||
| ACTION | | '''ACTION''' | ||
| Mises à jour disponibles | | Mises à jour disponibles sans anomalie | ||
| [AJLSM][ACTION] Maintenance hebdo | | [AJLSM][ACTION] Maintenance hebdo | ||
|- | |- | ||
| ERREUR | | '''ERREUR''' | ||
| Rapport absent, incomplet, ancien ou incident enregistré | | Rapport absent, incomplet, ancien ou incident enregistré | ||
| [AJLSM][ERREUR] Maintenance hebdo | | [AJLSM][ERREUR] Maintenance hebdo | ||
|} | |} | ||
L'objet réel du courriel contient également un résumé de la situation. | |||
Exemple : | |||
<syntaxhighlight lang="text"> | |||
[AJLSM][ERREUR] Maintenance hebdo - Anomalie de supervision detectee | |||
</syntaxhighlight> | |||
Le script ne produit pas d'alerte immédiate de type CRITIQUE. | Le script ne produit pas d'alerte immédiate de type CRITIQUE. | ||
=== Particularité des incidents historiques === | |||
Un rapport peut être classé ERREUR même si le dernier contrôle quotidien s'est terminé correctement. | |||
C'est le cas lorsque des incidents ont été enregistrés depuis le précédent rapport. | |||
Le premier rapport envoyé le 14 octobre 2026 illustre ce fonctionnement. | |||
Les trois incidents SSH du matin étaient présents dans le rapport, alors que le contrôle quotidien suivant s'était terminé avec : | |||
<syntaxhighlight lang="text"> | |||
FIN DE VERIFICATION - Erreurs : 0 | |||
</syntaxhighlight> | |||
== Ordonnancement systemd == | == Ordonnancement systemd == | ||
| Ligne 334 : | Ligne 668 : | ||
'''Remarque :''' | '''Remarque :''' | ||
Ces configurations décrivent le fonctionnement du dispositif. | |||
Les fichiers | |||
pour leur contenu exact. | Les fichiers effectivement installés sur Saturne3 restent la référence pour leur contenu exact. | ||
=== Activation des timers === | === Activation des timers === | ||
| Ligne 350 : | Ligne 684 : | ||
=== Vérification === | === Vérification === | ||
Lister les timers : | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Ligne 355 : | Ligne 691 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Vérifier | Vérifier leur activation : | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Ligne 362 : | Ligne 698 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Vérifier | Vérifier leur état : | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Ligne 368 : | Ligne 704 : | ||
systemctl status supervision-rapport.timer | systemctl status supervision-rapport.timer | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Lancement manuel === | |||
Collecte quotidienne : | |||
<syntaxhighlight lang="bash"> | |||
systemctl start supervision-updates.service | |||
</syntaxhighlight> | |||
Cette commande actualise les index APT et collecte les informations. | |||
Elle n'installe aucun paquet. | |||
Rapport hebdomadaire : | |||
<syntaxhighlight lang="bash"> | |||
systemctl start supervision-rapport.service | |||
</syntaxhighlight> | |||
'''Attention : cette commande déclenche un véritable envoi de courriel.''' | |||
Elle doit être utilisée uniquement lorsqu'un nouvel envoi est souhaité. | |||
== Journaux et fichiers d'état == | == Journaux et fichiers d'état == | ||
| Ligne 391 : | Ligne 749 : | ||
| /var/lib/supervision-updates/derniere-position | | /var/lib/supervision-updates/derniere-position | ||
| Position de lecture dans le journal d'incidents | | Position de lecture dans le journal d'incidents | ||
|- | |||
| /var/lib/supervision-updates/dernier-envoi | |||
| Fichier actuellement réservé, non exploité par le script hebdomadaire | |||
|} | |} | ||
Les fichiers | Les fichiers d'état sont gérés par root. | ||
Les journaux et fichiers d'état doivent conserver | Les journaux et fichiers d'état doivent conserver des permissions restrictives. | ||
des permissions restrictives. | |||
=== Gestion des incidents === | === Gestion des incidents === | ||
Lorsqu'un contrôle échoue, le script quotidien ajoute | Lorsqu'un contrôle échoue, le script quotidien ajoute une entrée dans incidents.log. | ||
une entrée dans incidents.log. | |||
Chaque entrée contient : | Chaque entrée contient : | ||
| Ligne 409 : | Ligne 768 : | ||
* La description de l'erreur. | * La description de l'erreur. | ||
Le rapport hebdomadaire reprend les incidents qui n'ont pas | Exemple : | ||
encore été transmis. | |||
<syntaxhighlight lang="text"> | |||
2026-10-14 06:00:10 | Beotos3 | Echec actualisation APT (code 255) | |||
</syntaxhighlight> | |||
Le rapport hebdomadaire reprend les incidents qui n'ont pas encore été transmis. | |||
Un mécanisme de positionnement en octets permet de ne pas | Un mécanisme de positionnement en octets permet de ne pas renvoyer les mêmes incidents lors des rapports suivants. | ||
renvoyer les mêmes incidents lors des rapports suivants. | |||
Seules les lignes complètes sont traitées. | Seules les lignes complètes sont traitées. | ||
| Ligne 423 : | Ligne 786 : | ||
# Le journal actif est purgé lorsque toutes ses lignes ont été traitées. | # Le journal actif est purgé lorsque toutes ses lignes ont été traitées. | ||
Un verrou commun protège le journal contre les écritures | Un verrou commun protège le journal contre les écritures simultanées pendant la préparation du rapport. | ||
simultanées pendant la préparation du rapport. | |||
=== Verrous === | === Verrous === | ||
| Ligne 436 : | Ligne 798 : | ||
Les verrous sont gérés avec flock. | Les verrous sont gérés avec flock. | ||
Ils empêchent les exécutions concurrentes susceptibles | Ils empêchent les exécutions concurrentes susceptibles de provoquer des incohérences. | ||
de provoquer des incohérences. | |||
== Rotation des journaux == | == Rotation des journaux == | ||
| Ligne 532 : | Ligne 893 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Vérifier les six contrôles === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
grep '^CONTROLE TERMINE :' \ | |||
/var/lib/supervision-updates/dernier-rapport.txt | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Résultat attendu : | |||
<syntaxhighlight lang="text"> | |||
CONTROLE TERMINE : Saturne3 | |||
CONTROLE TERMINE : Beotos3 | |||
CONTROLE TERMINE : Eole3 | |||
CONTROLE TERMINE : PBS100 | |||
CONTROLE TERMINE : AD64 | |||
CONTROLE TERMINE : APBP2 | |||
</syntaxhighlight> | |||
Le rapport doit également se terminer par : | |||
<syntaxhighlight lang=" | <syntaxhighlight lang="text"> | ||
FIN DE VERIFICATION - Erreurs : 0 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Diagnostic == | == Diagnostic == | ||
| Ligne 571 : | Ligne 932 : | ||
=== Erreur SSH === | === Erreur SSH === | ||
Tester depuis Saturne3 : | Tester depuis Saturne3, sans agent SSH : | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ssh -o | env -u SSH_AUTH_SOCK ssh \ | ||
-o IdentityAgent=none \ | |||
-o BatchMode=yes \ | |||
-o IdentitiesOnly=yes \ | |||
-i /root/.ssh/id_ed25519 \ | |||
root@192.168.123.104 true | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Adapter l'adresse au serveur concerné. | |||
Si le test échoue : | |||
# Vérifier la connectivité réseau. | |||
# Vérifier le service SSH du serveur distant. | |||
# Vérifier la présence de la clé publique de Saturne3 dans authorized_keys. | |||
# Vérifier les permissions du répertoire .ssh et du fichier authorized_keys. | |||
# Vérifier la clé d'identité SSH du serveur distant. | |||
# Examiner les journaux SSH du serveur concerné. | |||
'''Ne pas désactiver StrictHostKeyChecking pour contourner une erreur de clé d'identité.''' | |||
=== Erreur APT === | === Erreur APT === | ||
| Ligne 601 : | Ligne 978 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Sauvegarde et gestion des versions == | == Sauvegarde et gestion des versions SVN == | ||
=== Objectif === | |||
Les scripts et fichiers de configuration doivent être conservés | Les scripts et fichiers de configuration doivent être conservés dans le dépôt SVN du projet AJLSM. | ||
dans le dépôt SVN | |||
L'objectif est de pouvoir : | |||
* Retrouver une version antérieure. | |||
* Identifier les modifications apportées. | |||
* Réinstaller le mécanisme sur un autre serveur. | |||
* Reconstituer les unités systemd. | |||
* Conserver une documentation cohérente avec les fichiers installés. | |||
'''Principe :''' | |||
Les fichiers à versionner doivent être récupérés directement sur Saturne3. | |||
Les contenus présentés dans cette documentation sont explicatifs et ne remplacent pas les fichiers réellement installés. | |||
=== Fichiers à versionner === | === Fichiers à versionner === | ||
{| class="wikitable" | |||
supervision_updates.sh | ! Fichier source sur Saturne3 | ||
supervision_updates_collect.py | ! Fonction | ||
supervision_rapport.sh | |- | ||
| /usr/local/sbin/supervision_updates.sh | |||
| Collecte quotidienne | |||
|- | |||
| /usr/local/sbin/supervision_updates_collect.py | |||
| Analyse APT | |||
|- | |||
| /usr/local/sbin/supervision_rapport.sh | |||
| Rapport hebdomadaire | |||
|- | |||
| /etc/ajlsm/supervision-serveurs.conf | |||
| Liste centralisée des serveurs | |||
|- | |||
| /etc/systemd/system/supervision-updates.service | |||
| Service quotidien | |||
|- | |||
| /etc/systemd/system/supervision-updates.timer | |||
| Timer quotidien | |||
|- | |||
| /etc/systemd/system/supervision-rapport.service | |||
| Service hebdomadaire | |||
|- | |||
| /etc/systemd/system/supervision-rapport.timer | |||
| Timer hebdomadaire | |||
|- | |||
| /etc/logrotate.d/supervision-updates | |||
| Rotation du journal quotidien | |||
|- | |||
| /etc/logrotate.d/supervision-incidents | |||
| Rotation des archives d'incidents | |||
|} | |||
Soit '''10 fichiers''' à versionner. | |||
La documentation MediaWiki doit également être exportée et conservée dans SVN. | |||
=== Organisation SVN proposée === | |||
<pre> | |||
ajlsm/ | |||
└── supervision/ | |||
└── updates/ | |||
├── scripts/ | |||
│ ├── supervision_updates.sh | |||
│ ├── supervision_updates_collect.py | |||
│ └── supervision_rapport.sh | |||
│ | |||
├── config/ | |||
│ └── supervision-serveurs.conf | |||
│ | |||
├── systemd/ | |||
│ ├── supervision-updates.service | |||
│ ├── supervision-updates.timer | |||
│ ├── supervision-rapport.service | |||
│ └── supervision-rapport.timer | |||
│ | |||
├── logrotate/ | |||
│ ├── supervision-updates | |||
│ └── supervision-incidents | |||
│ | |||
└── documentation/ | |||
├── maintenance.mediawiki | |||
└── supervision.mediawiki | |||
</pre> | |||
Cette arborescence est une proposition. | |||
Elle devra être adaptée à l'organisation réelle du dépôt SVN AJLSM. | |||
=== Fichiers à exclure de SVN === | === Fichiers à exclure de SVN === | ||
Les fichiers suivants ne doivent pas être versionnés : | |||
* Les journaux d'exécution. | |||
* Les rapports quotidiens générés. | |||
* Les incidents actifs. | |||
* Les archives d'incidents. | |||
* Les fichiers de position de lecture. | |||
* Les fichiers de verrouillage. | |||
* Les sauvegardes temporaires. | |||
* Les fichiers Python compilés. | |||
* Les clés SSH privées. | |||
Exemples : | |||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
| Ligne 638 : | Ligne 1 094 : | ||
*.log.* | *.log.* | ||
__pycache__/ | __pycache__/ | ||
*.pyc | |||
dernier-rapport.txt | dernier-rapport.txt | ||
derniere-position | derniere-position | ||
dernier-envoi | |||
incidents.log | |||
incidents-archives.log | |||
*.key | |||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Attention :''' la clé privée SSH de Saturne3 ne doit jamais être déposée dans SVN. | |||
=== Récupération des fichiers === | |||
== Maintenance du dispositif == | Les fichiers doivent être copiés depuis leurs emplacements réels sur Saturne3. | ||
Leur récupération sera effectuée dans un répertoire de travail dédié avant leur ajout au dépôt SVN. | |||
Les fichiers originaux doivent rester en place. | |||
La récupération ne nécessite ni arrêt des services, ni désactivation des timers. | |||
=== Maintenance du dispositif === | |||
En cas de modification des scripts : | En cas de modification des scripts : | ||
| Ligne 662 : | Ligne 1 133 : | ||
Vérifier ensuite les timers. | Vérifier ensuite les timers. | ||
== Historique du dispositif == | |||
{| class="wikitable" | |||
! Date | |||
! Intervention | |||
! Résultat | |||
|- | |||
| 13/10/2026 | |||
| Mise en service initiale de la supervision centralisée sur Saturne3, Beotos3, Eole3 et PBS100. | |||
| OK | |||
|- | |||
| 14/10/2026 | |||
| Ajout d'AD64 et APBP2. | |||
| OK | |||
|- | |||
| 14/10/2026 | |||
| Centralisation de la liste des serveurs dans supervision-serveurs.conf. | |||
| OK | |||
|- | |||
| 14/10/2026 | |||
| Correction de l'authentification SSH pour les exécutions systemd sans agent interactif. | |||
| OK | |||
|- | |||
| 14/10/2026 | |||
| Validation du contrôle quotidien sur les six serveurs. | |||
| OK | |||
|- | |||
| 14/10/2026 | |||
| Modification du destinataire vers ajlsm@ajlsm.com. | |||
| OK | |||
|- | |||
| 14/10/2026 | |||
| Premier envoi réel du rapport hebdomadaire ; réception confirmée. | |||
| OK | |||
|} | |||
== Références == | == Références == | ||
Dernière version du 14 octobre 2026 à 11:14
Supervision des mises à jour de l'infrastructure AJLSM
[modifier | modifier le wikicode]Dernière mise à jour : 14 octobre 2026
Présentation générale
[modifier | modifier le wikicode]| Élément | Information |
|---|---|
| Serveur de supervision | Saturne3 |
| Systèmes surveillés | Saturne3, Beotos3, Eole3, PBS100, AD64, APBP2 |
| Mise en service initiale | 13 octobre 2026 |
| Extension à six serveurs | 14 octobre 2026 |
| Contrôle quotidien | Tous les jours à 6 h |
| Rapport hebdomadaire | Lundi à 7 h |
| Installation automatique | Aucune |
| Redémarrage automatique | Aucun |
| Notifications | Courriel hebdomadaire à ajlsm@ajlsm.com |
| Configuration des serveurs | /etc/ajlsm/supervision-serveurs.conf |
Objectif
[modifier | modifier le wikicode]La supervision des mises à jour AJLSM permet de surveiller quotidiennement les mises à jour disponibles sur les principaux serveurs de l'infrastructure.
Le dispositif est centralisé sur Saturne3.
Il permet :
- D'actualiser les index APT des serveurs.
- D'identifier les mises à jour disponibles.
- De distinguer les mises à jour de sécurité Debian/Ubuntu des autres mises à jour, lorsque cette distinction est possible.
- De détecter les erreurs d'accès SSH et les échecs des commandes APT.
- De conserver les incidents rencontrés entre deux rapports.
- De vérifier que chaque serveur configuré figure exactement une fois dans le rapport.
- D'envoyer un rapport hebdomadaire récapitulatif.
Aucun paquet n'est installé automatiquement par ces scripts.
Les mises à jour et les éventuels redémarrages restent des opérations de maintenance manuelles.
Le suivi opérationnel, les versions des systèmes et les historiques d'intervention sont documentés dans :
Maintenance et mises à jour de l'infrastructure AJLSM
Architecture
[modifier | modifier le wikicode]Serveurs surveillés
[modifier | modifier le wikicode]| Serveur | Fonction | Cible de supervision | Mode |
|---|---|---|---|
| Saturne3 | Hyperviseur principal et serveur de supervision | local | Exécution locale |
| Beotos3 | Hyperviseur et serveur de sauvegarde | root@192.168.123.104 | SSH |
| Eole3 | Serveur de données et d'images | root@192.168.123.202 | SSH |
| PBS100 | Serveur Proxmox Backup Server | root@51.178.245.43 | SSH |
| AD64 | Serveur applicatif AD64 | root@192.168.123.41 | SSH |
| APBP2 | Serveur applicatif APBP2 | root@192.168.123.42 | SSH |
Attention : Beotos3 et PBS100 sont deux systèmes distincts.
Beotos3 est le serveur physique Proxmox. PBS100 est la machine virtuelle hébergeant Proxmox Backup Server.
Ils sont supervisés séparément.
Principe de fonctionnement
[modifier | modifier le wikicode]Le mécanisme comporte deux opérations distinctes :
- Une collecte quotidienne des informations APT.
- Un rapport hebdomadaire envoyé par courriel.
Les opérations sont ordonnancées par systemd.
Les contrôles quotidiens sont silencieux : ils n'envoient pas directement de courriel.
Les anomalies sont enregistrées dans un journal d'incidents et reprises dans le rapport hebdomadaire.
Schéma de fonctionnement
[modifier | modifier le wikicode] SATURNE3
Serveur de supervision
|
|
Configuration centralisée
/etc/ajlsm/supervision-serveurs.conf
|
|
Tous les jours à 6 h
|
v
supervision_updates.sh
|
+-------------+-------------+
| |
Exécution locale Connexions SSH
| |
Saturne3 +-------------+-------------+
| | |
Beotos3 Eole3 PBS100
| | |
+-------------+-------------+
|
AD64
APBP2
|
v
supervision_updates_collect.py
|
v
Résultat quotidien
|
+----------+----------+
| |
dernier-rapport.txt incidents.log
| |
+----------+----------+
|
Lundi à 7 h
|
v
supervision_rapport.sh
|
v
Postfix
|
v
ajlsm@ajlsm.com
Configuration centralisée des serveurs
[modifier | modifier le wikicode]Emplacement
[modifier | modifier le wikicode]La liste des serveurs supervisés est définie dans :
/etc/ajlsm/supervision-serveurs.conf
Cette configuration est utilisée par les deux scripts :
- supervision_updates.sh
- supervision_rapport.sh
Elle évite de maintenir deux listes de serveurs indépendantes.
Contenu actuel
[modifier | modifier le wikicode]# Supervision APT AJLSM
# Format : Nom|Cible SSH
# Utiliser "local" pour Saturne3.
Saturne3|local
Beotos3|root@192.168.123.104
Eole3|root@192.168.123.202
PBS100|root@51.178.245.43
AD64|root@192.168.123.41
APBP2|root@192.168.123.42
Format
[modifier | modifier le wikicode]Chaque ligne contient :
Nom|Cible
Exemples :
Saturne3|local
Beotos3|root@192.168.123.104
Les lignes vides et les commentaires commençant par # sont ignorés.
Les scripts vérifient :
- La présence du fichier de configuration.
- La présence d'au moins un serveur.
- Le format des entrées.
- L'absence de noms de serveurs en double.
Une configuration invalide provoque l'arrêt du script concerné.
Ajouter un serveur
[modifier | modifier le wikicode]Pour ajouter un serveur :
- Vérifier que le serveur dispose d'APT et de Python 3 avec la bibliothèque python-apt.
- Configurer l'authentification SSH depuis Saturne3.
- Vérifier la clé d'identité SSH du serveur distant.
- Tester la connexion SSH sans agent interactif.
- Ajouter une ligne dans supervision-serveurs.conf.
- Vérifier la syntaxe des scripts.
- Lancer une collecte de supervision.
- Vérifier que le serveur apparaît dans le rapport.
- Mettre à jour la documentation MediaWiki.
- Enregistrer la modification dans SVN.
Exemple :
NOUVEAU|root@192.168.123.50
Important : l'ajout d'un serveur ne nécessite pas de modifier les listes internes des scripts.
Authentification SSH
[modifier | modifier le wikicode]Principe
[modifier | modifier le wikicode]Saturne3 interroge les serveurs distants en SSH avec le compte root.
L'authentification repose sur une clé publique autorisée sur les serveurs distants.
Le script utilise notamment :
-o BatchMode=yes
-o ConnectTimeout=10
-o StrictHostKeyChecking=yes
- BatchMode=yes empêche les demandes interactives de mot de passe.
- ConnectTimeout=10 limite le délai d'établissement de la connexion.
- StrictHostKeyChecking=yes impose la vérification de la clé d'identité du serveur distant.
Les clés d'identité SSH des serveurs doivent donc être connues et vérifiées avant leur utilisation automatisée.
Clé SSH de Saturne3
[modifier | modifier le wikicode]La clé publique ED25519 du compte root de Saturne3 possède l'empreinte :
SHA256:fTlK1a2y6at6ZPpDWVy1of+Q210IxxaU1NkmqMgDkyw
Elle est autorisée dans le fichier suivant sur les serveurs supervisés :
/root/.ssh/authorized_keys
Le fichier authorized_keys contient les clés publiques des clients autorisés à se connecter.
Il ne doit pas être confondu avec les clés d'identité SSH propres au serveur.
Incident du 14 octobre 2026
[modifier | modifier le wikicode]Lors du contrôle automatique de 6 h, trois connexions SSH ont échoué :
- Beotos3 ;
- Eole3 ;
- PBS100.
Les erreurs étaient enregistrées avec le code 255.
Les connexions fonctionnaient pourtant depuis une session interactive root sur Saturne3.
Cause identifiée :
La session interactive disposait d'un agent SSH, accessible par la variable :
SSH_AUTH_SOCK
Cet agent permettait l'utilisation de clés qui n'étaient pas directement disponibles pour le service systemd.
Le service systemd ne disposait pas de cet agent.
Les connexions échouaient donc lors de l'exécution automatique.
Correction appliquée :
La clé publique ED25519 du compte root de Saturne3 a été ajoutée aux fichiers authorized_keys de Beotos3, Eole3 et PBS100.
Les clés déjà autorisées ont été conservées.
Les connexions ont ensuite été vérifiées sans agent SSH.
Le contrôle quotidien a été relancé via systemd et s'est terminé sans erreur sur les six serveurs.
Tester une connexion sans agent SSH
[modifier | modifier le wikicode]Depuis Saturne3 :
env -u SSH_AUTH_SOCK ssh \
-o IdentityAgent=none \
-o BatchMode=yes \
-o IdentitiesOnly=yes \
-i /root/.ssh/id_ed25519 \
root@192.168.123.104 \
'hostname'
Adapter l'adresse au serveur concerné.
Ce test vérifie que l'authentification fonctionne sans dépendre de l'agent SSH de la session interactive.
Pour vérifier tous les serveurs, utiliser les cibles indiquées dans le fichier de configuration.
Particularité de template3
[modifier | modifier le wikicode]Le modèle de VM Ubuntu template3 contient désormais la clé publique ED25519 de Saturne3 dans :
/root/.ssh/authorized_keys
Les nouvelles VM clonées à partir de template3 héritent de cette autorisation.
En parallèle, template3 possède un mécanisme de régénération automatique des clés SSH d'identité du serveur après clonage.
Il faut distinguer :
| Élément | Fonction | Comportement après clonage |
|---|---|---|
| /root/.ssh/authorized_keys | Autorise Saturne3 à se connecter | Conservé |
| /etc/ssh/ssh_host_* | Identifie le serveur SSH | Régénéré automatiquement |
Le README de template3 documente ce fonctionnement.
Attention : une VM clonée doit recevoir sa propre configuration réseau avant d'être démarrée simultanément avec une autre VM utilisant les mêmes adresses.
Scripts
[modifier | modifier le wikicode]Emplacement
[modifier | modifier le wikicode]Les scripts sont installés sur Saturne3 dans :
/usr/local/sbin/
| Fichier | Fonction |
|---|---|
| supervision_updates.sh | Orchestration des contrôles quotidiens |
| supervision_updates_collect.py | Analyse et classification des mises à jour APT |
| supervision_rapport.sh | Production et envoi du rapport hebdomadaire |
supervision_updates.sh
[modifier | modifier le wikicode]Ce script assure la supervision quotidienne des six serveurs.
Il lit la liste des serveurs dans :
/etc/ajlsm/supervision-serveurs.conf
Pour chaque serveur :
- Actualisation des index APT avec apt-get update.
- Vérification du résultat de l'actualisation.
- Exécution du collecteur Python.
- Enregistrement des mises à jour disponibles.
- Enregistrement des incidents éventuels.
- Ajout d'un marqueur de fin de contrôle lorsque la vérification est réussie.
La commande d'actualisation utilise notamment :
apt-get update -qq -o APT::Update::Error-Mode=any
L'option Error-Mode=any permet de considérer comme une erreur un échec d'actualisation d'un dépôt APT.
Le script utilise des délais maximaux d'exécution pour éviter qu'un serveur indisponible bloque indéfiniment la supervision.
Les erreurs d'accès SSH et les erreurs APT sont enregistrées.
Marqueurs de contrôle
[modifier | modifier le wikicode]Lorsqu'un serveur a été vérifié avec succès, le script ajoute une ligne :
CONTROLE TERMINE : Saturne3
Chaque serveur possède son propre marqueur.
Le rapport hebdomadaire vérifie la présence d'un en-tête et d'un marqueur pour chaque serveur configuré.
Il exige que chacun apparaisse exactement une fois.
Cela permet notamment de détecter :
- Un serveur absent du rapport.
- Un contrôle interrompu.
- Un contrôle incomplet.
- Un serveur présent plusieurs fois.
supervision_updates_collect.py
[modifier | modifier le wikicode]Le collecteur Python utilise la bibliothèque python-apt.
Il examine les paquets installés et leurs versions candidates.
Pour chaque mise à jour disponible, il indique :
- Le nom du paquet.
- La version installée.
- La version candidate.
Les mises à jour sont réparties en deux catégories.
Sécurité Debian/Ubuntu
Versions candidates provenant des dépôts de sécurité Debian ou Ubuntu.
Autres mises à jour
Versions candidates provenant des autres dépôts, notamment Proxmox.
Exemple :
ATTENTION : 3 mise(s) a jour APT disponible(s)
Securite Debian/Ubuntu : 1
exemple-paquet : 1.0 -> 1.1
Autres mises a jour (dont Proxmox) : 2
exemple-proxmox : 2.0 -> 2.1
exemple-debian : 3.0 -> 3.1
Limite importante :
Une mise à jour classée parmi les autres mises à jour peut également contenir un correctif de sécurité.
La classification repose sur la provenance APT de la version candidate.
Elle ne constitue pas une analyse exhaustive des vulnérabilités.
Le dispositif ne réalise pas de classification automatique des CVE selon leur gravité.
Les correctifs Ubuntu Pro ESM ne font pas l'objet d'un suivi spécifique.
supervision_rapport.sh
[modifier | modifier le wikicode]Le script produit le rapport hebdomadaire.
Il lit également :
/etc/ajlsm/supervision-serveurs.conf
Il vérifie notamment :
- La présence du rapport quotidien.
- Son ancienneté, limitée à 25 heures.
- La présence de tous les serveurs configurés.
- La présence d'un en-tête et d'un marqueur de contrôle exactement une fois par serveur.
- L'absence d'erreurs dans la dernière collecte.
- L'existence de mises à jour disponibles.
- Les incidents enregistrés depuis le précédent rapport.
Le rapport est transmis à Postfix avec :
/usr/sbin/sendmail
Expéditeur :
root@saturne3.ajlsm.com
Destinataire :
ajlsm@ajlsm.com
Cette adresse est une liste de diffusion.
Les destinataires peuvent être modifiés dans la gestion de la liste sans intervenir sur Saturne3.
Classification des rapports
[modifier | modifier le wikicode]| Niveau | Critère | Objet du courriel |
|---|---|---|
| OK | Aucun paquet à mettre à jour et aucune anomalie | [AJLSM][OK] Maintenance hebdo |
| ACTION | Mises à jour disponibles sans anomalie | [AJLSM][ACTION] Maintenance hebdo |
| ERREUR | Rapport absent, incomplet, ancien ou incident enregistré | [AJLSM][ERREUR] Maintenance hebdo |
L'objet réel du courriel contient également un résumé de la situation.
Exemple :
[AJLSM][ERREUR] Maintenance hebdo - Anomalie de supervision detectee
Le script ne produit pas d'alerte immédiate de type CRITIQUE.
Particularité des incidents historiques
[modifier | modifier le wikicode]Un rapport peut être classé ERREUR même si le dernier contrôle quotidien s'est terminé correctement.
C'est le cas lorsque des incidents ont été enregistrés depuis le précédent rapport.
Le premier rapport envoyé le 14 octobre 2026 illustre ce fonctionnement.
Les trois incidents SSH du matin étaient présents dans le rapport, alors que le contrôle quotidien suivant s'était terminé avec :
FIN DE VERIFICATION - Erreurs : 0
Ordonnancement systemd
[modifier | modifier le wikicode]Fichiers installés
[modifier | modifier le wikicode]/etc/systemd/system/supervision-updates.service
/etc/systemd/system/supervision-updates.timer
/etc/systemd/system/supervision-rapport.service
/etc/systemd/system/supervision-rapport.timer
Contrôle quotidien
[modifier | modifier le wikicode]Service :
[Unit]
Description=Supervision quotidienne des mises a jour AJLSM
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
User=root
ExecStart=/usr/local/sbin/supervision_updates.sh
Timer :
[Unit]
Description=Verification quotidienne des mises a jour AJLSM
[Timer]
OnCalendar=*-*-* 06:00:00
Persistent=true
[Install]
WantedBy=timers.target
Rapport hebdomadaire
[modifier | modifier le wikicode]Service :
[Unit]
Description=Rapport hebdomadaire des mises a jour AJLSM
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
User=root
ExecStart=/usr/local/sbin/supervision_rapport.sh
Timer :
[Unit]
Description=Envoi hebdomadaire du rapport de supervision AJLSM
[Timer]
OnCalendar=Mon *-*-* 07:00:00
Persistent=true
[Install]
WantedBy=timers.target
Remarque :
Ces configurations décrivent le fonctionnement du dispositif.
Les fichiers effectivement installés sur Saturne3 restent la référence pour leur contenu exact.
Activation des timers
[modifier | modifier le wikicode]Après installation ou modification des unités :
systemctl daemon-reload
systemctl enable --now supervision-updates.timer
systemctl enable --now supervision-rapport.timer
Vérification
[modifier | modifier le wikicode]Lister les timers :
systemctl list-timers --all | grep supervision
Vérifier leur activation :
systemctl is-enabled supervision-updates.timer
systemctl is-enabled supervision-rapport.timer
Vérifier leur état :
systemctl status supervision-updates.timer
systemctl status supervision-rapport.timer
Lancement manuel
[modifier | modifier le wikicode]Collecte quotidienne :
systemctl start supervision-updates.service
Cette commande actualise les index APT et collecte les informations.
Elle n'installe aucun paquet.
Rapport hebdomadaire :
systemctl start supervision-rapport.service
Attention : cette commande déclenche un véritable envoi de courriel.
Elle doit être utilisée uniquement lorsqu'un nouvel envoi est souhaité.
Journaux et fichiers d'état
[modifier | modifier le wikicode]Fichiers utilisés
[modifier | modifier le wikicode]| Fichier | Fonction |
|---|---|
| /var/log/supervision-updates.log | Historique des contrôles quotidiens |
| /var/lib/supervision-updates/dernier-rapport.txt | Résultat de la dernière collecte |
| /var/lib/supervision-updates/incidents.log | Incidents non encore archivés |
| /var/lib/supervision-updates/incidents-archives.log | Historique des incidents transmis |
| /var/lib/supervision-updates/derniere-position | Position de lecture dans le journal d'incidents |
| /var/lib/supervision-updates/dernier-envoi | Fichier actuellement réservé, non exploité par le script hebdomadaire |
Les fichiers d'état sont gérés par root.
Les journaux et fichiers d'état doivent conserver des permissions restrictives.
Gestion des incidents
[modifier | modifier le wikicode]Lorsqu'un contrôle échoue, le script quotidien ajoute une entrée dans incidents.log.
Chaque entrée contient :
- La date et l'heure.
- Le serveur concerné.
- La description de l'erreur.
Exemple :
2026-10-14 06:00:10 | Beotos3 | Echec actualisation APT (code 255)
Le rapport hebdomadaire reprend les incidents qui n'ont pas encore été transmis.
Un mécanisme de positionnement en octets permet de ne pas renvoyer les mêmes incidents lors des rapports suivants.
Seules les lignes complètes sont traitées.
Après acceptation du courriel par Postfix :
- Les incidents transmis sont archivés.
- La position de lecture est mise à jour.
- Le journal actif est purgé lorsque toutes ses lignes ont été traitées.
Un verrou commun protège le journal contre les écritures simultanées pendant la préparation du rapport.
Verrous
[modifier | modifier le wikicode]/run/supervision-updates.lock
/run/supervision-rapport.lock
/run/supervision-incidents.lock
Les verrous sont gérés avec flock.
Ils empêchent les exécutions concurrentes susceptibles de provoquer des incohérences.
Rotation des journaux
[modifier | modifier le wikicode]Journal quotidien
[modifier | modifier le wikicode]Configuration :
/etc/logrotate.d/supervision-updates
Contenu :
/var/log/supervision-updates.log {
weekly
maxsize 10M
rotate 12
compress
delaycompress
missingok
notifempty
create 0600 root root
}
Archives des incidents
[modifier | modifier le wikicode]Configuration :
/etc/logrotate.d/supervision-incidents
Contenu :
/var/lib/supervision-updates/incidents-archives.log {
weekly
rotate 12
compress
missingok
notifempty
create 0600 root root
}
Le journal actif incidents.log n'est pas soumis à logrotate.
Il est géré directement par le script hebdomadaire.
Vérification de logrotate
[modifier | modifier le wikicode]logrotate -d /etc/logrotate.d/supervision-updates
logrotate -d /etc/logrotate.d/supervision-incidents
L'option -d permet une simulation sans rotation effective.
Exploitation courante
[modifier | modifier le wikicode]Consulter le dernier rapport
[modifier | modifier le wikicode]cat /var/lib/supervision-updates/dernier-rapport.txt
Consulter les derniers contrôles
[modifier | modifier le wikicode]tail -100 /var/log/supervision-updates.log
Consulter les incidents
[modifier | modifier le wikicode]cat /var/lib/supervision-updates/incidents.log
Consulter les archives
[modifier | modifier le wikicode]cat /var/lib/supervision-updates/incidents-archives.log
Vérifier les exécutions systemd
[modifier | modifier le wikicode]journalctl -u supervision-updates.service --no-pager -n 100
journalctl -u supervision-rapport.service --no-pager -n 100
Vérifier les six contrôles
[modifier | modifier le wikicode]grep '^CONTROLE TERMINE :' \
/var/lib/supervision-updates/dernier-rapport.txt
Résultat attendu :
CONTROLE TERMINE : Saturne3
CONTROLE TERMINE : Beotos3
CONTROLE TERMINE : Eole3
CONTROLE TERMINE : PBS100
CONTROLE TERMINE : AD64
CONTROLE TERMINE : APBP2
Le rapport doit également se terminer par :
FIN DE VERIFICATION - Erreurs : 0
Diagnostic
[modifier | modifier le wikicode]Absence de rapport quotidien
[modifier | modifier le wikicode]Vérifier :
systemctl status supervision-updates.timer
systemctl status supervision-updates.service
journalctl -u supervision-updates.service --no-pager -n 100
Erreur SSH
[modifier | modifier le wikicode]Tester depuis Saturne3, sans agent SSH :
env -u SSH_AUTH_SOCK ssh \
-o IdentityAgent=none \
-o BatchMode=yes \
-o IdentitiesOnly=yes \
-i /root/.ssh/id_ed25519 \
root@192.168.123.104 true
Adapter l'adresse au serveur concerné.
Si le test échoue :
- Vérifier la connectivité réseau.
- Vérifier le service SSH du serveur distant.
- Vérifier la présence de la clé publique de Saturne3 dans authorized_keys.
- Vérifier les permissions du répertoire .ssh et du fichier authorized_keys.
- Vérifier la clé d'identité SSH du serveur distant.
- Examiner les journaux SSH du serveur concerné.
Ne pas désactiver StrictHostKeyChecking pour contourner une erreur de clé d'identité.
Erreur APT
[modifier | modifier le wikicode]Vérifier sur le serveur concerné :
apt-get update
apt list --upgradable
Ces commandes ne déclenchent aucune installation.
Vérification des scripts
[modifier | modifier le wikicode]bash -n /usr/local/sbin/supervision_updates.sh
bash -n /usr/local/sbin/supervision_rapport.sh
python3 -m py_compile \
/usr/local/sbin/supervision_updates_collect.py
Sauvegarde et gestion des versions SVN
[modifier | modifier le wikicode]Objectif
[modifier | modifier le wikicode]Les scripts et fichiers de configuration doivent être conservés dans le dépôt SVN du projet AJLSM.
L'objectif est de pouvoir :
- Retrouver une version antérieure.
- Identifier les modifications apportées.
- Réinstaller le mécanisme sur un autre serveur.
- Reconstituer les unités systemd.
- Conserver une documentation cohérente avec les fichiers installés.
Principe :
Les fichiers à versionner doivent être récupérés directement sur Saturne3.
Les contenus présentés dans cette documentation sont explicatifs et ne remplacent pas les fichiers réellement installés.
Fichiers à versionner
[modifier | modifier le wikicode]| Fichier source sur Saturne3 | Fonction |
|---|---|
| /usr/local/sbin/supervision_updates.sh | Collecte quotidienne |
| /usr/local/sbin/supervision_updates_collect.py | Analyse APT |
| /usr/local/sbin/supervision_rapport.sh | Rapport hebdomadaire |
| /etc/ajlsm/supervision-serveurs.conf | Liste centralisée des serveurs |
| /etc/systemd/system/supervision-updates.service | Service quotidien |
| /etc/systemd/system/supervision-updates.timer | Timer quotidien |
| /etc/systemd/system/supervision-rapport.service | Service hebdomadaire |
| /etc/systemd/system/supervision-rapport.timer | Timer hebdomadaire |
| /etc/logrotate.d/supervision-updates | Rotation du journal quotidien |
| /etc/logrotate.d/supervision-incidents | Rotation des archives d'incidents |
Soit 10 fichiers à versionner.
La documentation MediaWiki doit également être exportée et conservée dans SVN.
Organisation SVN proposée
[modifier | modifier le wikicode]ajlsm/
└── supervision/
└── updates/
├── scripts/
│ ├── supervision_updates.sh
│ ├── supervision_updates_collect.py
│ └── supervision_rapport.sh
│
├── config/
│ └── supervision-serveurs.conf
│
├── systemd/
│ ├── supervision-updates.service
│ ├── supervision-updates.timer
│ ├── supervision-rapport.service
│ └── supervision-rapport.timer
│
├── logrotate/
│ ├── supervision-updates
│ └── supervision-incidents
│
└── documentation/
├── maintenance.mediawiki
└── supervision.mediawiki
Cette arborescence est une proposition.
Elle devra être adaptée à l'organisation réelle du dépôt SVN AJLSM.
Fichiers à exclure de SVN
[modifier | modifier le wikicode]Les fichiers suivants ne doivent pas être versionnés :
- Les journaux d'exécution.
- Les rapports quotidiens générés.
- Les incidents actifs.
- Les archives d'incidents.
- Les fichiers de position de lecture.
- Les fichiers de verrouillage.
- Les sauvegardes temporaires.
- Les fichiers Python compilés.
- Les clés SSH privées.
Exemples :
*.bak
*.bak-*
*.log
*.log.*
__pycache__/
*.pyc
dernier-rapport.txt
derniere-position
dernier-envoi
incidents.log
incidents-archives.log
*.key
Attention : la clé privée SSH de Saturne3 ne doit jamais être déposée dans SVN.
Récupération des fichiers
[modifier | modifier le wikicode]Les fichiers doivent être copiés depuis leurs emplacements réels sur Saturne3.
Leur récupération sera effectuée dans un répertoire de travail dédié avant leur ajout au dépôt SVN.
Les fichiers originaux doivent rester en place.
La récupération ne nécessite ni arrêt des services, ni désactivation des timers.
Maintenance du dispositif
[modifier | modifier le wikicode]En cas de modification des scripts :
- Conserver une copie de la version précédente.
- Modifier le script concerné.
- Vérifier sa syntaxe.
- Tester son fonctionnement.
- Mettre à jour la documentation.
- Enregistrer la nouvelle version dans SVN.
En cas de modification des unités systemd :
systemctl daemon-reload
Vérifier ensuite les timers.
Historique du dispositif
[modifier | modifier le wikicode]| Date | Intervention | Résultat |
|---|---|---|
| 13/10/2026 | Mise en service initiale de la supervision centralisée sur Saturne3, Beotos3, Eole3 et PBS100. | OK |
| 14/10/2026 | Ajout d'AD64 et APBP2. | OK |
| 14/10/2026 | Centralisation de la liste des serveurs dans supervision-serveurs.conf. | OK |
| 14/10/2026 | Correction de l'authentification SSH pour les exécutions systemd sans agent interactif. | OK |
| 14/10/2026 | Validation du contrôle quotidien sur les six serveurs. | OK |
| 14/10/2026 | Modification du destinataire vers ajlsm@ajlsm.com. | OK |
| 14/10/2026 | Premier envoi réel du rapport hebdomadaire ; réception confirmée. | OK |
Références
[modifier | modifier le wikicode]- Maintenance et mises à jour de l'infrastructure AJLSM
- Documentation Debian APT.
- Documentation systemd.
- Documentation Proxmox VE.
- Documentation Ubuntu.