Zabbix Log monitoring
Inleiding
Naast het verzamelen van SNMP counters is Zabbix ook in staat om logfiles in de gaten te houden. 1
Voor mij was de documentatie niet voldoende om duidelijk in te zien hoe ik logmonitoring kon toepassen met een wat uitgebreidere regex. Vandaar deze pagina ter naslag.
log item
Allereerst heb je een host nodig met de zabbix_agent, deze agent zal de logfile in de gaten gaan houden en eventuele output doorzetten naar Zabbix.
In mijn geval was deze host de Zabbix server zelf, welke via remote syslog informatie ontving van netwerk devices.
Bij deze host dienen we een item aan te maken:
[ Configuration ] |--> [ Hosts ] |--> [ Zabbix Server: Items ] |--> Create item
Bij het aanmaken van het nieuwe Item zijn de volgende waarden van belang:
Name: [Naam van de logmonitor] Type: Zabbix agent (active) Key: log[/path/to/logfile,regex] Type of information: Log
Bij Key zijn meer opties mogelijk maar deze zijn het belangrijkst, de logfile en de regex. Je zal dit item ook moeten toewijzen aan een bestaande of nieuwe applicatie en tenslotte kan je nog wat andere zaken ingeven als time format, deze kan je voor nu prima leeg laten.
De regex kan heel eenvoudig zijn, wanneer je alle regels wil zien waarin het woord 'error' voorkomt (het meest gebruikte voorbeeld in de Zabbix documentatie) krijg je bijvoorbeeld:
log[/var/log/192.168.0.1/syslog.log,error]
Echter wil ik een wat complexere regex toepassen waarin gekeken wordt naar meerdere mogelijke matches. Je kan hiervoor in zabbix gebruik maken van algemene regular expressions 2
We komen zo terug op hoe we deze aanmaken, belangrijk is dat je deze kan aanspreken door te refereren naar deze regex door de volgende notatie: @regexnaam
Onze regel t.b.v. logmonitoring (in het item) ziet er dan uiteindelijk als volgt uit:
log[/var/log/192.168.0.1/syslog.log,@myregex]
Regular Expressions
We hebben inmiddels een item aangemaakt welke enkel regels ophaalt welke voldoen aan 'myregex'. Echter moeten we deze wel aanmaken om wat zinnige resultaten hieruit te krijgen.
Deze regex kunnen we hier aanmaken:
[ Administration ] |--> [ General ] |--> Kies nu uit de dropdown (rechts-boven): Regular expressions |--> New regular expression
Ik wil de logregels in Zabbix terugzien als deze een prio hebben van 0, 1 of 2. Indien er een prio 3 logregel is met van de service [SYSTEM] wil ik deze ook. In de logfiles zie ik terug dat in de text van de logregel dan de string <0>, <1>, <2> of [SYSTEM]<3> moet voorkomen.
In je nieuwe regual expression geef je deze de naam myregex (waarnaar we hebben verwezen in bovenstaand item) en klik je binnen het vak 'Expressions' op Add.
Er opent zich een nieuw vak waarin je de expression kan opgeven, hierin vullen we het volgende in:
Expression type: Any character string included Delimiter: , Case sensitive: Checked Expression: <0>,<1>,<2>,[SYSTEM]<3>
Klik vervolgens onderaan in dit vak op Add en nu kunnen we in het 2e tab een test uitvoeren. Door een logregel te kopieren naar het vak Test string kunnen we testen of deze wel/niet zal worden opgepakt door Zabbix.
Klik wanneer je tevreden bent met je regex op Add onderaan om deze op te slaan.
Trigger
Tenslotte willen we dat er wat gedaan wordt met onze resultaten.
[ Configuration ] |--> [ Hosts ] |--> Zabbix server: Triggers |--> Create Trigger
Geef de trigger een zinnige naam en klik op Add naast het Expression veld.
Selecteer het Item wat we aan hebben gemaakt en bij Function kies 'No data received during period of time T, then N = 1, 0 - otherwise' en vul bij T bijvoorbeeld 600 in.
Dit betekend: De trigger wordt pas actief als er data binnen komt, en 600 sec na de laatste data wordt deze weer inactief.
De expression welke dan in het veld komt wanneer we op Insert klikken ziet er ongeveer uit als volgt:
{Zabbix server:log[/var/log/192.168.0.1/syslog.log,@myregex],nodata(600)}=0
Bij 'Description' en 'URL' kan je nog wat relevante info opgeven en tenslotte kan je de severity opgeven waarna je op Add klikt.
Done!