Status Engine

Documentation technique

Packaging

Le packaging de Status Engine est fait en trois parties:

  • Un module naemon (status-engine-module) en C, qui écoute les événements émis par naemon et les envoie à gearmand, une sorte de « broker de jobs » (similaire à RabbitMQ, ZeroMQ)

  • Un service php (status-engine-worker), chargé de suivre les jobs envoyés à gearmand et les traiter pour les stocker à leur destination finale (une base de données MySQL)

  • Un frontend php (status-engine-interface), chargé d’afficher les données sur une page web.

Mises à jour

Worker

Le worker utilise comme dépendance une extension php pecl-networking-gearman. Cette extension doit être mise à jour avec la version de php, et il faut s’assurer également que le worker est compatible avec la version de l’extension. Actuellement la version 8.2 de php n’est pas compatible avec la dernière version publiée, donc on utilise la version master publiée sur github

Mise à jour

L’extension peut être mise à jour juste en modifiant la version de php et le commit associé.

La mise à jour du worker nécessite auparavant de cloner et mettre à jour le fichier composer.lock (qui n’est pas inclu dans git) et le fichier php-packages.nix:

cd /path/to/worker/code
path_to_nix=/home/immae/projets/nix
mypkgs_php_path='(builtins.getFlake "path:'$path_to_nix'/flakes/mypackages").packages.x86_64-linux.status-engine-worker'
nix-shell -p "${mypkgs_php_path}.php.packages.composer" "${mypkgs_php_path}.php" "import (builtins.fetchGit ''https://github.com/svanderburg/composer2nix'' { php = ''${mypkgs_php_path}.php''; }"
[nix-shell] $ composer install
[nix-shell] $ rm -rf vendor
[nix-shell] $ composer2nix

Copier ensuite les fichiers composer.lock et php-packages.nix à leur emplacement dans $path_to_nix/flakes/mypackages. Le fichier composer-env.nix généré par composer2nix est déjà enregistré globalement dans le dépôt nix: flakes/mypackages/pkgs/composer-env/default.nix. Il peut être utile de vérifier qu’ils sont toujours compatibles.

Le fichier php-packages.nix ne doit pas être copié en l’état mais doit être modifié pour correspondre au format utilisé en interne.

Migration de la base de données

La base de données doit être migrée après la mise à jour:

status-engine-worker database --update --dry-run

Module

Le module naemon est associé à une version spécifique de naemon. Les détails d’installation et de compatibilité sont indiqués sur le site du module.

Un remplacement implémenté en C++ a vu le jour, mais ne semble pas beaucoup plus maintenu que l’ancien, qui fonctionne correctement.

Outils/Déboggage

Gearmand

Gearmand est un broker de jobs (aperçu de l’architecture de l’outil sur le site de gearmand). On peut vérifier l’état des jobs avec la commande gearadmin:

gearadmin --status
# affiche la liste condensée des jobs.
# Première colonne : nombre de jobs en attente
# Deuxième colonne : nombre de jobs en cours
# Troisième colonne : nombre de workers capables de prendre ces jobs
# C’est normal que certains types de jobs ne soient pas traités par le worker

gearadmin --show-jobs
# affiche la liste détaillée des jobs en attente

gearadmin --workers
# affiche la liste des workers capables de prendre un job

Redis

Redis sert à la fois de stockage d’informations de calculs pour le worker et stocke également les informations de performances. Ces des dernières informations ne sont pas utiles actuellement étant donné qu’elles contiennent la même chose que la base de données.

La base numéro 0 est celle utilisée:

redis-cli
127.0.0.1:6379> keys '*'

Worker

Le worker est un service systemd, couplé avec une tâche régulière de cleanup. Certaines tâches d’administration (migration de base de données) peuvent être réalisées avec la console (status-engine-worker). Les procédures de mise à jour particulières sont documentées sur le site du logiciel

Suivi des versions

Suivi des CVE

Accès / Suppression des données

Le worker stocke les données de monitoring dans une base de données mariadb. Ces données peuvent contenir des informations semi-personnelles selon les informations fournies pour mettre en place le monitoring.

La suppression d’un service n’entraîne pas automatiquement la suppression des données de performance associées. Cependant, les données sont nettoyées régulièrement (jusqu’à 1 an pour les états des services et hôtes) de la base de données, en fonction du fichier de configuration du worker.