Le pré-traitement des valeurs d’élément permet de définir et d’exécuter des règles de transformation pour les valeurs d’élément reçues.
Le pré-traitement est géré par un processus gestionnaire de pré-traitement, ajouté dans Zabbix 3.4, ainsi que par des agents de pré-traitement exécutant les étapes de pré-traitement. Toutes les valeurs (avec ou sans pré-traitement) de différents collecteurs de données transitent par le gestionnaire de pré-traitement avant d'être ajoutées au cache d'historique. La communication IPC basée sur les sockets est utilisée entre les collecteurs de données (pollers, trappers, etc.) et le processus de pré-traitement. Seul le serveur Zabbix exécute des étapes de pré-traitement.
Pour visualiser le flux de données de la source de données à la base de données Zabbix, nous pouvons utiliser le diagramme simplifié suivant :
Le diagramme ci-dessus montre uniquement les processus, les objets et les actions liés au traitement de la valeur d'un élément sous une forme simplifiée. Le diagramme ne montre pas les changements de direction conditionnels, la gestion des erreurs ou les boucles. Le cache de données local du gestionnaire de pré-traitement ne s'affiche pas non plus, car il n'affecte pas directement le flux de données. Le but de ce diagramme est de montrer les processus impliqués dans le traitement des valeurs d’éléments et leur interaction.
L'élément peut changer son état en NON SUPPORTÉ lors du pré-traitement si l'une des étapes du pré-traitement échoue.
L'élément peut changer son état en NON SUPPORTÉ si la normalisation des données échoue (par exemple, lorsque la valeur textuelle ne peut pas être convertie en nombre).
Pour visualiser le processus de pré-traitement des données, nous pouvons utiliser le schéma simplifié suivant :
Le diagramme ci-dessus montre uniquement les processus, les objets et les actions principales liés au pré-traitement des valeurs d’élément sous une forme simplifiée. Le diagramme ne montre pas les changements de direction conditionnels, la gestion des erreurs ou les boucles. Ce diagramme ne présente qu'un seul agent de traitement (plusieurs agents de traitement peuvent être utilisés dans des scénarios réels), une seule valeur d'élément est en cours de traitement et nous supposons que cet élément nécessite l'exécution d'au moins une étape de pré-traitement. Le but de ce diagramme est de montrer l’idée derrière le pipeline de pré-traitement des valeurs d’élément.
L'élément peut être placé à la fin ou au début de la file d'attente de pré-traitement. Les éléments internes de Zabbix sont toujours placés au début de la file d'attente de pré-traitement, tandis que les autres types d'éléments sont mis en file d'attente à la fin.
Le traitement de la valeur d'élément est exécuté en plusieurs étapes (ou phases) par plusieurs processus. Cela peut causer :
* L'élément principal a le type de valeur ''UINT'' (l'élément trapper peut être utilisé), l'élément dépendant a le type de valeur ''TEXT''.
* Aucune étape de pré-traitement n'est requise pour les éléments principaux et dépendants.
* La valeur textuelle (comme "abc") doit être transmise à l'élément principal.
* Comme il n’y a pas d’étapes de pré-traitement à exécuter, le gestionnaire de pré-traitement vérifie si l’élément principal n’est pas à l’état NON SUPPORTÉ et si la valeur est définie (les deux sont vrais) et place en file d'attente l’élément dépendant ayant la même valeur que l’élément principal (en l’absence d’étapes de pré-traitement).
* Lorsque les éléments principaux et dépendants atteignent tous les deux la phase de synchronisation d'historique, l'élément principal devient NON SUPPORTÉ, en raison de l'erreur de conversion de valeur (les données textuelles ne peuvent pas être converties en un entier non signé).
Par conséquent, l'élément dépendant reçoit une valeur, tandis que l'élément principal change son état en NON SUPPORTÉ.
CHAR
est utilisé pour un élément principal, la valeur de cet élément sera tronquée à la phase de synchronisation d'historique, tandis que les éléments dépendants recevront leur valeur de la valeur initiale (non tronquée) de l'élément principal.La file d'attente de pré-traitement est une structure de données FIFO qui stocke les valeurs en préservant l'ordre dans lequel les valeurs sont visualisées par le gestionnaire de pré-traitement. Il y a plusieurs exceptions à la logique FIFO :
Pour visualiser la logique de la file d'attente de pré-traitement, nous pouvons utiliser le diagramme suivant :
Les valeurs de la file d'attente de pré-traitement sont vidées du début à la première valeur non traitée. Ainsi, par exemple, le gestionnaire de pré-traitement supprime les valeurs 1, 2 et 3, mais pas la valeur 5 car la valeur 4 n'est pas encore traitée :
Seules deux valeurs sont laissées dans la file d'attente (4 et 5) après le vidage, les valeurs sont ajoutées dans le cache de données local du gestionnaire de pré-traitement, puis les valeurs sont transférées du cache local vers le cache d'historique. Le gestionnaire de pré-traitement peut vider les valeurs du cache de données local en mode élément unique ou en bloc (utilisé pour les éléments dépendants et les valeurs reçues en bloc).
Le fichier de configuration du serveur Zabbix permet aux utilisateurs de définir le nombre de processus worker de pré-traitement. Le paramètre de configuration StartPreprocessors doit être utilisé pour définir le nombre d'instances prédéfinies de workers de pré-traitement. De nombreux facteurs peuvent déterminer le nombre optimal de workers de pré-traitement, notamment le nombre d'éléments "préprocessables" (éléments nécessitant l'exécution d'une étape de pré-traitement), le nombre de processus de collecte de données, le nombre moyen d'étapes pour le pré-traitement d'éléments, etc.
Mais en supposant qu'il n'y ait pas d'opérations de pré-traitement lourdes comme l'analyse de gros morceaux XML/JSON, le nombre de workers de pré-traitement peut correspondre au nombre total de collecteurs de données. De cette manière, il y aura principalement (sauf dans les cas où les données du collecteur seront fournies en masse) au moins un worker de pré-traitement inoccupé pour les données collectées.
Trop de processus de collecte de données (pollers, pollers d'inaccessibilité, pollers HTTP, pollers Java, pingers, pingers, pollers proxy) associés au gestionnaire IPMI, au trapper SNMP et aux workers de pré-traitement peuvent dépasser la limite du descripteur de fichier par processus du gestionnaire de pré-traitement. Cela provoquera l'arrêt du serveur Zabbix (généralement peu de temps après le démarrage, mais cela peut parfois prendre plus de temps). Le fichier de configuration doit être révisé ou la limite doit être augmentée pour éviter cette situation.