Innhold
- Introduksjon
- Komponenter og arkitektur
- Installasjon
- Distribusjon av programvare: source, rpm, deb?
- Programvare avhengigheter
- Installasjon av database
- Installasjon av sentral server
- Installasjon av distribuert / proxy komponenter
- Installasjon av webkonsoll og API
- Installasjon av native agenter
- Installasjon av SNMP agenter
- Installasjon av IPMI agenter
- Installasjon av add-ons / plugins
- Vurdering
- Konfigurasjon
- Tilgangskontroll
- Sikkerhet
- Brukere og rettigheter som trenges under installasjon
- Brukere og rettigheter som trenges under innhenting av data
- Autentisering mellom komponenter
- Kryptering av trafikk mellom komponenter
- Kryptering av trafikk under innhenting av data
- API tilgangskontroll
- Integrasjon mot andre systemer
- Aktive / passiv koblinger
- Backup
- Vurdering
- Datasamling
- Visualisering / rapportering
- Feilhåndtering
- Trigger definisjoner
- Triggere som bruker data fra flere kilder før en alarm aktiveres
- Aggregering av data
- Avhengigheter må kunne håndteres for å unngå unødvendige alarmer
- Alvorlighetsgrader
- Vedlikehold og bekreftelse av alarmer
- Varsling
- Kjøring av kommandoer som svar på en hendelse
- SLA oppfølging
- Vurdering
- Sluttvurdering
Introduksjon
Zabbiz er en av de kandidatene som skulle testes for aktiviteten Overvåking - The next generation. Denne aktiviteten ble startet våren 2014 av Gruppe for IT driftstøtte (GID) ved USIT for å forbedre overvåking av de IT systemer som USIT har ansvar for.
Denne rapporten inneholder informasjon om funn gjort under testing av Zabbix.
Zabbix er en overvåkingsløsning som ble tilgjengelig for brukere for første gang i 2001. Siden 2005 har den blitt støttet av Zabbix SIA, et IT selskap med hovedkontoret i Riga, Latvia. Den er 100% opensource med kommersiell støtte, kursopplegg og utvikling/konsulent tjenester tilgjengelig via Zabbix SIA. I tillegg finnes det et "community" støtte apparat via IRC, blogs, forum, wiki og epostlister. "Webinar" om relevante temaer organiseres flere ganger i måneden og det organiseres en Zabbix konferanse en gang i året.
Den siste stabile versjonen brukt under testing har vært 2.2.6, Zabbix er programert i C og PHP og bruker en database for å lagre data og konfigurasjonsdata.
Noen store kunder som bruker Zabbix i produksjon er: Uninett, NTT communications, Sykehuspartner, T-Systems og XS4ALL. En fullstendig liste med referanser er tilgjengelig under http://www.zabbix.com/users.php
Hovedsiden til Zabbix er: http://www.zabbix.com/
Komponenter og arkitektur
Zabbix har fem hovedkomponenter:
Zabbix dashboard: Webkonsoll som kan brukes for å aksesere Zabbix konfigurasjon og visualisere tilstanden av det som overvåkes. Den krever en webserver for å fungere og tilgang til Zabbix sentral databasen.
Zabbix server: Sentral server som håndterer prosessering av data som hentes inn i systemet. Den kan også hente data selv i små systemer. Den bruker en sentral database for å lagre konfigurasjonsdata, overvåkingsdata og historikk/trend informasjon.
Zabbix proxy: Servere som kan brukes for å implementere en distribuert løsning. De prosseserer ikke data, men henter kun rådata som skal overvåkes. De bruker en database for å mellomlagre rådata som har blitt hentet før den sendes videre til Zabbix serveren.
En Zabbix proxy får informasjon fra Zabbix serveren om rådata som skal hentes og hvor ofte. Denne informasjonen er første dataen som utveksles når en proxy kommuniserer med Zabbix serveren, uavhengig om den kjøres i aktiv eller passiv modus.
Zabbix agent: Agenter som kan installeres på Linux/Unix, Windows, Mac maskiner for å hente data fra disse systemer. Data som samles via agenter sendes eller hentes av en proxy server eller en sentral server.
En Zabbix agent får informasjon fra en Zabbix proxy om rådata som skal hentes via agenten og hvor ofte. Denne informasjonen er første dataen som utveksles når en agent kommuniserer med en Zabbix proxy, uavhengig om den kjøres i aktiv eller passiv modus.
Zabbix API: JSON-RPC API som kan brukes for å oppdatere eller hente Zabbix data. Storsett alt som kan gjøres via dashboard kan gjøres via API-et. Den er tilgjengelig via HTTPS på webserveren som kjører dashboard.
Zabbix gjør et klar skille mellom innhenting av data og prossesering av den. Innhenting av data gjøres av Zabbix proxyer og agenter og prosessering av Zabbix serveren.
Denne modellen tillater å kunne aggregere eller kombinere data fra forskjellige kilder, systemer, og tidsperioder før en alarm genereres.
En Zabbix proxy kan snakke med en Zabbix server i aktive eller passive modus. Den største forskjellen mellom de to moduser er hvem som startet oppkobligen. Dette kan være nødvendig hvis man skal overvåke systemer med spesielle tilgangsbehov som kjøres bak strenge brannmur regler e.g.TSD.
Zabbix agenter kan også fungere i aktiv eller passiv modus når de snakker med en Zabbix proxy eller en Zabbix server. I aktiv modus er det agenten som kontakter proxyen når den har data å levere.
Neste bilde viser hvordan de forskjellige Zabbix komponenter kan settes sammen for å levere en overvåkingsløsning.
Skalering
Skalering i Zabbix er avhengig av flere variabler:
Antall "Items" (rådata verdier) og oppdateringsfrekvens: For å håndtere innsamling av et stort antall Items kan man bruke flere Zabbix-proxier som kan samle disse verdier.
I tillegg kan innsamling av data utføres i aktiv eller passiv modus. Zabbix agenter som kjører i aktive modus samler data og kontakter Zabbix proxier når de har data å sende. På denne måten slipper man å måte spørre agentene om verdier som skal samles.
Det anbefales å ikke bruke oppdateringsfrekvenser mindre enn 60 sek for å ikke overbelaste systemet og databasen.
Antall triggere/handlinger: Triggere og handlinger i Zabbix håndteres av Zabbix serveren. Denne serveren må ha nok resursser for å håndtere prossesering av data som skal analyseres og handlinger som skal utføres.
Et eksempel på ressursene som trenges for å å håndtere 76.000+ triggere for 690.000+ items og ca 7.000 hoster kan finnes på en blog innlegg i Zabbix Weblog. Zabbix serveren i dette tilfelle kjøres på en server med 12x Intel Xeon E5-2630 og 16GB minne.
Ref: http://blog.zabbix.com/scalable-zabbix-lessons-on-hitting-9400-nvps/2615/
Historiskk data: All data som samles inn lagres i en database. Hvor mye data lagres og for hvor lenge man gjør dette kan ha en innvirkning på total ytelsen av overvåkingssystemet.
Zabbix lagrer to type historiskk data:
- Rådata: All rådata (Items) som samles inn.
- Trender: min, max, avg av numerisk rådata.
Zabbix anbefaler å lagre 1-2 uker med rådata og minst 1-2 år med trend data for kapasitetsplanlegging.
Trend data regnes ut og lagres 1 gang i time.
Triggere bruker rådata for å regne ut logiske utrykk for en tidsperiode, man burde ha nok rådata i databasen for å klare å prosessere disse triggere.
Database systemet som brukes av Zabbix er en veldig sentral komponent og en god konfigurasjon og vedlikehold av den er avgjørende for at systemet skal fungere uten problemer.
I store systemer med tusenvis av hoster, items og triggers anbefales å kjøre databasen på en dedikert server og å bruke partisjonering av tabellene som brukes for lagring av historiskk data.
Antall brukere: Antall brukere som akseserer webkonsollet og API-et er også noe man må ta i betrakting når det gjelder skalering av Zabbix.
Man kan skalere webløsningen som brukes av webkonsollet og API-et via en standard HA løsning i aktiv-aktiv konfigurasjon. PHP:APC burde også brukes for opcode cache i PHP.
Redundans
Vanligvis pleier man å ha redundans på disse komponenter:
Zabbix serveren: Zabbix serveren kan ikke brukes i en aktiv-aktiv HA løsning. Den kan kun fungere i en aktiv-passiv HA løsning.
Zabbix webkonsoll / API: Webkonsollet og API-et snakker direkte med Zabbix databasen. Man kan bruke en aktiv-aktiv HA løsning hvor alle webservere kan levere data samtidig.
Zabbix database: Er Zabbix databasen nede, kan man ikke aksesere systemet eller endre konfigurasjon. Innsamling av data burde fortsette å fungere via Zabbix proxier men data kan ikke leveres videre til Zabbix serveren er tilgjengelig.
Man burde bruke en replikeringsløsning i aktiv-passiv modus hvis man ikke kan tåle noe nedetid av databasen.
Vurdering
- Veldig rent arkitektur, enkel å installere og konfigurere.
- Veldig gode muligheter for distribuert overvåking og skalering.
- Støtte for aktive/passive koblinger.
- Kan levere TSD overvåking
Installasjon
Distribusjon av programvare: source, rpm, deb?
Zabbix distribueres via source, rpm og deb pakker.
Vi har testet RPM distribusjonen med RHEL6. RPM pakkene er tilgjengelige via et offiselt repository fra Zabbix eller fra EPEL repository.
Vi har testet de to repoer, men EPEL inneholder en ca et år gammel versjon av produktet. Å vente i et år for å få en oppdatert versjon kan gjøre vedlikehold av systemet vanskelig i noen tilfeller. På grunn av dette har vi brukt det offiselle repoet under testing .
Zabbix repoet er tilgjengelig på denne adressen: http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/
Programvare avhengigheter
Zabbix har veldig få avhengigheter og alle leveres via RPM filer.
Zabbix server og proxy er avhengig av:
OpenIPMI libssh2 fping libcurl net-snmp
Webserveren trenger en webserver med PHP støtte for å kunne kjøre webkonsollen og API-et. Disse pakker må være installert:
httpd mod_ssl php php-common php-pgsql php-gd php-bcmath php-ctype php-xml php-xmlreader php-xmlwriter php-session php-net-socket php-mbstring php-gettext php-pecl-apc php-mcrypt php-cli php-pdo php-pear php-ldap
Installasjon av database
Zabbix støtter flere databaser, vi har brukt siste versjon av PostgreSQL (9.3) under testing med standard installasjon via PostgreSQL.org yum repository.
Etter at databasen og Zabbix serveren har blitt installert må man kjøre noen SQL scripter som finnes under /usr/share/doc/zabbix-server-pgsql-2.2.5/create for å initialisere den sentrale databasen. Noe tilsvarende må gjøres med hver database som brukes av en proxy server.
Ikke noen problemer har blitt oppdaget med databasen.
Installasjon av sentral server
Installasjonen av Zabbix server trenger kun en RPM pakke:
zabbix22-server-pgsql
Problemer med SElinux etter installasjon. SElinux ble slått av under testing av Zabbix server. Man må bruke litt tid med SElinux regler før Zabbix serveren kan brukes i produksjon med SElinux aktivert.
Installasjon av distribuert / proxy komponenter
Installasjon av Zabbix proxy trenger kun en RPM pakke:
zabbix-proxy-pgsql
Problemer med SElinux etter installasjon. SElinux ble slå av under testing av Zabbix proxy. Man må bruke litt tid med SElinux regler før Zabbix proxy kan brukes i produksjon med SElinux aktivert.
Installasjon av webkonsoll og API
Installasjon av webkonsoll og API-et trenger kun en pakke:
zabbix22-web-pgsql
Ikke noen problemer har blitt oppdaget under installasjon av webkonsoll / API.
Installasjon av native agenter
Zabbix agenter trenger kun en pakke på linux/unix:
zabbix-agent
Og en EXE fil på Windows.
Installasjon av SNMP agenter
SNMP agenter er integrert i Zabbix server og proxy og trenger ikke ekstra installasjon.
Installasjon av IPMI agenter
IPMI agenter er integrert i Zabbix server og proxy og trenger ikke ekstra installasjon.
Installasjon av add-ons / plugins
Zabbix støtter ikke add-ons eller plugins for å utvide Zabbix funksjonalitet på samme måte som andre produkter.
Zabbix har muligheter til å utvide sin funksjonalitet med å definere nye maler eller type rådata som skal overvåkes. Dette kan brukes for å levere samme funksjonalitet som leveres via plugins i andre produkter.
Zabbix støtter ikke add-ons for å endre på webkonsollen. Man kan bare opprette nye "themes" hvis man vil endre på utseende.
Man kan bruke API-et for å lage tredje part software som leverer ekstra funksjonalitet men som ikke er integrert i Zabbix webkonsollet. e.g. Mange mobil applikasjoner som kan brukes for å aksesere Zabbix bruker API-et for å aksessere Zabbix.
Ref: https://www.zabbix.com/documentation/2.2/manual/installation
Vurdering
Enkel å installere via RPM pakker. Anbefales å bruke Zabbix yum repo for å få tilgang til oppdaterte versjoner og et enklere vedlikehold av systemet.
Installasjon kan automatiseres uten problemer med CFengine e.l.
Den har ikke avhengigheter til tredje part software som kan være et problem i fremtidige oppgraderinger.
Noen SElinux problemer med Zabbix server/proxy/agenter som må jobbes med for å få alt til å fungere 100% med SElinux. Noen av disse problemer ble forårsaket av en bug i selinux-policy pakken til RHEL.6.5, dette burde være fikset i RHEL6.6 oppgradering. Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1039851
Utvider man Zabbix med flere sjekk som skal ha tilgang til informasjon som ikke tillates av SElinux, må man sannsynligvis definere SElinux regler som tillater dette.
Konfigurasjon
Konfigurasjonsoversikt
Hele konfigurasjonen av komponenter som skal overvåkes, hostgrupper, brukere, brukergrupper, tilganger, maler, grafer, triggere, handlinger, webkonsollen, osv lagres i databasen og kan oppdateres via webkonsollen eller API-et.
Webkonsollen trenger i tillegg en konfigurasjonsfil med informasjon om Zabbix hoveddatabasen.
Zabbix serveren trenger en konfigurasjonsfil med bl.a. database informasjon og noen parametere som definerer hvordan serveren skal oppføre seg, cache verdier, antall prosseser som er tillat, porter, osv.
Zabbix proxyer trenger en konfigurasjonsfil med bl.a. database informasjon og noen parametere som definerer hvordan proxyen skal oppføre seg, aktive/passiv modus, zabbix serveren, cache verdier, porter, osv.
Zabbix agenter trenger en konfigurasjonsfil med bl.a. noen parametere som definerer hvordan agenten skal oppføre seg, proxy server, porter, osv.
Ref: https://www.zabbix.com/documentation/2.2/manual/appendix/config
Konfigurasjon av alarmer, triggere, osv
Denne informasjonen er fullt tilgjengelig via webkonsollen og kan oppdateres etter behov.
Ref: https://www.zabbix.com/documentation/2.2/manual/config
Dette er også fullt tilgjengelig via API-et og kan oppdateres etter behov.
Webkonsoll konfigurasjon
Webkonsollen er det eneste stedet hvor man kan konfigurere parametere som er relatert til webkonsollen.
Ref: https://www.zabbix.com/documentation/2.2/manual/web_interface
Dette er ikke tilgjengelig via API-et.
Intern konfigurasjon (timeouts, ldap parametere, database, osv)
Denne informasjonen er delvis tilgjengelig via webkonsollen og delvis tilgjengelig via konfigurasjonsfiler.
Dette kan ikke konfigurares via API-et.
Konfigurasjon av roller / grupper / tilganger
Denne informasjonen er full tilgjengelig via webkonsollen og kan oppdateres etter behov.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/users_and_usergroups
Dette er også fullt tilgjengelig via API-et og kan oppdateres etter behov.
Auto-discovery
Zabbix levereres med funksjonalitet for å oppdage systemer og komponenter, de kaller denne funksjonaliteten Auto-discovery.
Auto-discovery kan brukes for tre ting:
- Oppdage og registrere/slette systemer som skal/ikke skal overvåkes
- Auto-registrering via Zabbix agenter.
- Low-level auto-discovery (Filsystemer, nettverkskort, SNMP OIDs). Man kan også lage custom low-level auto-discovery regler (e.g oppdage databaser i en cluster)
Denne funksjoneliteten leverer mange muligheter for å kontrollere det som skal oppdages og registreres og det kan lette arbeidet i noen tilfeller med å konfigurere overvåking hvis den blir brukt smart.
Ref: https://www.zabbix.com/documentation/2.2/manual/discovery/
Templates
En template eller mal er et sett med komponenter og definisjoner som grupperes for å gjenbruke dem på flere hoster. Templates er en viktig funksjonalitet når det gjelder automatisering av Zabbix konfigurasjon.
En mal aktiviseres på en host, ikke på en hostgruppe. En host kan ta i bruk en eller flere maler og man kan kjøre bulk oppdatering av hoster basert på hostgrupper. Dette gjøres slik for å kunne definere avhengigheter mellom hoster på trigger nivå.
Alle hoster som bruker en mal får automatisk alle fremtidige oppdateringer som gjøres på malen.
Zabbix leveres per default med et sett med ferdige maler klare til bruk:
- Viktigste netttjenester som kan kjøres på en maskin
- Zabbix infrastruktur
- IPMI Intel SR1530/1630
- JMX generic/tomcat
- Linux/Unix OS
- Windows OS
- SNMP
- VMware
De komponentene som kan registreres i en template er:
- Rådata som overvåkes (Items)
- Triggere
- Grafer
- Applikasjoner
- Lerreter (Screens): Skreddersydde websider som defineres av brukere for visning av data.
- Oppdagelses regles (low-level discovery rules)
- Web overvåkingsregler (web scenarios)
Ref: https://www.zabbix.com/documentation/2.2/manual/config/templates
Import / eksport av konfigurasjon.
Zabbix støtter eksport og import av konfigurasjon via XML og JSON.
Denne funksjonaliteten kan brukes for å eksportere eller importere disse elementer via webkonsollet eller API-et:
- Host grupper (Zabbix API only)
- Maler (items, triggers, graphs, screens, discovery rules og template linkage)
- Host (items, triggers, graphs, discovery rules og template linkage)
- Karter
- Bilder
- Lerret (Screens): Skreddersydde websider som defineres av brukere for visning av data.
Vurdering
- Konfigurasjon av componentene (server, proxy, agent og webkonsoll) kan automatiseres uten problemer med CFengine e.l.
- All konfigurasjon relatert til overvåking og tilgang lagres i en sentral database som kan akseseres eller endres via webkonsollen eller API-et. API dokumentasjon kunne trenge flere eksempler.
- Ekstremt fleksibel konfigurasjonshåndtering med mange muligheter til å få ønsket resultat.
- Veldig fleksibel håndtering av maler og elementene i malene.
- Fleksibel auto-discovery funksjonalitet som kan brukes i flere tilfeller hvis den blir brukt smart.
- Gode muligheter for toveis integrasjon med andre systemer via API-et.
- Gode muligheter for å hente data via API-et for e.g. å lage rapporter eller commandline applikasjoner/skripter.
Tilgangskontroll
Det eksisterer tre type brukere i Zabbix:
- Zabbix super admin: Superuser med tilgang til å aksesere, konfigurere og administrere Zabbix. De har tilgang til absolutt alle grupper og komponenter i systemet uten begrensninger.
- Zabbix admin: Administrator med tilgang til å aksesere og konfigurere de hostgrupper / templates de har tilgang til.
- Zabbix user: Vanlig bruker med tilgang til å aksesere hostgrupper de har tilgang til.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/users_and_usergroups
Autentisering via ldap/ad
Zabbix kan kobles via LDAPS til en ldap katalog for å autentisere brukere som skal logge inn via webkonsollet eller API-et.
Brukere som skal logge inn via LDAP må uansett være opprettet i Zabbix før de skal kunne logge inn. Dette kan automatiseres via Zabbix API-et.
Autorisering via ldap/ad
Zabbix støtter ikke autorisering via eksterne kilder (LDAP / AD). Autoriseringsregler må defineres i Zabbix. Skal man synkronisere Zabbix grupper med Cerebrum må en synkroniseringsjobb lages. Dette kan automatiseres via Zabbix API-et.
Autentisering via Kerberos
Zabbix støtter Apache-based (HTTP) autentisering, man kan i teorien bruke dette for å koble Apache til en kerberos server via mod-auth-kerb. Dette er ikke testet, selv om det finnes informasjon i Zabbix forum om folk som bruker dette for å tilby kerberos autentisering.
Grupper av ressurser (maskiner,osv)
Zabbix støtter Hostgruppe for å gruppere ressurser. Man kan definere brukergrupper som skal ha tilgang til å se og modifisere disse grupper.
En ressurs kan være medlem i flere hostgrupper.
Grupper av tjenester
Man kan også bruke Hostgrupper funksjonalitet for å definere alle komponentene som leverer en tjeneste.
Grupper av brukere
Zabbix støtter brukergruppe funksjonalitet for å gruppere brukere. Tilgangsregler defineres på brukergruppe nivå.
En bruker kan være medlem i flere grupper.
Grupper kan ikke være medlem i andre grupper, sannsynligvis fordi håndtering av inkompatible tilgansregler blir for komplisert.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/users_and_usergroups/usergroup
Assosiering mellom grupper
En brukergruppe kan få tilgang til en eller flere hostgrupper, templates eller enkelte hoster. Tilgangen kan være av type lese/skrive, kun lesing eller deny.
Vurdering
- Tilgangskontroll til de forskjellige hostgrupper og templates støttes via brukergrupper. Det er et fleksibel system.
- Gode muligheter for delegering av administrasjonsoppgaver via "Zabbix admin" rolen.
- Autentisering via LDAP støttes.
- Autentisering via kerberos kan i teorien brukes via HTTP autentisering i Zabbix og mod-auth-kerb i Apache. Dette er ikke testet.
- Synkronisasjon mellom brukergrupper i Zabbix og Cerebrum må implementeres. Dette kan gjøres via Zabbix API-et.
Sikkerhet
Brukere og rettigheter som trenges under installasjon
Man må være root for kunne installere alle pakkene som trenges via yum.
Brukere og rettigheter som trenges under innhenting av data
Zabbix kan kjøres som brukeren zabbix både på serveren/proxyer og på agentene.
Autentisering mellom komponenter
Zabbix bruker ikke noen form for autentisering mellom komponentene.
Man kan definere hvilke host har lov til å koble seg til en server/proxy eller agent. I tillegg må hoster og proxyer være definert i den sentrale Zabbix serveren for at de skal kunne levere informasjon.
Man kan bruke IPtables regler på Zabbix serveren og Zabbix proxyer for å implementere et ekstra sikkerhetsnivå på løsningen.
Kryptering av trafikk mellom komponenter
Zabbix støtter ikke per default SSL kryptering av trafikken mellom Zabbix komponenter. Man kan ta i bruk eksterne metoder hvis man vil implementere kryptering mellom komponentene. Zabbix anbefaler å bruke tunnelering via SSH eller Stunnel hvis man trenger å implementere kryptering.
Tilgang til webkonsollet og API-et støtter SSL kryptering via webserveren.
Kryptering av trafikk under innhenting av data
Zabbix støtter ikke per default SSL kryptering mellom Zabbix proxyer og Zabbix agenter. Igjen, man kan implementere dette via eksterne metoder som tunnelering via SSH eller Stunnel.
SNMPv3 og sjekker via SSH støttes av Zabbix, så man kan eventuelt bruke disse metoder hvis man skal hente konfidensiell data og ikke vil bruke tunnelering.
API tilgangskontroll
Tilgangskontroll til API-et bruker samme data som brukes for å definere tilgangen til Zabbix webkonsollet. Man akseserer API-et via HTTPS på samme serveren som kjører webkonsollet.
Man må logge inn første gang med en gyldig brukenavn/passord for å få tildelt en auth-token som kan brukes videre i følgende kommandoer i en sesjon. Man kan definere om en bruker skal logges ut automatisk eller ikke etter X antall sekunder uten aktivitet.
Kjøres innloggingsprosedyre automatisk fra et ikke interaktiv skript/program må brukernavn/passord være definert et sted.
Integrasjon mot andre systemer
Integrasjon mot andre systemer kan gjøres via Zabbix API-et. Dette må programeres og man kan bruke hvilket som helst programmeringsspråk så lenge det klarer å håndtere JSON/XML data og RPC kall.
Aktive / passiv koblinger
Både Zabbix agenter og Zabbix proxyer kan brukes i aktive eller passive modus. Når de fungerer i aktive modus er det de som starter koblinger mot en Zabbix proxy eller Zabbix server. I passive modus er det omvendt og de venter på en kobling fra en Zabbix proxy eller Zabbix server.
Denne funksjonaliteten kan brukes for å implementere overvåking i TSD prosjektet, med en eller flere Zabbix proxyer på innsiden av TSD i aktive modus som starter koblingen mot en Zabbix server på utsiden for sending av overvåkingsdata.
Backup
Backup av Zabbix data kan implementeres med backup av den sentrale databasen som brukes for å lagre konfigurasjons og overvåkingsdata.
Ved bruk av PostgreSQL kan dette implementeres via logical backups og PITR (Point in time recovery) funksjonalitet.
Konfigurasjon av Zabbix server, Zabbix proxyer og Zabbix agenter trenger ikke backup da informasjonen som trenges for å installere/konfigurere disse komponenter håndteres via CFengine e.l.
Vurdering
- Oversiktlig arkitektur med veldig klare metoder og regler for interaksjon mellom komponenter.
- Støtter ikke SSL kryptering per default. Man må bruke eksterne metoder for å implementere dette hvis det trenges (SSH tunnelering og Stunnel).
- Zabbix bruker ikke noe autentiseringsmetode mellom komponenter (Zabbix server, proxy og agenter), kun IP tilgang. Dette kan være et problem på nettverk som ikke kan stoles. Hoster og proxyer må være registrert i Zabbix for at de skal få lov til å levere data.
- Man burde bruke IPtables regler på Zabbix serveren og Zabbix proxyer for å implementere et ekstra sikkerhetsnivå på løsningen.
- Tilgang til webkonsollen og API-et krypteres via webserveren og krever autentisering.
Datasamling
Zabbix kaller hver enkel verdi som hentes inn i systemet en Item. Disse verdier kan være av forskjellige typer (tall, tegn eller tekst) og man kan regne ut og aggregere data fra verdier som hentes for å generere nye Items.
Zabbix støtter mange forskjellige metoder for samling av overvåkingsdata. Neste bilde viser en oversikt over disse metodene.
Via native agenter
Zabbix agenten er en daemon som bruker veldig få ressurser og som kan brukes for innhenting av data fra de systemene hvor den kjøres. De prosseserer ikke noe data da dette gjøres i Zabbix serveren.
De kommer med et sett predefinerte sjekker per default og kan på en enkel måte utvides med flere sjekker etter behov. De kan i tillegg brukes for å hente system data som kan brukes for å oppdatere inventar funksjonalitet i Zabbix.
Det finnes Zabbix agenter for Linux/Unix, Windows og Mac.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/zabbix_agent
Via SNMP
Agenter for SNMPv2 og SNMPv3 er tilgjengelige på Zabbix server og alle Zabbix proxyer og kan utføre sjekker via tcp eller traps. Low level auto-discovery brukes for å finne ut de SNMP attributter som er tilgjengelige i et system.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/snmp
Via IPMI
Agenter for IPMI sjekker er tilgjengelige på Zabbix server og alle Zabbix proxyer og kan utføre sjekker via IPMI protokollen for overvåking av hardware komponenter. Denne funksjonaliteten har ikke blitt testet.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/ipmi
Via ICMP
Zabbix støtter sjekker via ICMP.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/simple_checks
Via port sjekk
Zabbix støtter sjekker av tcp porter for å overvåke netverkstjenester. Den leveres med et sett default tjenester definert og man kan definere andre ved behov.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/simple_checks
Via eksterne plugins, ssh, powershell, osv
Zabbix støtter sjekker via SSH, Telnet, eksterne programmer og "trappers".
Sjekker via SSH, Telnet og eksterne programmer er tilgjengelig via Zabbix serveren og Zabbix proxyer, mens "trappers" er programmer som kjøres på komponenter som overvåkes og kan sende data direkte til Zabbix serveren eller Zabbix proxyer.
Via java/JMX
Agenter for JMX sjekker er tilgjengelige på Zabbix server og alle Zabbix proxyer og kan utføre sjekker via JMX på komponenter og systemer som kan bruke denne teknologien. Denne funksjonaliteten har ikke blitt testet.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/jmx_monitoring
Sjekk av websider / tjenester
Zabbix støtter sjekker av websider og webapplikasjoner, den sjekker nedlastingshastighet, responstid og statuskode. Den kan også hente innholdet i en side og simulere handlinger som en bruker kan utføre på sidene.
Sjekk av databaser
Zabbix støtter sjekker av databaser via ODBC. Alle databasene som støttes av ODBC kan overvåkes via Zabbix.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/odbc_checks
Hente data fra andre overvåkingssystemer, Scom, SSCM, vcops
Så lenge man kan hente data fra disse overvåkingssystemer burde det være mulig å importere det til Zabbix med en av de metodene som støttes for datasamling.
Data fra virtuelle løsninger
Zabbix støtter overvåking av VMware systemer. Den krever VMware vCenter eller vSphere versjon >= 4.1.
Den leveres med templates som kan brukes for å implementere overvåking av diverse komponenter i VMware vCenter og ESX hypervisor. Zabbix bruker VMware web services via SOAP protokoll for å hente data. Denne funksjonaliteten har ikke blitt testet.
Ref: https://www.zabbix.com/documentation/2.2/manual/vm_monitoring
Via Nagios plugins
I tilfeller hvor en komplisert Nagios plugin med mye logikk i koden ikke kan erstattes på en enkel måte med Zabbix items og trigger funksjonalitet, kan man ta i bruk Nagios pluginen på følgende måte, hvis status leveres i outputen fra plugingen:
- Definere en text "Item" som får som input tekststrengen fra Nagios plugin output.
- Definere en trigger for Nagios Warning status som bruker funksjonen Item-navn.regexp() for å generere en alarm med Zabbix viktighetsgrad Warning eller Average.
- Definere en trigger for Nagios Critical status som bruker funksjonen Item-navn.regexp() for å generere en alarm med Zabbix viktighetsgrad High eller Disaster.
Hvis status ikke leveres via output men via plugin return verdi, må man bruke en generell wrapper som kjører plugin, leser return verdi og output og sender dette inn i Zabbix.
Er Nagios plugin ikke komplisert anbefales å definere en vanlig Zabbix Item/Trigger som erstatter den.
Vurdering
- Bredt spekter av sjekker når det gjelder protokoller og type data som kan hentes inn.
- Alle data typer vi har behov for og noen ekstra er tilgjengelig per default.
- Muligheter for å gjenbruke Nagios plugins selv om man ikke får bruke alt funksjonalitet tilgjengelig i Zabbix (trender, aggregering, osv med numeriske verdier). Man kan kun få tekststrenger fra pluginen selv om det man kanskje overvåker er numeriske verdier.
Visualisering / rapportering
Varslingsoversikt
Hovedsiden i Zabbix webkonsollet har flere områder som brukes for å vise en oversikt over alarmer og snarveier til andre viktig datakilder.
Man kan flytte disse områder mellom tre kolonner og man har muligheter til å filtrere hostgrupper og type alarmer som skal vises her. De viser kun data man har tilgang til.
Detaljerte varslinger
Det finnes flere menyer som har oversikter og detaljer over de sjekkene og alarmer som genereres. Man kan i de fleste tilfeller filtrere informasjonen som vises etter hostgrupper, sjekk typer og enkelte hoster.
Ref: https://www.zabbix.com/documentation/2.2/manual/web_interface/frontend_sections/monitoring/overview
Grafer / trending
All data som hentes inn i Zabbix lagres i en database hvor man har trending data. Det er denne dataen som kan brukes for å generere grafer.
Zabbix leveres med et sett default grafer som blir tilgjengelige via forskjellige maler. Nye grafer kan defineres etter behov.
Zabbix har interne minneområder for historiskk data som brukes for å cache trend og rådata data (maks.2GB + 2GB) så man slipper å spørre databasen hele tiden.
Ref: https://www.zabbix.com/documentation/2.2/manual/web_interface/frontend_sections/monitoring/graphs
Søkemuligheter
Zabbix leveres med et globalt søk funksjonalitet tilgjengelig via webkonsollet. Man kan på en enkel måte søke etter verdier i disse områder og få en detaljert oversikt over resultatet:
- Hoster
- Navn / alias
- IP
- DNS
- Maler:
- Navn
- Host grupper:
- Navn
Med denne funksjonaliteten kan man få oversikt veldig rask over e.g. maskiner som inneholder prod eller test i navnet, eller komponenter som kjøres på en bestemt subnett.
Ref: https://www.zabbix.com/documentation/2.2/manual/web_interface/global_search
Man kan også bruke API-et for å søke etter komponenter som tilfredsstiller andre kriterier som ikke inkluderes i søk funksjonalitet som er tilgjengelig via webkonsollet.
Kart funksjonalitet
Zabbix kan levere kart funksjonalitet. Denne funksjonaliteten er veldig fleksibel og med mange muligheter men den støtter desverre ikke automatisk generering av et kart.
Kart kan defineres via webkonsollet eller API-et og kan bli importert/eksportert til JSON/XML filer.
Man kunne implementere automatisk oppdatering/generering av kart via API-et med data fra eksterne kilder men dette krever å utvikle kode som kan levere dette og det er ukjent hvor mye jobb dette krever.
Ref: https://www.zabbix.com/documentation/2.2/manual/web_interface/frontend_sections/configuration/maps
Custom visning
Webkonsollen gir muligheter til å definere lerret (screens) som viser tilpasset og filtrert informasjon. Disse sider kan vise grafer, alarmer og andre komponenter som er tilgjengelige i Zabbix konsollen.
Slideshow muligheter
Lysbilderserier (slideshows) kan vise forskjellige lerret i en loop.
Ref: https://www.zabbix.com/documentation/2.2/manual/web_interface/frontend_sections/configuration/slides
Tilgang til raw data
All data som hentes via Zabbix lagres i en sentral database og er tilgjengelige i tidsperioden som man har definert den skal leve i databasen.
Inventar / CMDB
Zabbix leverer inventar funksjonalitet. Man lagrer denne informasjonen i databasen og den kan akseseres via webkonsollet eller API-et. Dataen i inventaren kan også brukes via macroer for å tilpasse informasjonen som sendes i meldinger som genereres etter en alarm.
Det burde ikke være veldig vanskeling å bruke denne informasjonen for å generere avanserte rapporter via API-et.
Ref: https://www.zabbix.com/documentation/2.2/manual/web_interface/frontend_sections/inventory/hosts
Konsoll på mobile enheter
Det finnes flere mobile applikasjoner som kan brukes for å aksesere Zabbix.
Vurdering
- Gode muligheter for å lage tilpasset lerret og lysbildeserier med informasjonen man trenger.
- God støtte for inventar funksjonalitet.
- Muligheter for å aksesere Zabbix via mobile applikasjoner.
- Litt gammeldags webgrensesnitt.
- Det er ikke 100% intuitivt å bruke webgrensesnittet noen steder før man blir vant til det.
Feilhåndtering
Trigger definisjoner
Trigger definisjoner i Zabbix er en av de sterke sidene i dette produktet. En kraftig funksjonalitet som tillater veldig fleksible trigger definisjoner som kan brukes for å levere svært nøyaktige alarmer.
En trigger i Zabbix tar imot rådata som har blitt hentet, og bruker funksjoner og logiske uttrykk for å levere en tilstand. Tilstanden på en Zabbix trigger kan være:
- OK: Alt er normal
- Problem: Noe har skjedd (logisk uttrykk er TRUE)
I tillegg har en trigger viktighetsgrader og de definerer dem slik:
- Not classified: Ikke klassifisert
- Information: Informasjon
- Warning: Advarsel
- Average: Gjennomsnittlig problem
- High: Viktig hendelse
- Disaster: Katastrofe hendelse med økonomiske og omdømme tap
Ref: https://www.zabbix.com/documentation/2.2/manual/config/triggers
Triggere som bruker data fra flere kilder før en alarm aktiveres
Man kan generere "calculated items" med data fra forskjellige kilder / komponenter før man bruker disse i en trigger definisjon. Dette gir muligheter til å definere alarmer bl.a. på HA løsninger hvor nedetid på noen komponenter ikke er kritiske på grunn av redudansen i systemet.
Dette kan også brukes for å sjekke e.g. diskfyllingsrate i en periode, eller tid til disk fylles med gjeldende fyllingsrate.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/calculated
Aggregering av data
Man kan også aggregere data før den brukes videre i en trigger definisjon. Det finnes flere funksjoner som kan brukes for å aggregere data for en tidsperiode.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/aggregate
Avhengigheter må kunne håndteres for å unngå unødvendige alarmer
Zabbix støtter avhengigheter mellom sjekker og mellom komponenter for å unngå unødvendig alarmer og vise rotårsak til et problem.
Avhengighetene defineres på trigger nivå.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/triggers/dependencies
Alvorlighetsgrader
Som nevnt under trigger avsnittet, bruker Zabbix konseptet viktighetsgrader i tillegg til trigger tilstand og de definerer dem slik:
- Not classified: Ikke klassifisert
- Information: Informasjon
- Warning: Advarsel
- Average: Gjennomsnittlig problem
- High: Viktig hendelse
- Disaster: Katastrofe hendelse med økonomiske og omdømme tap
Dette gir oss muligheter til å få enda mer kontroll på alarmer som genereres. e.g. at en standalone server går ned kan være kritisk (high/disaster) mens hvis en server i en HA løsning går ned kan det defineres som et problem som må fikses men ikke er kritisk (average).
Vedlikehold og bekreftelse av alarmer
Man kan definere vedlikeholdsperioder for hoster eller host grupper. Tidsplanen definisjon for vedlikeholdsjobber er veldig fleksible med flere muligheter. Dette kan gjøres via webkonsollet og API-et.
Man kan bekrefte alarmer både via webkonsollet og API-et. Man kan skrive en melding når man bekrefter en alarm og man har tilgang til meldingshistorikk.
Varsling
Zabbix kan definere handlinger (Action) til en hendelse (Event) og en av handlingene som kan defineres er varsling etter at en alarm har blitt generert.
Man har flere muligheter for å varsle en alarm:
- Epost
- SMS
- Jabber
- Custom / integrasjon med andre systemer web, RT, Jira, osv.
Hva varsles, når og til hvem kan kontrolleres med mange parametere og en hendelse kan ha flere forsjellige handlinger assosiert til den.
Ref: https://www.zabbix.com/documentation/2.2/manual/config/notifications
Kjøring av kommandoer som svar på en hendelse
Zabbix har muligheter til å definere handlinger som kjører eksterne eller interne kommandoer når en hendelse genereres. Muligheter for autokonfigurasjon/automatisering.
SLA oppfølging
Zabbix støtter SLA oppfølging av tjenester registrert i systemet. Man kan lage en tjenesteoversikt i en trestruktur som viser tilstanden til tjenestene. Hver node har en tilstand og Zabbix beregner automatisk SLA verdien til hver node/tjeneste i en tidsperiode.
Ref: https://www.zabbix.com/documentation/2.2/manual/it_services
Vurdering
- Kraftig trigger funksjonalitet med støtte for avanserte logiske uttrykk.
- Veldig god støtte for triggere som baserer seg på "calculated items" og agreggert data.
- Veldig god håndtering av avhengigheter mellom sjekker og mellom komponenter av en tjeneste gir muligheter til å identifisere rotårsak av et problem.
- Seks alvorlighetsgrader i tillegg til tilstand på en alarm gir oss god fleksibilitet til å kategorisere alarmer riktig.
- Gode muligheter til å definere forskjellige type handlinger som svar til en hendelse.
Sluttvurdering
Etter alle testene og informasjonsinnsamling som har blitt utfør med Zabbix i test perioden kan jeg si at Zabbix er en fullverdig kandidat som kan levere en mye bedre og mer avansert overvåkingsløsning enn det vi har i dag.
Mulighetene til skalerbarhet, distribuert overvåkning, gode automatiserings og integrasjonsmuligheter via maler og REST-API, sentralisert konfigurasjon, kraftig trigger funksjonalitet, håndtering av avhengigheter, filtreringsmuligheter, bruker og privilegier håndtering og mobile applikasjoner er viktigere og veier etter min menning opp følelsen av et litt gammeldags webgrensesnitt, og at det ikke er 100% intuitivt å bruke webgrensesnittet før man blir vant til det.