Cette section fournit des détails sur le prétraitement de la valeur de l'élément. Le prétraitement des valeurs d'éléments permet de définir et d'exécuter des règles de transformation pour les valeurs d'éléments reçues.
Le prétraitement est géré par un processus de gestionnaire de prétraitement, qui a été ajouté dans Zabbix 3.4, ainsi que par des agents de prétraitement qui exécutent les étapes de prétraitement. Toutes les valeurs (avec ou sans prétraitement) des différents collecteurs de données passent par le gestionnaire de prétraitement avant d'être ajoutées au cache de l'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. Le serveur Zabbix ou le proxy Zabbix (pour les éléments surveillés par le proxy) effectue des étapes de prétraitement.
Pour visualiser le flux de données de la source de données vers la base de données Zabbix, nous pouvons utiliser le schéma simplifié suivant :
Le diagramme ci-dessus montre uniquement les processus, les objets et les actions liés au traitement de la valeur de l'é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 n'est pas affiché non plus car il n'affecte pas directement le flux de données. L'objectif de ce diagramme est de montrer les processus impliqués dans le traitement de la valeur des éléments et la façon dont ils interagissent.
L'élément peut changer son état en NON SUPPORTÉ pendant le prétraitement si l'une des étapes de 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 de la valeur de l'élément sous une forme simplifiée. Le diagramme ne montre pas les changements de direction conditionnels, la gestion des erreurs ou les boucles. Un seul agent de prétraitement est affiché sur ce diagramme (plusieurs agents de pré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 de la valeur de l'é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 de l'élément est exécuté en plusieurs étapes (ou phases) par plusieurs processus. Cela peut entraîner :
UINT
(l'élément trappeur peut être utilisé), l'élément dépendant a le type de valeur TEXT
.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 l'élément principal, la valeur de l'élément principal sera tronquée lors de la phase de synchronisation de l'historique, tandis que les éléments dépendants recevront leur valeur à partir 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 récupérées par le gestionnaire de prétraitement. Il existe plusieurs exceptions à la logique FIFO :
Pour visualiser la logique de la file d'attente de prétraitement, nous pouvons utiliser le schéma suivant :
Les valeurs de la file d'attente de prétraitement sont vidées du début de la file d'attente à la première valeur non traitée. Ainsi, par exemple, le gestionnaire de prétraitement videra les valeurs 1, 2 et 3, mais ne videra pas la valeur 5 car la valeur 4 n'est pas encore traitée :
Seules deux valeurs seront laissées dans la file d'attente (4 et 5) après le vidage, les valeurs sont ajoutées au cache de données local du gestionnaire de prétraitement, puis les valeurs sont transférées du cache local au 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 mode 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 de travail de prétraitement. Le paramètre de configuration StartPreprocessors doit être utilisé pour définir le nombre d'instances pré-forkées de processus de travail de prétraitement. Le nombre optimal de processus de travail de prétraitement peut être déterminé par de nombreux facteurs, y compris le nombre d'éléments "prétraitables" (éléments qui nécessitent d'exécuter des étapes de prétraitement), le nombre de processus de collecte de données, le nombre moyen d'étapes pour le prétraitement des éléments, etc.
Mais en supposant qu'il n'y a pas d'opérations de prétraitement lourdes comme l'analyse de gros morceaux XML / JSON, le nombre de processus de travail de prétraitement peut correspondre au nombre total de collecteurs de données. De cette façon, il y aura la plupart du temps (sauf dans les cas où les données du collecteur arrivent en masse) au moins un agent de prétraitement inoccupé pour les données collectées.
Trop de processus de collecte de données (pollers, pollers d'inaccessibilité, pollers ODBC, pollers HTTP, pollers Java, pingers, trappeurs, proxypollers) associés au gestionnaire IPMI, au trappeur SNMP et aux agents de prétraitement peuvent épuiser la limite de descripteur de fichier par processus pour le gestionnaire de prétraitement. Cela entraînera l'arrêt du serveur Zabbix (généralement peu de temps après le démarrage, mais parfois cela peut prendre plus de temps). Le fichier de configuration doit être révisé ou la limite doit être augmentée pour éviter cette situation.