Zabbix kan worden gebruikt voor gecentraliseerde monitoring en analyse van logbestanden met/zonder ondersteuning voor logrotatie.
Meldingen kunnen worden gebruikt om gebruikers te waarschuwen wanneer een logbestand bepaalde tekenreeksen of tekenreeksenpatronen bevat.
Om een logbestand te bewaken, moet je het volgende hebben:
De groottelimiet van een bewaakt logbestand is afhankelijk van ondersteuning voor grote bestanden.
Zorg ervoor dat in het configuratiebestand van de agent:
Configureer een logmonitoring item.
Alle verplichte invoervelden zijn gemarkeerd met een rode asterisk.
Specifiek voor logmonitoring-items voer je het volgende in:
Type | Selecteer hier Zabbix-agent (actief). |
Sleutel | Gebruik een van de volgende itemsleutels: log[] of logrt[]: Deze twee itemsleutels maken het mogelijk om logs te monitoren en logvermeldingen te filteren op basis van de inhoudsregexp, indien aanwezig. Bijvoorbeeld: log[/var/log/syslog,error] . Zorg ervoor dat het bestand leesrechten heeft voor de gebruiker 'zabbix', anders wordt de status van het item ingesteld op 'niet ondersteund'.log.count[] of logrt.count[]: Deze twee itemsleutels maken het mogelijk om alleen het aantal overeenkomende regels terug te geven. Zie het gedeelte Ondersteunde itemsleutels voor Zabbix-agent voor details over het gebruik van deze itemsleutels en hun parameters. |
Type informatie | Automatisch ingevuld: Voor log[] of logrt[] items - Log ;Voor log.count[] of logrt.count[] items - Numeriek (niet-ondertekend) .Als je optioneel de parameter output gebruikt, kun je handmatig het juiste type informatie selecteren anders dan Log .Houd er rekening mee dat het kiezen van een niet-Log type informatie zal leiden tot het verlies van de lokale tijdstempel. |
Bijwerkinterval (in seconden) | Deze parameter bepaalt hoe vaak de Zabbix-agent wijzigingen in het logbestand zal controleren. Door dit in te stellen op 1 seconde zorg je ervoor dat je nieuwe vermeldingen zo snel mogelijk krijgt. |
Logtijdsindeling | In dit veld kun je optioneel het patroon opgeven voor het parseren van de tijdstempel van de logregel. Als je dit leeg laat, wordt de tijdstempel niet geparseerd. Ondersteunde plaatshouders: * y: Jaar (0001-9999) * M: Maand (01-12) * d: Dag (01-31) * h: Uur (00-23) * m: Minuut (00-59) * s: Seconde (00-59) Neem bijvoorbeeld de volgende regel uit het Zabbix-agent logbestand: " 23480:20100328:154718.045 Zabbix-agent gestart. Zabbix 1.8.2 (herziening 11211)." Het begint met zes posities voor PID, gevolgd door datum, tijd, en de rest van de regel. De logtijdsindeling voor deze regel zou "pppppp:yyyyMMdd:hhmmss" zijn. Merk op dat de tekens "p" en ":" slechts plaatshouders zijn en alles kunnen zijn behalve "yMdhms". |
logrt[]
item en de Zabbix-agent volgt het meest recente daarvan en dit meest recente logbestand wordt verwijderd, wordt een waarschuwings- bericht "er zijn geen bestanden die overeenkomen met "<regexp mask>" in "<directory>"
gelogd. De Zabbix-agent negeert logbestanden met een wijzigingstijd die minder is dan de meest recente wijzigings- tijd die door de agent is gezien voor het te controleren logrt[]
item.log[]
of logrt[]
item een Update-interval van 1 seconde heeft, de agent standaard niet meer dan 200 logbestandrecords analyseren en niet meer dan 20 overeenkomende records naar de Zabbix-server sturen in één controle. Door MaxLinesPerSecond te verhogen in het agentconfiguratiebestand of de parameter maxlines in de item key in te stellen, kan de limiet worden verhoogd tot maximaal 10000 geanalyseerde logbestandrecords en 1000 overeenkomende records die naar de Zabbix-server worden gestuurd in één controle. Als het Update-interval is ingesteld op 2 seconden, worden de limieten voor één controle 2 keer hoger ingesteld dan bij een Update-interval van 1 seconde.logrt
worden alleen ondersteund in de bestandsnaam, reguliere expressie-matching voor mappen wordt niet ondersteund.logrt[]
item NOTSUPPORTED als een map waarin de logbestanden worden verwacht niet bestaat.logrt[]
item maakt het niet NOTSUPPORTED. Fouten bij het lezen van logbestanden voor een logrt[]
item worden als waarschuwingen gelogd in het logbestand van de Zabbix-agent, maar maken het item niet NOTSUPPORTED.log[]
of logrt[]
item NOTSUPPORTED is geworden. Zabbix kan het logbestand van zijn agent monitoren, behalve wanneer DebugLevel=4 of DebugLevel=5 is ingesteld.Soms willen we mogelijk alleen de interessante waarde uit een doelbestand halen in plaats van de hele regel terug te geven wanneer een overeenkomst met een reguliere expressie wordt gevonden.
Sinds Zabbix 2.2.0 hebben log-items de mogelijkheid om gewenste waarden uit overeenkomende regels te halen. Dit wordt bereikt door de extra parameter output in log
en logrt
items.
Het gebruik van de 'output' parameter maakt het mogelijk om de "capturing group" van de overeenkomst aan te geven waarin we mogelijk geïnteresseerd zijn.
Dus, bijvoorbeeld
zou moeten toestaan om het invoeraantal terug te geven zoals gevonden in de inhoud van:
Vr Feb 07 2014 11:07:36.6690 */ Thread Id 1400 (GLEWF) grote resultaatbuffer
toewijzing - /Lengte: 437136/Invoer: 5948/Client Ver: >=10/RPC
ID: 41726453/Gebruiker: EenGebruiker/Formulier: CFG:ServiceLevelAgreement
Alleen het getal wordt teruggegeven omdat \1 verwijst naar de eerste en enige capturing group: ([0-9]+).
En, met de mogelijkheid om een getal te extraheren en terug te geven, kan de waarde worden gebruikt om triggers te definiëren.
De 'maxdelay'-parameter in logitems maakt het mogelijk om sommige oudere regels uit logbestanden te negeren om zo de meest recent geanalyseerde regels te verkrijgen binnen de 'maxdelay'-seconden.
Het specificeren van 'maxdelay' > 0 kan leiden tot het negeren van belangrijke logbestandrecords en gemiste waarschuwingen. Gebruik dit voorzichtig op eigen risico, alleen wanneer nodig.
Standaard volgen items voor logbewaking alle nieuwe regels die verschijnen in de logbestanden. Er zijn echter toepassingen die in sommige situaties een enorm aantal berichten beginnen te schrijven in hun logbestanden. Bijvoorbeeld, als een database of een DNS-server niet beschikbaar is, overstromen dergelijke toepassingen de logbestanden met duizenden bijna identieke foutmeldingen totdat normaal bedrijf is hersteld. Standaard worden al die berichten keurig geanalyseerd en overeenkomende regels naar de server gestuurd zoals geconfigureerd in log
- en logrt
-items.
Ingebouwde bescherming tegen overbelasting bestaat uit een configureerbare 'maxlines'-parameter (beschermt de server tegen te veel binnenkomende overeenkomende logregels) en een limiet van 10*'maxlines' (beschermt de host-CPU en I/O tegen overbelasting door de agent in één controle). Toch zijn er 2 problemen met de ingebouwde bescherming. Ten eerste worden een groot aantal potentieel niet zo informatieve berichten gerapporteerd aan de server en nemen ze ruimte in de database in beslag. Ten tweede kan de agent als gevolg van het beperkte aantal per seconde geanalyseerde regels uren achterblijven bij de nieuwste logboekrecords. Waarschijnlijk geeft u er de voorkeur aan om eerder op de hoogte te worden gesteld van de huidige situatie in de logbestanden in plaats van urenlang oude gegevens door te spitten.
De oplossing voor beide problemen is het gebruik van de 'maxdelay'-parameter. Als 'maxdelay' > 0 wordt opgegeven, wordt tijdens elke controle het aantal verwerkte bytes, het aantal resterende bytes en de verwerkingstijd gemeten. Op basis van deze cijfers berekent de agent een geschatte vertraging - hoeveel seconden het zou duren om alle resterende records in een logbestand te analyseren.
Als de vertraging de 'maxdelay' niet overschrijdt, gaat de agent door met het analyseren van het logbestand zoals gewoonlijk.
Als de vertraging groter is dan de 'maxdelay', negeert de agent een deel van een logbestand door er "overheen te springen" naar een nieuwe geschatte positie, zodat de resterende regels binnen 'maxdelay'-seconden kunnen worden geanalyseerd.
Merk op dat de agent zelfs geen genegeerde regels in de buffer leest, maar een geschatte positie berekent om naar toe te springen in een bestand.
Het feit dat logbestandregels worden overgeslagen, wordt gelogd in het agent-logbestand als volgt:
14287:20160602:174344.206 item:"logrt["/home/zabbix32/test[0-9].log",ERROR,,1000,,,120.0]"
logfile:"/home/zabbix32/test1.log" overslaan van 679.858 bytes
(van byte 75.653.115 tot byte 76.332.973) om aan maxdelay te voldoen
Het nummer "tot byte" is bij benadering omdat de agent na de "sprong" de positie in het bestand aanpast naar het begin van een logregel die zich verder in het bestand of eerder kan bevinden.
Afhankelijk van hoe de snelheid van groei zich verhoudt tot de snelheid van het analyseren van het logbestand, ziet u mogelijk geen "sprongen", zeldzame of vaak "sprongen", grote of kleine "sprongen", of zelfs een kleine "sprong" bij elke controle. Schommelingen in de systeembelasting en netwerklatentie beïnvloeden ook de berekening van de vertraging en dus het "springen" vooruit om gelijke tred te houden met de "maxdelay"-parameter.
Het instellen van 'maxdelay' < 'update-interval' wordt niet aanbevolen (het kan leiden tot frequente kleine "sprongen").
logrt
met de optie copytruncate
gaat ervan uit dat verschillende logbestanden verschillende gegevens bevatten (ten minste hun tijdstempels zijn verschillend), daarom zullen MD5-hashes van initiële blokken (tot de eerste 512 bytes) verschillend zijn. Twee bestanden met dezelfde MD5-hash van initiële blokken betekent dat één ervan het origineel is en de andere een kopie.
logrt
met de optie copytruncate
doet moeite om logbestandkopieën correct te verwerken zonder duplicaten te melden. Echter, zaken zoals het produceren van meerdere logbestandkopieën met dezelfde tijdstempel, logboekrotatie vaker dan de update-interval van het logrt[]-item, frequent opnieuw starten van de agent worden niet aanbevolen. De agent probeert al deze situaties redelijk goed af te handelen, maar goede resultaten kunnen niet in alle omstandigheden worden gegarandeerd.
Het persistente bestand van het item wordt bijgewerkt na het succesvol verzenden van elke batch gegevens (met daarin de gegevens van het item) naar de server. Bijvoorbeeld, de standaard 'BufferSize' is 100. Als een log-item 70 overeenkomende records heeft gevonden, worden de eerste 50 records in één batch verzonden, het persistente bestand wordt bijgewerkt, vervolgens worden de resterende 20 records verzonden (misschien met enige vertraging wanneer er meer gegevens worden verzameld) in de 2e batch, en het persistente bestand wordt opnieuw bijgewerkt.
Elke overeenkomende regel van log[]
en logrt[]
items en het resultaat van elke log.count[]
en logrt.count[]
itemcontrole vereist een vrije sleuf in het aangewezen 50% gebied in de agent-verzendbuffer. De elementen van de buffer worden regelmatig naar de server (of proxy) verzonden en de bufferposities zijn dan weer vrij.
Zolang er vrije sleuven zijn in het aangewezen loggebied in de agent-verzendbuffer en de communicatie tussen de agent en de server (of proxy) faalt, worden de resultaten van de logbewaking geaccumuleerd in de verzendbuffer. Dit helpt om korte communicatiestoringen te beheersen.
Tijdens langere communicatiestoringen raken alle logposities bezet en worden de volgende maatregelen genomen:
log[]
en logrt[]
items worden gestopt. Wanneer de communicatie wordt hersteld en er vrije sleuven in de buffer beschikbaar zijn, worden de controles hervat vanaf de vorige positie. Er gaan geen overeenkomende regels verloren, ze worden gewoon later gerapporteerd.log.count[]
en logrt.count[]
worden gestopt als maxdelay = 0
(standaard). Het gedrag is vergelijkbaar met dat van log[]
en logrt[]
items zoals hierboven beschreven. Merk op dat dit van invloed kan zijn op de resultaten van log.count[]
en logrt.count[]
: bijvoorbeeld, één controle telt 100 overeenkomende regels in een logbestand, maar omdat er geen vrije sleuven in de buffer zijn, wordt de controle gestopt. Wanneer de communicatie wordt hersteld, telt de agent dezelfde 100 overeenkomende regels en ook 70 nieuwe overeenkomende regels. De agent stuurt nu count = 170 alsof ze werden gevonden in één controle.log.count[]
en logrt.count[]
met maxdelay > 0
: als er tijdens de controle geen "sprong" heeft plaatsgevonden, is het gedrag vergelijkbaar met hierboven beschreven. Als er echter een "sprong" over regels in het logbestand heeft plaatsgevonden, wordt de positie na de "sprong" behouden en wordt het getelde resultaat verworpen. Dus, de agent probeert gelijke tred te houden met een groeiend logbestand, zelfs bij communicatiestoringen.If a regular expression used in log[]
, logrt[]
, log.count[]
or logrt.count[]
item cannot be compiled by PCRE or PCRE2 library then the item goes into NOTSUPPORTED state with an error message. To continue monitoring the log item, the regular expression should be fixed.
If the regular expression compiles successfully, but fails at runtime (on some or on all log records), then the log item remains supported and monitoring continues. The runtime error is logged in the Zabbix agent log file (without the log file record).
The logging rate is limited to one runtime error per check to allow Zabbix agent to monitor its own log file. For example, if 10 records are analyzed and 3 records fail with a regexp runtime error, one record is produced in the agent log.
Exception: if MaxLinesPerSecond=1 and update interval=1 (only 1 record is allowed to analyze per check) then regexp runtime errors are not logged.
zabbix_agentd logs the item key in case of a runtime error, zabbix_agent2 logs the item ID to help identify which log item has runtime errors. It is recommended to redesign the regular expression in case of runtime errors.
Wanneer de Zabbix-agent wordt gestart, ontvangt deze een lijst met actieve controles van de Zabbix-server of -proxy. Voor metrieken van log*[] ontvangt het de verwerkte logboekgrootte en de wijzigingstijd om te bepalen waar het logbestandsbewaking moet starten. Afhankelijk van de daadwerkelijke logboekgrootte en wijzigingstijd zoals gerapporteerd door het bestandssysteem, beslist de agent of het de bewaking van het logbestand moet voortzetten vanaf de verwerkte logboekgrootte of het logbestand opnieuw moet analyseren vanaf het begin.
Een actieve agent onderhoudt een grotere set attributen om alle bewaakte logbestanden bij te houden tussen controles. Deze in-memory status gaat verloren wanneer de agent wordt gestopt.
De nieuwe optionele parameter persistent_dir geeft een map aan voor het opslaan van deze status van het log[], log.count[], logrt[] of logrt.count[] item in een bestand. De status van het logitem wordt hersteld vanuit het persistente bestand nadat de Zabbix-agent opnieuw is gestart.
Het primaire gebruiksscenario is het bewaken van een logbestand dat zich bevindt op een gespiegeld bestandssysteem. Tot op zekere hoogte in de tijd wordt het logbestand geschreven naar beide spiegels. Vervolgens worden de spiegels gesplitst. Op de actieve kopie groeit het logbestand nog steeds en worden er nieuwe records toegevoegd. De Zabbix-agent analyseert het en stuurt de verwerkte logboekgrootte en wijzigingstijd naar de server. Op de passieve kopie blijft het logbestand hetzelfde, ver achter op de actieve kopie. Later worden het besturingssysteem en de Zabbix-agent opnieuw opgestart vanaf de passieve kopie. De verwerkte logboekgrootte en wijzigingstijd die de Zabbix-agent van de server ontvangt, zijn mogelijk niet geldig voor de situatie op de passieve kopie. Om de bewaking van het logbestand voort te zetten vanaf het punt waarop de agent stopte op het moment van het splitsen van het bestandssysteem, herstelt de agent zijn status vanuit het persistente bestand.
Bij het opstarten weet de Zabbix-agent niets over persistente bestanden. Pas nadat hij een lijst met actieve controles van de Zabbix-server (proxy) heeft ontvangen, ziet de agent dat sommige logitems moeten worden ondersteund door persistente bestanden in gespecificeerde mappen.
Tijdens de werking van de agent worden de persistente bestanden geopend voor schrijven (met fopen(filename, "w")) en overschreven met de nieuwste gegevens. De kans dat persistente bestandsgegevens verloren gaan als het overschrijven en het splitsen van het bestandssysteem op hetzelfde moment plaatsvinden, is zeer klein, er is geen speciale behandeling voor nodig. Schrijven naar een persistent bestand wordt NIET gevolgd door afgedwongen synchronisatie naar opslagmedia (fsync() wordt niet aangeroepen).
Het overschrijven met de nieuwste gegevens gebeurt na succesvolle rapportage van overeenkomende logboekrecord of metagegevens (verwerkte logboekgrootte en wijzigingstijd) aan de Zabbix-server. Dat kan zo vaak gebeuren als elke itemcontrole als het logbestand blijft veranderen.
Er zijn geen speciale acties tijdens het afsluiten van de agent.
Nadat de agent een lijst met actieve controles heeft ontvangen, markeert de agent verouderde persistente bestanden voor verwijdering. Een persistent bestand wordt als verouderd beschouwd als: 1) het overeenkomstige logitem niet langer wordt bewaakt, 2) een logitem opnieuw is geconfigureerd met een andere persistent_dir-locatie dan voorheen.
Het verwijderen gebeurt met een vertraging van 24 uur omdat logbestanden in de NOTSUPPORTED-status niet zijn opgenomen in de lijst met actieve controles, maar later als SUPPORTED kunnen worden beschouwd en hun persistente bestanden nuttig kunnen zijn.
Als de agent wordt gestopt voordat 24 uur zijn verstreken, zullen de verouderde bestanden niet worden verwijderd, omdat de Zabbix-agent niet langer informatie krijgt over hun locatie van de Zabbix-server.
Het opnieuw configureren van de persistent_dir van een logitem naar de oude persistent_dir-locatie terwijl de agent is gestopt, zonder het oude persistente bestand door de gebruiker te verwijderen, zal leiden tot het herstellen van de agentstatus vanuit het oude persistente bestand, wat kan resulteren in gemiste berichten of valse waarschuwingen.
De Zabbix-agent onderscheidt actieve controles op basis van hun sleutels. Bijvoorbeeld, logrt[/home/zabbix/test.log] en logrt[/home/zabbix/test.log,] zijn verschillende items. Het wijzigen van het item logrt[/home/zabbix/test.log,,,10] in de frontend naar logrt[/home/zabbix/test.log,,,20] zal resulteren in het verwijderen van het item logrt[/home/zabbix/test.log,,,10] uit de lijst met actieve controles van de agent en het creëren van het logrt[/home/zabbix/test.log,,,20] item (sommige attributen worden overgedragen bij wijziging in de frontend/server, niet in de agent).
De bestandsnaam bestaat uit de MD5-hash van de itemsleutel met de lengte van de itemsleutel toegevoegd om de kans op botsingen te verminderen. Bijvoorbeeld, de status van het item logrt[/home/zabbix50/test.log,,,,,,,,/home/zabbix50/agent_private] wordt opgeslagen in het persistente bestand c963ade4008054813bbc0a650bb8e09266.
Meerdere logitems kunnen dezelfde waarde van persistent_dir gebruiken.
De persistent_dir wordt gespecificeerd rekening houdend met specifieke bestandssysteemindelingen, koppelpunten, koppelopties en opslag-spiegelconfiguraties - het persistente bestand moet zich op hetzelfde gespiegelde bestandssysteem bevinden als het bewaakte logbestand.
Als de persistent_dir-directory niet kan worden gemaakt of niet bestaat, of als de toegangsrechten voor de Zabbix-agent het niet toestaan om bestanden te maken/schrijven/lezen/verwijderen, wordt het logitem NOTSUPPORTED.
Als de toegangsrechten tot persistente opslagbestanden tijdens de werking van de agent worden verwijderd of als er andere fouten optreden (bijvoorbeeld een volle schijf), worden fouten gelogd in het agent-logbestand, maar het log-item wordt niet ONDERSTEUND.