Dit gedeelte biedt details over het voorverwerken van itemwaarden. Voorverwerking van itemwaarden maakt het mogelijk om transformatieregels te definiëren en uit te voeren voor de ontvangen itemwaarden.
Voorverwerking wordt beheerd door een voorverwerkingsbeheerproces dat werd toegevoegd in Zabbix 3.4, samen met voorverwerkingswerkers die de voorverwerkingsstappen uitvoeren. Alle waarden (met of zonder voorverwerking) van verschillende dataverzamelaars gaan door het voorverwerkingsbeheer voordat ze aan de geschiedeniscache worden toegevoegd. Socket-gebaseerde IPC-communicatie wordt gebruikt tussen dataverzamelaars (pollers, trappers, etc) en het voorverwerkingsproces. Zowel de Zabbix-server als de Zabbix-proxy (voor items die door de proxy worden bewaakt) voeren voorverwerkingsstappen uit.
Om de gegevensstroom van gegevensbron naar de Zabbix-database te visualiseren, kunnen we de volgende vereenvoudigde diagram gebruiken:
Het bovenstaande diagram toont alleen processen, objecten en acties die verband houden met de verwerking van itemwaarden in een vereenvoudigde vorm. Het diagram toont geen voorwaardelijke richtingswijzigingen, foutafhandeling of lussen. De lokale gegevenscache van het voorverwerkingsbeheer wordt ook niet getoond omdat deze de gegevensstroom niet direct beïnvloedt. Het doel van dit diagram is om de processen te laten zien die betrokken zijn bij de verwerking van itemwaarden en de manier waarop ze met elkaar interageren.
Een item kan zijn status wijzigen naar NIET ONDERSTEUND terwijl de voorverwerking wordt uitgevoerd als een van de voorverwerkingsstappen mislukt.
Een item kan zijn status wijzigen naar NIET ONDERSTEUND als de gegevensnormalisatie mislukt (bijvoorbeeld wanneer een tekstuele waarde niet kan worden omgezet naar een getal).
Om het proces van gegevensvoorverwerking te visualiseren, kunnen we het volgende vereenvoudigde diagram gebruiken:
Het bovenstaande diagram toont alleen processen, objecten en belangrijkste acties die verband houden met de voorverwerking van itemwaarden in een vereenvoudigde vorm. Het diagram toont geen voorwaardelijke richtingswijzigingen, foutafhandeling of lussen. Op dit diagram wordt slechts één voorverwerkingswerker weergegeven (in werkelijke scenario's kunnen meerdere voorverwerkingswerkers worden gebruikt), er wordt slechts één itemwaarde verwerkt en we gaan ervan uit dat dit item ten minste één voorverwerkingsstap moet uitvoeren. Het doel van dit diagram is om het idee achter de voorverwerkingspijplijn van itemwaarden te laten zien.
Een item kan aan het einde of aan het begin van de voorverwerkingswachtrij worden geplaatst. Interne Zabbix-items worden altijd aan het begin van de voorverwerkingswachtrij geplaatst, terwijl andere itemtypen aan het einde worden geplaatst.
De verwerking van itemwaarden wordt uitgevoerd in meerdere stappen (of fasen) door meerdere processen. Dit kan leiden tot:
UINT
(een trapper-item kan worden gebruikt), het afhankelijke item heeft het waarde type TEXT
.Als gevolg hiervan ontvangt het afhankelijke item een waarde, terwijl de status van het hoofditem wordt gewijzigd naar NIET ONDERSTEUND.
CHAR
wordt gebruikt voor het hoofditem, wordt de waarde van het hoofditem afgekapt in de fase van geschiedenissynchronisatie, terwijl afhankelijke items hun waarde ontvangen van de oorspronkelijke (niet afgekapte) waarde van het hoofditem.De voorverwerkingswachtrij is een FIFO-gegevensstructuur die waarden opslaat en de volgorde behoudt waarin waarden worden ontvangen door het voorverwerkingsbeheer. Er zijn meerdere uitzonderingen op de FIFO-logica:
Om de logica van de voorverwerkingswachtrij te visualiseren, kunnen we de volgende diagram gebruiken:
Waarden uit de voorverwerkingswachtrij worden vanaf het begin van de wachtrij naar de eerste onverwerkte waarde weggeschreven. Dus bijvoorbeeld, het voorverwerkingsbeheer zal waarden 1, 2 en 3 wegschrijven, maar waarde 5 niet wegschrijven omdat waarde 4 nog niet is verwerkt:
Na het wegschrijven blijven er slechts twee waarden over in de wachtrij (4 en 5), de waarden worden toegevoegd aan de lokale cache van het voorverwerkingsbeheer en vervolgens worden de waarden overgebracht van de lokale cache naar de geschiedeniscache. Het voorverwerkingsbeheer kan waarden wegschrijven uit de lokale cache in enkele item-modus of in bulkmodus (gebruikt voor afhankelijke items en waarden die in bulk zijn ontvangen).
Het Zabbix-serverconfiguratiebestand stelt gebruikers in staat om het aantal voorverwerkingswerkerprocessen in te stellen. De configuratieparameter StartPreprocessors
moet worden gebruikt om het aantal voorgevorkte instanties van voorverwerkingswerkers in te stellen. Het optimale aantal voorverwerkingswerkers kan worden bepaald door vele factoren, waaronder het aantal "voorverwerkingsbare" items (items die preprocessing-stappen moeten uitvoeren), het aantal processen voor het verzamelen van gegevens, het gemiddelde aantal stappen voor het voorverwerken van items, enzovoort.
Maar als we ervan uitgaan dat er geen zware preprocessing-operaties zoals het parseren van grote XML- of JSON-chunks zijn, kan het aantal voorverwerkingswerkers overeenkomen met het totale aantal gegevensverzamelaars. Op deze manier zal er meestal (behalve in gevallen waarin gegevens van de gegevensverzamelaar in bulk binnenkomen) minstens één onbezette voorverwerkingswerker zijn voor verzamelde gegevens.
Te veel gegevensverzamelingsprocessen (pollers, onbereikbare pollers, ODBC-pollers, HTTP-pollers, Java-pollers, pingers, trappers, proxypollers) samen met IPMI-manager, SNMP-trapper en voorverwerkingswerkers kunnen het bestandslimiet per proces voor de voorverwerkingsbeheerder uitputten. Dit zal ertoe leiden dat de Zabbix-server stopt (meestal kort na het starten, maar soms kan het langer duren). Het configuratiebestand moet worden herzien of het limiet moet worden verhoogd om deze situatie te vermijden.