This is a translation of the original English documentation page. Help us make it better.

2 Voorverwerkingsdetails

Overzicht

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.

Verwerking van itemwaarden

Om de gegevensstroom van gegevensbron naar de Zabbix-database te visualiseren, kunnen we de volgende vereenvoudigde diagram gebruiken:

Diagram

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.

  • Het verzamelen van gegevens begint met ruwe gegevens van een gegevensbron. Op dit moment bevat de data alleen ID, tijdstempel en waarde (kan ook meerdere waarden zijn).
  • Ongeacht het type gegevensverzamelaar dat wordt gebruikt, is het idee hetzelfde voor actieve of passieve controles, voor trapper-items enzovoort, omdat het alleen het gegevensformaat en de communicatie-initiator verandert (ofwel wacht de gegevensverzamelaar op een verbinding en gegevens, of de gegevensverzamelaar initieert de communicatie en vraagt ​​de gegevens op). Ruwe gegevens worden gevalideerd, itemconfiguratie wordt opgehaald uit de configuratiecache (gegevens worden verrijkt met de configuratiegegevens).
  • Er wordt een op socket gebaseerd IPC-mechanisme gebruikt om gegevens van gegevensverzamelaars naar het voorverwerkingsbeheer te sturen. Op dit punt gaat de gegevensverzamelaar door met het verzamelen van gegevens zonder te wachten op een reactie van het voorverwerkingsbeheer.
  • Gegevensvoorverwerking wordt uitgevoerd. Dit omvat het uitvoeren van voorverwerkingsstappen en afhankelijke itemverwerking.

Een item kan zijn status wijzigen naar NIET ONDERSTEUND terwijl de voorverwerking wordt uitgevoerd als een van de voorverwerkingsstappen mislukt.

  • Geschiedenisgegevens uit de lokale gegevenscache van het voorverwerkingsbeheer worden naar de geschiedeniscache geschreven.
  • Op dit punt stopt de gegevensstroom totdat de volgende synchronisatie van de geschiedeniscache plaatsvindt (wanneer het synchronisatieproces van de geschiedenis gegevenssynchronisatie uitvoert).
  • Het synchronisatieproces begint met gegevensnormalisatie, waarbij de gegevens in de Zabbix-database worden opgeslagen. Gegevensnormalisatie voert conversies uit naar het gewenste itemtype (type gedefinieerd in de itemconfiguratie), inclusief het inkorten van tekstuele gegevens op basis van vooraf gedefinieerde groottes die voor die typen zijn toegestaan (HISTORY_STR_VALUE_LEN voor string, HISTORY_TEXT_VALUE_LEN voor tekst en HISTORY_LOG_VALUE_LEN voor logwaarden). De gegevens worden naar de Zabbix-database verzonden nadat de normalisatie is voltooid.

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).

  • Verzamelde gegevens worden verwerkt - triggers worden gecontroleerd, itemconfiguratie wordt bijgewerkt als een item NIET ONDERSTEUND wordt, enzovoort.
  • Dit wordt beschouwd als het einde van de gegevensstroom vanuit het oogpunt van de verwerking van itemwaarden.

Voorverwerking van itemwaarden

Om het proces van gegevensvoorverwerking te visualiseren, kunnen we het volgende vereenvoudigde diagram gebruiken:

Diagram

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.

  • Itemgegevens en itemwaarde worden via een op socket gebaseerd IPC-mechanisme naar het voorverwerkingsbeheer gestuurd.
  • Het item wordt in de voorverwerkingswachtrij geplaatst.

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.

  • Op dit punt stopt de gegevensstroom totdat er minstens één onbezette (dat wil zeggen geen enkele taak uitvoert) voorverwerkingswerker is.
  • Wanneer er een voorverwerkingswerker beschikbaar is, wordt de voorverwerkingsopdracht naar deze gestuurd.
  • Nadat de voorverwerking is voltooid (zowel mislukte als succesvolle uitvoering van voorverwerkingsstappen), wordt de voorverwerkte waarde teruggestuurd naar het voorverwerkingsbeheer.
  • Het voorverwerkingsbeheer converteert het resultaat naar het gewenste formaat (gedefinieerd door het type itemwaarde) en plaatst het resultaat in de voorverwerkingswachtrij. Als er afhankelijke items zijn voor het huidige item, worden de afhankelijke items ook aan de voorverwerkingswachtrij toegevoegd. Afhankelijke items worden in de voorverwerkingswachtrij geplaatst direct na het hoofditem, maar alleen voor hoofditems met een ingestelde waarde en niet in de status NIET ONDERSTEUND.
Waardeverwerkingspijplijn

De verwerking van itemwaarden wordt uitgevoerd in meerdere stappen (of fasen) door meerdere processen. Dit kan leiden tot:

  • Een afhankelijk item kan waarden ontvangen, terwijl DE hoofdwaarde dat niet kan. Dit kan worden bereikt met het volgende gebruiksscenario:
    • Het hoofditem heeft het waarde type UINT (een trapper-item kan worden gebruikt), het afhankelijke item heeft het waarde type TEXT.
    • Er zijn geen voorverwerkingsstappen vereist voor zowel het hoofd- als het afhankelijke item.
    • Een tekstuele waarde (bijvoorbeeld "abc") moet aan het hoofditem worden doorgegeven.
    • Omdat er geen voorverwerkingsstappen zijn om uit te voeren, controleert het voorverwerkingsbeheer of het hoofditem niet in de status NIET ONDERSTEUND staat en of de waarde is ingesteld (beide zijn waar) en plaatst het het afhankelijke item in de wachtrij met dezelfde waarde als het hoofditem (aangezien er geen voorverwerkingsstappen zijn).
    • Wanneer zowel het hoofd- als het afhankelijke item de fase van geschiedenissynchronisatie bereiken, wordt het hoofditem NIET ONDERSTEUND, vanwege de conversiefout van de waarde (tekstuele gegevens kunnen niet worden geconverteerd naar een geheel getal zonder teken).

Als gevolg hiervan ontvangt het afhankelijke item een waarde, terwijl de status van het hoofditem wordt gewijzigd naar NIET ONDERSTEUND.

  • Een afhankelijk item ontvangt een waarde die niet aanwezig is in de geschiedenis van het hoofditem. Het gebruiksscenario lijkt sterk op het vorige, behalve voor het type van het hoofditem. Bijvoorbeeld, als het type 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.

Voorverwerkingswachtrij

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:

  • Interne items worden aan het begin van de wachtrij geplaatst.
  • Afhankelijke items worden altijd achter het hoofditem geplaatst.

Om de logica van de voorverwerkingswachtrij te visualiseren, kunnen we de volgende diagram gebruiken:

Voorverwerkingswachtrij

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:

Waarden wegschrijven

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).

Voorverwerkingswerkers

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.