Monitor Elastic met Zabbix

Om Elastic te monitoren kun je natuurlijk Elastic zelf gebruiken maar mooier is het om een apart monitoring systeem te gebruiken…Zabbix!

Op Github staat een script om dit te regelen: https://github.com/sergiotocalini/elasix
Waarom hij het Elasix noemt in plaats van Elastic weet ik niet, misschien een typfout. Voor het gebruik heb ik de scripts hernoemt.

Script installatie

Het script bestaat uit 4 bestanden:

  • Zabbix template
  • SH script
  • 2 config scripts

Begin met het aanmaken van een scripts directory:

mkdir /etc/zabbix/scripts/agentd/elastic

De scripts “elastic.conf.example” en “elastic.sh” moeten naar bovenstaande directory worden gekopieërd.
Uiteraard moet elastic.conf.example aangepast worden naar je eigen waardes en moet .example weggehaald worden.

De maker van het script gebruikt het volgende pad in de UserParameter: /etc/zabbix/scripts/agentd/elasix/elasix.sh
Ik heb in zabbix_agentd.conf “elasix” vervangen door “elastic”

vi /etc/zabbix/zabbix_agent.d/userparameter_elastic.conf

Hier kan je de inhoud van “zabbix_agentd.conf” in plakken. Dit is puur persoonlijk, ik vind dit een nettere oplossing dan een generiek bestand wat niet zegt wat het doet.

systemctl restart zabbix-agent

Vervolgens het template importeren in Zabbix. Als je alles hernoemt hebt van elasix naar elastic moet het template ook aangepast worden!

Ik ga er vanuit dat Zabbix draait als user zabbix dus:

chown zabbix:zabbix /etc/zabbix/scripts/agentd/elastic/elastic.*

chmod +x zabbix:zabbix /etc/zabbix/scripts/agentd/elastic/elastic.*

Bij het testen van het script gaf Zabbix de melding: /usr/bin/env: ksh: No such file or directory, dit heb ik opgelost door in elastic.sh de eerste regel te vervangen door:

#!/usr/bin/env sh

Als je dan alles goed hebt gedaan:

PS. dit is een nieuw cluster waar nog niets op draait, vandaar dat alles op 0 staat.

Automatische maintenance periodes in Zabbix

Omdat we vinden dat het up to date houden van onze systemen van levensbelang is, hebben we elke laatste vrijdag van de maand een onderhoudswindow waarin we alle systemen, websites ed. updaten. Om nu te voorkomen dat we tijdens dit geplande onderhoud worden gespamd met berichten uit de monitoring hebben we hiervoor een automatische maintenance periode ingesteld.

In het kort komt het er op neer dat Zabbix tijdens deze periode de geselecteerde systemen in maintenance plaatst en dus geen notificaties uitstuurt als de servers bijvoorbeeld herstarten. Uiteraard kan je deze systemen ook met de hand in maintenance zetten maar ja…iets met automatisering 🙂

Maintenance periods

Dit menu item vind je hier: Configuration -> Maintenance. Vervolgens klik je rechts op de knop “Create maintenance period”. Het volgende scherm heeft 3 tabbladen, let er op dat je ze alle 3 invult.

Maintenance

  • De naam mag je helemaal zelf verzinnen. Wij gebruiken bijvoorbeeld Monthly System Maintenance.
  • Maintenance type kun je laten staan op “With data collection”. Dit zorgt ervoor dat Zabbix gewoon data blijft ontvangen van de host.
  • Active since / active till geeft alleen het begin en eind aan van de regel, dit zegt niets over het moment dat de host in maintenance wordt gezet.
  • Description as you wish…

Periods

Ga naar het tabblad periods en klik op New. Wat je hier kunt kiezen is eigenlijk een wrapper voor een cronjob. Klik maar eens op:

  • Period type: Monthly
  • Date: Day of week

Wij hebben dit zo geconfigureerd:

In dit geval worden dus de systemen in maintenance gezet:

  • elke laatste vrijdag
  • elke maand
  • van 20:00 tot 00:00

Host & Groups

Op het laatste tabblad kun je nog aangeven welke systemen in maintenance gezet moeten worden. Je kunt hier het makkelijkste groepen gebruiken zodat nieuwe systemen (die moet je dan wel in de juiste groepen plaatsen) automatisch meegenomen worden.

Zabbix discovery regel voor SNMP devices

We gebruiken Zabbix voor het monitoren van servers, firewalls, switches, printers en allerlei andere apparaten die op het netwerk zijn aangesloten en waar we de status van willen weten. Het onderhouden van al die apparaten (‘hosts’ in Zabbix) kan bij een grote hoeveelheid apparaten écht een dagtaak zijn.

Zabbix Discovery

Zabbix maakt dit een stuk makkelijker met Discovery regels. Met deze regels kun je een ip reeks scannen op de aanwezigheid van apparaten. Vervolgens kun je hier acties aan hangen zodat er van alles gedaan kan worden op het moment dat er een apparaat gevonden wordt.

Binnen Zabbix bestaat het discovery process uit twee delen:

  • De discovery, deze scant een ip reeks op aanwezige apparaten.
  • Een action welke wordt uitgevoerd wanneer er een apparaat gevonden wordt.

Discovery regel

We beginnen met het aanmaken van een discovery regel. Hiervoor ga je naar de Zabbix web interface, Configuration -> Discovery.

Hier zie je de standaard discovery rule staan die aan is gemaakt tijdens de installatie van Zabbix. Als voorbeeld maken we een nieuwe regel aan.

  • Klik op Create discovery rule.
  • Geef de regel een naam.
  • Geef de IP reeks op die gescant moet worden.

Omdat we ons op dit moment richten op SNMP devices gaan we als check een SNMP check invoeren.

Klik bij Checks op “New” en vul in:

  • Check type SNMPv2 (tenzij je apparaten SNMPv1 zijn)
  • Port range is default 161
  • SNMP community is meestal public
  • SNMP OID 1.3.6.1.2.1.1.1

Die laatste is het belangrijkste. Uit de SNMP documentatie:

sysDescr OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-only
STATUS mandatory
DESCRIPTION
"A textual description of the entity. This value
should include the full name and version
identification of the system's hardware type,
software operating-system, and networking
software. It is mandatory that this only contain
printable ASCII characters."
::= { system 1 }

Als we deze OID gebruiken zou Zabbix een waarde terug moeten krijgen die overeenkomt met de omschrijving van het apparaat zoals bijvoorbeeld een ups, switch, printer of iets dergelijks.

Voeg de regel toe en Zabbix zal elk uur de ip reeks scannen op apparaten. Gevonden apparaten kun je zien bij Monitoring -> Discovery.

Actions

Nu gebeurt er nog niets wanneer een apparaat gevonden wordt. Dit komt omdat er nog geen action aan gekoppeld is. Ga naar Configuration -> Actions. Rechts boven zie je een drop down menu van de Event Source. Klik hier op Discovery en dan op Create Action.

Als naam kun je van alles opgeven. Wij houden een naamgeving aan die lijkt op een SQL statement. Zoiets als: CREATE host FROM RULE discovery-192.168.0.x

Klik bij New Condition op de eerste drop down en selecteer “Received value”. De tweede drop down is de operator en is afhankelijk van je scenario. Stel even dat je UPS’en toe wilt voegen. Als je 1 model UPS hebt zou je hier “=” gebruiken en de volledige SysDescr invullen. Heb je van dezelfde fabrikant meerdere modellen maar wel met dezelfde items die je wilt monitoren, dan gebruik je hier “like” en hanteer je een iets ruimere waarde zoals bijvoorbeeld “APC UPS” zonder het exacte model nummer.

Vergeet niet op “add” te klikken!

Ga nu naar het tabblad Operations. Hier geef je aan wat er moet gebeuren wanneer deze actie wordt uitgevoerd. Je zou dus ook alleen een notificatie kunnen sturen zonder de host daadwerkelijk te gaan monitoren.

We gaan meerdere operations uitvoeren:

  • Add host
  • Link to template

Het template voor de host is afhankelijk van het merk en type apparaat. Kijk hiervoor op https://share.zabbix.com

Als het benodigde template hier niet bij staat zal je deze zelf aan moeten maken. Hoe dit moet komt in de volgende post.