Nagios vs Cacti vs Zabbix vs Zenoss

Een van de belangrijkste elementen bij het beheer van servers, is het monitoren ervan. Ik heb hiervoor voornamelijk tools gebruikt die andere administrators ook gebruiken: Nagios en Cacti. Ik heb ook een poos gebruik van een text-based geconfigureerde monitoring tool genaamd Cricket. Deze werkte goed, maar het was moeilijk te leren voor mijn collega’s en Cacti bleek vrij onbetrouwbaar wat betreft SNMP.

Vervolgens kwam ik een paar jaar geleden Zabbix tegen. Alhoewel Zabbix niet perfect is, komt het erg professioneel over vergeleken met de andere tools, terwijl de betaalde tools nog slechter lijken te zijn als de open-source tools. Ik heb het geprobeerd en na veel lezen zag ik zeker potentie in Zabbix voor het vervangen van zowel Nagios als Cacti. Dus ik heb besloten om mijn ervaringen te delen.

Nagios

Volgens de makers is dit de instrustriestandard in IT infrastructure monitoring. Het is een geweldige tool, maar het heeft zich nauwelijks meer verder ontwikkeld in de laatste jaren. Nagios is een tool dat ik al bijna 10 jaar in gebruik heb en het is erg betrouwbaar.

Voordelen:

  • open source
  • grote community
  • veel goede plugins (en eigen plugins zijn makkelijk te makkelijk: gewoon een programma schrijven dat een string van 1 regel en de return code terug geeft)
  • makkelijk te gebruiken web frontend
  • debuggen van plugins is niet erg moeilijk
  • veel goed-doordachte features zoals host groups en notificatie-opties die het leven van de systeembeheerders makkelijk maken
  • dependencies (Je krijgt dus geen 100 notificaties indien er een router down gaat als andere servers daarvan afhankelijk zijn)
  • nagvis plugin met een goede interactieve editor die erg mooie grafieken kan maken

Vervelende eigenschappen:

  • De nadruk ligt op availability – Je krijgt geen mooie grafieken op basis van waarden die gemonitored zijn, bijvoorbeeld de CPU-load over een periode. Je hebt hiervoor een 2e tool nodig, die precies dezelfde checks moet uitvoeren. Beschikbaarheids percentages worden wel automatisch berekend.
  • Text-configuratie heeft zoveel verschillende instellingen dat je de parameters vaak op moet zoeken. Een web-based configuratie zou waarschijnlijk beter zijn.
  • Third-party plugins zijn vaak slecht geprogrammeerd en überhaupt niet gedocumenteerd, waardoor je regelmatig beter zelf een uur kunt besteden zelf een plugin te schrijven.
  • Sommige views in de web-interface zijn niet erg logisch, bijvoorbeeld het klikken op de titel van host-groups om alle hosts met alle services te kunnen zien (interessante view).
  • Veel plug-ins hebben geen configuratie entries, dus je moet erachter komen hoe ze werken en de configuratie entires zelf schrijven. Diegenen die pre-configured zijn vereisen soms veel tijd om achter de parameters te komen wat veel tijd kost. In je service-configuratie moet je je checks handmatig controleren om achter de betekenis te komen, of weet je nog wat “check_http 80!john!doe!10!30!body” precies moet checken?
  • Elke set van parameters van een plug-in vereist een specifieke configuratie-entry. Plug-ins hebben zoveel configuratie-opties die je wellicht eens nodig hebt. Wil je een time-out voor HTTP checks instellen? Dan moet je een nieuwe check configuratie schrijven. Wil je zoeken voor een specifieke string in een HTTP response, dan moet je nog een configuratie check schrijven, etc etc.
  • De meeste zijn worden gedraaid vanaf de Nagios server (de NRPE plug-in kan checks doen op remote servers) wat niet optimaal is en veel load voor de server veroorzaakt.
  • Standaard zorgt elke alert voor een notificatie. Je kunt dependencies niet goed instelllen indien je bijvoorbeeld je webserver wilt testen in alle 30 ondersteunde talen en je inbox wordt volgespammed met alerts.

Cricket

Aangezien Nagios geen ondersteuning had voor het plotten van grafieken op basis van de gemonitoorde gegevens had ik andere software nodig. Cricket is een frontend op RRD (deze staat data op in roterend round-robin bestanden die data bewaren over de laatste X minuten/uren/dagen). Het heeft een text-based configuratie dat tijd vereist om eraan te wennen. Het belangrijkste principe is de inheritance van instellingen, genaamd de “configuration tree”. Dit betekent dat je een master DEFAULTS file hebt die de algemene instellingen bevat. In een subdirectory stel je specifieke classes van devices in die je wilt monitoren, bijvoorbeeld routers. Binnen de routers directory kun je een lijst van routers maken die je wilt monitoren. Alle instellingen worden ge-inherit van boven, dus vanaf parent dictories. Het is meer een geek tool voor mensen die van de console houden.

Voordelen:

  • Erg snel mogelijk om een grote hoeveelheid op-elkaar-lijkende devices te monitoren, nadat de general device class is ingesteld
  • Eenvoudige web interface
  • Erg betrouwbaar
  • Kan SNMP waarden monitoren (doet dit erg goed) of externe scripts uitvoeren en dus makkelijk uitgebreid worden.
  • Flexibele grafieken – Je kunt rekenen met waarvan vanaf meerdere grafieken, bijvoorbeeld mtargets – multiple targets.
  • Verschillende check frequenties kunnen ingesteld worden voor verschillende subtrees via cron. Standaard worden waarden elke 5 minuten opgehaald, dit kan tot een minimaal van 1 minuut worden ingesteld.

Vervelende eigenschappen:

  • De text-based configuratie is erg gevoelig voor errors, wat leidt tot Perl-errors die lastig te debuggen zijn
  • Gebruikers verwachten wellicht alle parameters te zien van 1 specifieke device ipv dat alle devices specifieke parameters hebben.
  • Aanpassen van grafieken (gemaakt door RRD tool) naar eigen wensen is niet eenvoudig
  • Frequentie van de checks is standaard 5 minuten,  RRD heeft 3 waarden nodig voordat het zijn eerste grafiek kan maken. Je moet dus 15 minuten wachten.
  • RRD rondt data standaard af. Dus de jaarlijkste grafieken toont niet de pieken van de dagelijkse grafieken. Dit kan gefixed worden door het niet graphen van gemiddelde, maar maximum waarden. Lange-termijn archivering van gegraphde data is niet mogelijk zonder RRD-files weg te gooien. De monitoring frequentie (heartbeat) kan niet aangepast worden zonder alle data weg te gooien en opnieuw te beginnen.
  • Er is geen goede manier om notificaties de versturen als treshholds zijn bereikt.

Cacti

Nog een frontend voor RRD en een erg uitgebreide. Bijna alles wordt geconfigureerd door de web interface en het resultaat is prachtig. Het is echter niet geheel betrouwbaar en SNMP ondersteuning heeft echt veel problemen. Ik mag Cacti vanwege de uitstekende user interface, maar het is minder betrouwbaar en flexibel.

Voordelen:

  • Erg mooie en eenvoudige web interface. Mooie features zoals grafieken waarop je kunt inzoomen via javascript.
  • Uitgebreie permissies systeem. Je kunt users specifiek read-only toegang geven tot een specifieke subtree.
  • Je kunt de tree met grafiekenzelf instellen en indelen en dus krijg je precies de view die je wilt.

Nadelen:

  • Verbergt de RRD magie niet erg goed. Je raakt makkelijk in de war door templates, data sources , e.d.
  • De graphing stopt soms zomaar met werkend, zonder reden of er missen waarden terwijl de server niet overloaded is noch andere software downtime meldt. Na een simpele zoektocht op Google blijkt dat ik niet de enige ben met zulke problemen.
  • Het configureren van veel systemen vereist een hele hoop klikwerk in de web-interface. Het instellen van nieuwe soort checks (“templates”) vereist nog meer klik-klik-klik en is gevoelig voor errors.
  • De kwaliteit van sommige third-party templates die ik heb getest was erg schlecht. Het maken van nieuwe templates is heel vervelend, gevoelig voor errors, frustrerend. Niets voor de casual gebruiker.
  • Verwerkt SNMP simpelweg niet correct, wat de grootste fail is van deze software. Alhoewel het weet hoe indexes te query’en (ifDescr voor namen van network interfaces), het lijkt gewoon vaste OIDs op te slaan. Dus als het aantal rijden van items wijzigt in de SNMP tabel (wat niet ongebruikelijk is), dan worden zomaar andere parameters weergegeven in de grafieken.
  • Frequentie van checks is standaard 5 minuten. De frequentie verhogen zorgt voor missende data en verkeerde resultaten.
  • Aangezien het RRD gebruikt en 3 waarden vereist, zie je geen monitoring fails totdat je 3×5=15 minuten wacht.
  • Debuggen van mislukte checks is vrijwel onmogelijk. Als een check mislukt dan eindig ik meestal op willekeurig op zoek te gaan naar typos, omdat het alternatief zoeken is in de database entries.
  • De web interface is soms verwarrend. Een refresh van SNMP tabels is gedaan door op een weinig betekenisvolle groene circel te klikken. Het toevoegen van nieuwe items wordt gedaan door een “Add”-link dat niet eens op een link lijkt.
  • Ander verwarrend UI-element: Grafieken worden gemaakt vanaf de “Devices”-view, maar verwijderd vanaf de “Graph management view”.
  • Geen alerting in geval van overschrijden van treshholds. Je hebt nog steeds een tool als Nagios nodig voor notificaties.
  • Kan niet meerdere targets optellen, dus fail-over clusters monitoren werkt niet goed.
  • RRD rondt de data af waarin het dagelijkse waarden opslaat in wekelijkse, wekelijkse in maandelijkse en maandelijkse in jaarlijkse. Dus de jaarlijkse grafieken vertonen niet de pieken van de dagelijkse. Zie het hierboven genoemde punt.

Zenoss

Veel mensen hebben me Zenoss aanbevolen gezien het dezelfde functionaliteit aanbiedt als andere monitoring systemen maar beter geintegreerd is. Dit is een korte lijs gebaseerd op een ervaring van slechts een paar dagen en dus geen grondige analyse. Uiteindelijk is de meeste fuss gewoon marketing.

Voordelen:

  • Erg mooie web interface
  • Mooie gimmicks zoals integratie met Google Maps om te tonen waar je servers wereldwijd staan. Niet erg zinvol, tenzij je meerdere monitoring locaties hebt.
  • Kan parameters van systemen gedeeltelijk automatisch ontdekken. Dat werkt vivoor statische routes (al weet ik niet waarom ik statische routes zou willen monitoren), bestandssystemen en netwerkinterfaces. Processenn die niet automatisch ontdekt worden moeten handmatig ingevoerd worden.
  • Komt niet met een specifieke agent, maar werkt goed met het oude trouwe SNMP.
  • Kan Windows monitoren via native WMI.
  • Grote fanbase.

Vervelende eigenschappen:

  • Webinterface doet traag aan. Zope is bloated.
  • Ondoorzichtige werkingen. Het vertelt niet echt waarmee het bezig is. Je kunt monitoren en checks later toevoegen indien iets werkt zoals je wilt.
  • Twijfelachtige betrouwbaarheid. In een test heb ik een draaiend proces gemonitord, maar dit proces zou down gegaan te zijn en later weer up, maar er wat niets veranderd op het systeem.
  • Slechts één dashboard, meerdere dashboard zoals bij Zabbix “screens” zou erg mooi zijn.
  • Configuratie en data verspreid over MySQL, interne Zope database en RRD bestanden.
  • De dependency grafiek is een mooi op Flash gebaseerde applet dat weergeeft hoe systemen zijn verbonden, maar het toont geen details over de systemen afgezien van het up of down zijn van systemen. Klikken op een host brengt je niet ergens, allleen met centraal op het systeem. Erg mooi, maar het zou zoveel meer kunnen zijn dan er alleen mooi uitzien.
  • Ik hou niet van de manier waarom dingen zijn geconfigureerd. Het context menu met een pijl naar beneden moet gebruikt worden. Ik hou meer van simpele “add” en “delete” opties dan steeds door het menu te bladeren. In mijn ogen wordt Javascript hier verkeerd gebruikt.
  • Beperkte open-source versie. Voor de volledige versie dient betaald te worden.

Zabbix

Ik gebruik Zabbix op Debian. Zabbix lijkt het perfecte monitoring systeem te zijn waar ik altijd van heb gedroomd. Ik zou het zelf echter iets anders hebben ontworpen in bepaalde aspecten.

Voordelen:

  • Availability monitoring (zoals Nagios) en het plotten van grafieken (zoals Cacti) gecombineerd in één tool.
  • Uitstekend te configureren. Joost kan een sms krijgen bij ernstige problemen tijdens het werken en bij werkdagen slechts een Jabber-bericht. Zelfs automatische acties zoals het herstarten van services kan ingesteld worden.
  • Notificatie berichten zijn daadwerkelijk zinnig, zoals “Low disk space on /var on server05” met een aanvullend bericht, zelfs als ze via SMS zijn verbonden. Notificaties zijn perfect aan te passen naar eigen wensen.
  • Uitstekende performance. Een Zabbix Agent kan geïnstalleerd worden op systemen (afhankelijk van operating systems – zelfs voor Windows) welke de informatie van elk systeem erg efficiënt vergaart. De agent kan zelfs scripts en shell commando’s gebruiken voor het vergaren van informatie. Deze manier van data collectie is erg efficiënt. Je hebt een server met een goede I/O en veel ram nodig, zodat de database efficiënt kan werken. Eerst had ik Zabbix op een virtuele Debian server met 1GB ram. Database toegang werkt echter langzaam, zodat het tonen van grafieken of recent events erg langzaam werd. Op een server met 4GB geheugen, een grote MySQL key buffer en goede IO draait het perfect.
  • Items verzamelen (informatie over systeemparameters) gebeurd op vooraf ingestelde intervals. Je hoeft niet enkele minuten te wachten voordat je resultaten ziet, meestal gebeurt het al na een halve minuut. Elk item beschik over een custom check interval, dus je kunt de CPU load elke 30 seconden bekijken maar het aantal vrije inodes op /home slechts één keer per uur.
  • Snelle web interface.
  • Uitgebreide monitoring van websites. Zabbix kan een pad van gesimuleerde muisklikken volgen op een website en functionaliteit en response tijd checken.
  • Real-time grafieken. Waarden worden standaard elk 30 seconden verzameld. Je ziet snel waar je heen gaat.
  • Permissies systeem. Bepaalde gebruikers kunnen gelimiteerd worden tot bepaalde views.
  • Verzamelde data is verzameld in een database (MySQL, PostgreSQL, SQLite) in plaats van een onflexibele RRD file. Opslagperioden (geschiedenis) kan vrij geconfigureerd worden. Je hoeft slechts de database te back-uppen.
  • Templates (die zelfs naar andere templates kunnen linken) kunnen tijd besparen in veel checks
  • Grafieken kunnen gecustomized worden zoals welke items geplot worden en op welke manier, zelfs cirkeldiagrammen zijn mogelijk.
  • Zelfs de parameters zonder explicieke grafieken kunnen weergegeven worden in grafieken, bijvoorbeeld als de agent de CPU load heeft gemonitord op een onbelangrijk systeem, dan kun je daar met 1-muisklik een mooie grafie van maken.
  • Screens en slide shows kunnen gebruikt worden voor high-level views (“dashboards”) or weergeven worden op een grote display. Ze combineren zowel de text-weergave van de status als de klokken, ad-hoc grafieken of vooraf gedefineerde grafieken.
  • Erg flexibele trigger expressies. Je kunt bijvoorbeeld een trigger laten afgaan als de gemiddelde server load van de laatste 15 minuten boven een bepaalde waarden is. Gezien alle opgeslagen parameters opgeslagen zijn in een database, kun je allerlei flexibele wiskundige expressies gebruiken. Bijvoorbeeld een trigger laten afgaan als het gemiddelde aantal draaiende processen in het laatste half uur boven de 50 is. Alle andere software die ik heb getest kan slechts gebruik maken van de laatste binnengekomen waarde.
  • Alerts/notificaties kunnen eenvoudig gescript worden via shell scripts.
  • Remote monitoring is mogelijk via een Zabbix proxy.
  • Betaalde ondersteuning en betaald custom programmeren beschikbaar, maar de software is volledig open-source.
  • Handleiding in 320-pagina tellende PDF met screenshots en goede verwijzingen. Alhoewel ik liever een online help zou helpen, momenteel verwijst de “?” link in de web interface naar een PDF die je kunt downloaden.

Vervelende eigenschappen:

  • Veel bezig met de muis, veel geklikt om dingen in te stellen. Bijvoorbeeld een alert instellen indien de vrije ruimte op een server te laag is, dan moet je hosts/items/triggers en acties instellen. Sommige kliks lijken dubbelop en overtollig. Bijvoorbeeld: Ik heb geen mogelijkheid gevonden om triggers automatisch af te laten gaan bij een set van checks. Indien ik monitor hoe vol de “/home”-partitie is, dan zou ik graag in deze stap ook een treshhold instellen.
  • Het kost wat tijd om de concepten te leren begrijpen, alhoewel je ze meestal na een halve dag wel begrijpt.
  • De web interface zit bomvol met features. Voor casual gebruikers is het verwarrend om te natigeren. In een real-life netwerk stel je hosts variabelen in, speel je met templates en tenzij je alles onthoudt, heb je geen goed overzicht over je configuratie. Zabbix is erg complex, maar in mijn ogen heeft het een nog betere web interface nodig om goed om te gaan met zijn features.
  • De map editor was vrijwel onbruikbaar, al hebben ze deze erg verbeterd. Het is nog steeds tijdrovend om maps in te stellen. De map editor zou moeten werken met minder muiskliks. Tevens miste ik de feature om huidige waarden toe te voegen aan de map, bijvoorbeeld de temperatuur van de server of het dataverkeer van de load balancer. Je kunt triggers toevoegen die veel ruimte nodig hebben op de map.
  • Je kunt slechts een waarde per item retourneren. Soms heb je een good/bad waarde nodig met extra informatie. Nagios bijvoorbeeld retourneert een OK/WARNING/ALERT en ook een text string. In Zabbix zijn dit verschillende items.
  • Zabbix wordt pijnlijk wanneer je verschillende gelijkaardige assets wilt monitoren. Verschillende netwerk interfaces, partities, MySQL instanties, web server poorten. Templates zijn vrij zinloos hier. Je moet elk item en trigger kopiëren.
  • Herkent niet de beschikbare assets in een gemonitorde server. Stel je voor dat je alle disk partities wilt monitoren. Je moet alle items handmatig overkopiëren of aanmaken of alle mogelijke checks in een template configureren en de checks uitzetten die je niet nodig hebt. Cacti gaat hier beter mee om door een list van partities aan te bieden die je wilt monitoren. Zenoss kan dit gedeeltelijk doen. De zabbix agent zou automatisch in staat moeten zijn om dit te ontdekken via een discovery feature. (De ingebouwde “Discovery” feature is in staat nieuwe servers te ontdekken in een Netwerk, maar dit is een hele andere feature.)
  • Moeilijk te debuggen. Waarom heeft een actie niet gedraaid? Wie zou geinformeerd worden over een bepaalde trigger? waarom is een waarde “unknown” geworden zonder een bepaalde reden? Vanzelfsprekend zijn er redenen voor wat Zabbix doet, maar het is vaak nodig om veel te klikken en te gokken om daarachter te komen i.p.v. Zabbix dit gewoon aangeeft.

 

Comments

  1. Hi, did you try NetXMS?

  2. René Diepstraten says:

    De huidige zabbix 2 versies ondersteunen discovery van nics en disks via een regex. Voor debian is een repository te vinden op zabbixzone.com .

  3. Patrik Uytterhoeven says:

    welke versie van zabbix werdt hier bekeken ?

    -in v2.x zit auto discovery van nics

    – op de site naar product -> documentation -> hier heb je de pdf en de online doc voor 1.8 en 2.0

    -moeilijk debuggen? -> zabbix_server.log

    -in map editor kan je gewoon de hosts op naam toevoegen en je kan ze onderling met elkaar verbinden en triggers toevoegen maar niet alleen dat je kan ook macros toevoegen zodat items als temperatuur en bv de snelheid van je lijnen mee op de map komen.

    -monitoring -> latest data : hier heb je een overzicht per applicatie dus als je nics van alle servers in een applicatie nics zet dan heb je hier een mooi overzicht van alle servers hun nics

  4. ik heb het gevoel dat ik dit ergens anders ook heb gelezen, maar dan in het engels.

Geef een reactie