Aller au contenu

Moteur FIFO

Introduction

Le moteur FIFO a pour objectif de garantir la chronologie des événements et d'appliquer les règles de transformations d'entités. Ce moteur est disponible en édition Community.

Afin de garantir l'ordre strict de traitement des événements, une seule instance du moteur FIFO doit être active à un instant donné. Pour faire respecter cette contrainte, un mécanisme de verrouillage distribué a été mis en place pour empêcher tout lancement simultané de plusieurs instances.

Ce mécanisme, basé sur Redis, empêche le lancement simultané de plusieurs instances du moteur.

Lors du démarrage, le moteur tente d'acquérir un verrou exclusif dans Redis. Si ce verrou n'est pas obtenu après plusieurs tentatives, le moteur s'arrête automatiquement. Le verrou est maintenu pendant l'exécution et libéré à l'arrêt propre du moteur.

En cas d'arrêt forcé, le verrou expirera au bout de 2 minutes et 15 secondes, ou après la durée définie par -periodicalWaitTime + 15s si cette dernière est plus longue.

Ce mécanisme garantit qu'une seule instance du moteur FIFO peut s'exécuter à un instant donné.

Pour plus d'informations sur la fonctionnalité de transformation d'entités, consultez la documentation sur les filtres d'événements.

Options de démarrage

L'option -h permet d'afficher toutes les options disponibles au lancement du moteur.

Option Description
-cleanUp Exécute immédiatement toutes les opérations d'archivage et de suppression des données, puis quitte le programme une fois celles-ci terminées.
-cps.logger string Destination de sortie du logger. Remplace le paramètre "Canopsis.logger.Writer" du fichier de configuration TOML
-d Active le mode debug
-enablePrometheusExporter Active l'exporteur Prometheus
-externalDataApiTimeout duration Délai d'attente pour les requêtes HTTP vers l'API externe (défaut : 30s)
-lockTtl int Temps de vie (TTL) du verrou Redis en secondes (défaut : 10)
-periodicalWaitTime duration Durée d'attente entre deux exécutions du processus périodique (défaut : 1m0s)
-printEventOnError Affiche l'événement en cas d'erreur de traitement
-prometheusExporterPort int Port de l'exporteur Prometheus (défaut : 9180)
-version Affiche les informations de version
-workers int Nombre de workers pour traiter les événements fifo_ack (défaut : 10)

Exemple d'utilisation

/engine-fifo -d -periodicalWaitTime 2m0s -workers 15

Cette commande lance le moteur FIFO en mode debug, avec un intervalle de 2 minutes entre les exécutions périodiques et 15 workers pour traiter les événements.

Acquisition du verrou

Lorsque le verrou est acquis avec succès, le moteur démarre normalement et initialise ses workers :

DBG ../lib/canopsis/scheduler/scheduler.go > subscribed
INF ../lib/canopsis/engine/engine.go > engine started consumers=2 periodical_workers=5 routines=6

Echec d'acquision du verrou

Si le verrou est déjà détenu par une autre instance, le moteur échoue à démarrer et se termine immédiatement avec une erreur du type :

ERR ../cmd/engine-fifo/main.go > exit with error error="cannot init engine: redislock: not obtained"

Schéma d'interactions

Nous proposons des schémas d'interactions entre ce moteur et les autres composants de Canopsis.
EN - View Engine Interaction Schemas