Mi a zabbix, mire jó?
A zabbix egy olyan nyílt forráskódú szoftver, amellyel monitorozni tudjuk az infrastruktúránkat. Ha az operációs rendszer alkalmas a zabbix agent futtatásra, akkor gyakorlatilag bármit mérhetünk általa. Ha nem, akkor is tudunk jó pár kritikus információt megszerezni a monitorozandó eszközről.
E-nélkül az eszköz nélkül úgy érzem magam, mintha vakon kellene üzemeltetnem a rám bízott szervereket. Ebben a cikkben be fogom mutatni a zabbix telepítését docker alapon, egyszerűen azért, mert időt spórolunk vele, könnyebb lesz az üzemeltetése (ha nem tudod, mi az a docker, olvasd el ezt a cikkemet.
Milyen komponensekből áll a zabbix?
Az agya maga a zabbix szerver, ennek a működéséhez szükség van egy adatbázis szerverre, ami lehet MySQL/MariaDB vagy PostgreSQL. Én a MariaDB-t preferálom.
Szükség lesz még egy webes felületre, amin keresztül tudjuk konfigurálni, ebből válasszuk ugyanazt az adatbázist támogató változatot. A konténeres környezetben még azt is ki kell választanunk, hogy apache vagy nginx legyen a konténerben, én apache párti vagyok, ráadásul a konténer mérete is kisebb.
Ez a két alkalmazás már elég a kipróbáláshoz – amennyiben van már működő MySQL/MariaDB adatbázisunk -, ha nincs semmilyen DB-nk, ezt is futtathatjuk konténerben.
Hogy valódi adatokat is mérjünk, tegyük konténerbe a zabbix agentet is.
Én erre fogok példát mutatni, mert könnyebb elhagyni néhány sort, ha van adatbázisotok. Ám mégis azt javaslom, hogy dedikált DB-t használjon a zabbix, ugyanis ha az egyetlen DB leáll, nem fog tudni a zabbix jelezni, hiszen neki is kell DB a működéséhez. Ez sem teljesen igaz, ugyanis ha a DB nem elérhető (mert mondjuk lefagyott, vagy újraindították), akkor a zabbix küld egy értesítést a zabbix-adminisztrátor csoport minden tagjának, hogy „Zabbix is down”.
Ezek a legszükségesebb komponensei, ezeken kívül van még zabbix-proxy, zabbix-java-gateway, zabbix-snmp-traps is. Ezekről másik cikkben fogok beszélni.
A mai bemutatóhoz szükségünk lesz egy böngésző kliensre, és egy dockert futtató szerverre. Illetve a levelek továbbításához egy SMTP szerverre. Így néz ki demó topológia:
Megvan az elmélet, ideje telepíteni!
Ezen sorok írásakor a zabbix a 6.4.4-es verzión áll. Úgy írtam meg a docker-compose fájlt, hogy amikor Te kipróbálod, az akkor elérhető legfrissebb verziót töltse le a 6.4-es ágból. Tehát hozzunk létre egy mappát a gépünkön, mondjuk zabbix-server néven. Hozzunk létre benne egy docker-compose.yml nevű fájlt az alábbi tartalommal:
version: "3"
volumes:
DB:
services:
zabbix-server:
container_name: zabbix-server
image: zabbix/zabbix-server-mysql:alpine-6.4-latest
volumes:
- /etc/localtime:/etc/localtime:ro
ports:
- 10051:10051
restart: always
environment:
- DB_SERVER_HOST=zabbix-db
- DB_SERVER_PORT=3306
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=P@G*LCxUAU96L5oq
zabbix-web:
container_name: zabbix-web
image: zabbix/zabbix-web-apache-mysql:alpine-6.4-latest
volumes:
- /etc/localtime:/etc/localtime:ro
ports:
- 1088:8080
restart: always
environment:
- DB_SERVER_HOST=zabbix-db
- DB_SERVER_PORT=3306
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=P@G*LCxUAU96L5oq
- ZBX_SERVER_HOST=zabbix-server
- ZBX_SERVER_PORT=10051
- ZBX_SERVER_NAME=msandor.hu
- PHP_TZ=Europe/Budapest
zabbix-agent:
container_name: zabbix-agent
image: zabbix/zabbix-agent:alpine-6.4-latest
volumes:
- /etc/localtime:/etc/localtime:ro
restart: always
environment:
- ZBX_SERVER_HOST=zabbix-server
- ZBX_SERVER_PORT=10051
- ZBX_HOSTNAME=Zabbix server
zabbix-db:
container_name: zabbix-db
image: mariadb:10.6
volumes:
- DB:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
restart: always
command: mysqld --collation-server=utf8mb4_bin
environment:
- MYSQL_ROOT_PASSWORD=xQdr0iORWI8ZEY1F
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=P@G*LCxUAU96L5oq
Indítsuk el: $ sudo docker-compose up -d
(A leállításhoz ezt a parancsot kell kiadni: $ sudo docker-compose down
)
Ha érdekelnek a konténerek logjai, add ki ezt a parancsot: $ sudo docker-compose logs -f
(kilépés: CTRL+C), ha csak egy bizonyos konténer logja érdekel, pl a zabbix szerveré, akkor ezt a parancsot kell kiadnod: $ sudo docker logs -f zabbix-server
(kilépés: CTRL+C).
Az adatbázis jelszavakat nyugodtan megváltoztathatod, de akkor minden előfordulásánál! Nagyon fontos kiemelnem, hogy ha már létrejöttek a konténerek, és utólag változtatod meg a jelszavakat, akkor nem fog működni, mivel az adatbázis jelszavai első indításkor beállítódnak, utólag csak kézzel lehet. Első alkalommal letölti az összes lemezképet (konténert), mindből az elérhető legújabbat. Vegyük elő a böngészőt, és írjuk be a gépünk IP címét (ha másik gépen futtatjuk) és a 1088-as portot: http://192.168.5.250:1088/
Ha ezt a képernyőt látod, akkor minden rendben, csak be kell lépned az alapértelmezett felhasználónévvel: Admin, aminek a jelszava pedig: zabbix.
Megjegyzés: ha SSD van a gépedben, akkor néhány másodperc alatt elkészül a kezdeti adatbázis, ha csak sima HDD, akkor jóval tovább is eltarthat…
Első lépések a zabbix webes felületén
Belépés után ellenőrizzük a rendszer információs oldalt: http://192.168.5.250:1088/zabbix.php?action=report.status Elvileg ezt fogod látni:
Nos, a mellékelt ábra szerint minden rendben, fut a zabbixunk 😉
Az alap zabbix telepítés felveszi magát a zabbix servert is a hostok közé, ám 127.0.0.1-es IP címmel. Nos, ez konténeres környezetben nem lesz jó, ezért állítsuk át a képen látható módon (Data collection -> hosts -> zabbix server):
Írjuk be a DNS name mezőbe hogy zabbix-agent
, majd kattintsunk rá a DNS
gombra, végül mentsük el az update
gombbal. Mentés után visszatérünk a hosztok listájához, ahol még piros színű a ZBX ikonja, legfeljebb egy perc múlva – ha frissítjük az oldalt – be fog zöldülni.
Hogyan fog minket értesíteni a zabbix, ha váratlan esemény történik?
Állítsunk be egy média típust (alerts -> media types), a 39 változatból én a sima emailt fogom használni. Töltsük ki értelemszerűen, a saját SMTP szerverem nem igényel jelszavas hitelesítést, így 2 fontos (*-al jelölt) paraméter maradt, az SMTP szerver és az email cím, erről fognak kimenni a levelek:
Ja és persze ne felejtsük el engedélyezni (enabled
), majd ezt is mentsük el az update
gombbal. Mentés után aktívvá válik az email sor végén lévő Test
gomb, mi sem egyszerűbb, próbáljuk ki, írjuk be a send to
mezőbe a saját címünket, majd kattintsunk a Test
gombra. Ha hibát jelez, nézd át a beállításokat!
A következő lépés az alerts actions menüjének trigger actions menüpontja lesz. Gyárilag úgy van beállítva, hogy Zabbix administrators
csoport tagjai kapnak minden értesítést (nincs is még más felhasználó a guest kivételével, erről később), szóval kattintsunk a Disabled
linkre. Egy megerősítést fog várni.
Már csak egy dolog maradt hátra, be kell állítani az Admin felhasználónak az e-mail címünket. Menjünk a bal szélső sávon az user settings -> profile
menüre. Azon belül a médiára. Kattintsunk az add
-ra, írjuk be a címünket, majd a szokásos update -> update
🙂
Teszteljük! Állítsuk le a zabbix-agent konténert.
$ sudo docker stop zabbix-agent
Pár percen belül kapni fogsz egy ehhez hasonló e-mailt:
Amit a zabbix is mutat a kedvenc menü pontomban (ezt nézem 99%-ban): monitoring -> problems
:
Kicsit csaltam, eltüntettem a szűrőket
(katt a problems szó alatti szűrő ikonra). Most indítsuk el zabbix-agentet ($ sudo docker start zabbix-agent
). Egy percen belül be fog zöldülni a státusza, és PROBLEM
-ről RESOLVED
-re fog változni.
Némi magyarázat erről a képernyőről. Itt csak a hibákat látjuk, mert ha valami megjavult, akkor 5 perc múlva el fog tűnni (ez is átállítható). Egy valódi szerver esetén nem jellemző, hogy változik a szerver host neve, de konténerek esetén minden indításkor más más generált azonosítót fog kapni, ezért mutatja hibának az alsó sorban a zabbix server hostnál a hoszt név változást. Ez is el fog tűnni, mivel ez nem klasszikus hiba, csak ennek jóval ritkább az újraolvasási időzítője (gyárilag óránként ellenőrzi).
A 2. kedvenc oldalam a dashboard, ez látszik gyárilag, itt minden testre szabható:
Megjegyzés: ha a saját gépeden futtatod, akkor minden linket cserélj le localhostra, ha másik gépen, akkor annak az IP címét írd be az én 192.168.5.250-es IP címem helyett. Természetesen, ha a port számot módosítod a docker-compose.yml fájlban, akkor azt is cseréld le a böngészőben.
Mit lehet még a hibákon kívül nézni?
Vannak előre készített grafikonok is, természetesen sajátot is készíthetünk, vegyük elő a zabbix szerverünk grafikonjait. Az iménti dashboard képernyőn kattintsunk a zabbix server
linkre, és ott válasszuk ki a graphs
menüpontot. Nálam 161 grafikont hozott fel, aminek nagy része baromság, ez abból adódik, hogy konténerben fut a zabbix agent is. Én a valóságban a zabbix agentet minden esetben natívan telepítem.
Tehát, például az /etc/localtime
, az /etc/resolv.conf
, az /etc/hostname
és az /etc/hosts
a konténer technológiából fakadó fájlrendszer, „rendes” szerveren ilyenek nem lesznek. Emiatt minden grafikon, ami erre épül, csak ebben a környezetben látható.
Más úton is el lehet jutni az adatokhoz, menjünk a Monitoring -> Latest data
linkre, és mondjuk válasszuk ki a szűrők közül a cpu
-t. Nálam 17 sorra szűkült:
Minden sor jobb szélén van egy Graph
link, az megmutatja a választott grafikont. Nézzük például ezt: Zabbix server: Linux: Load average (1m avg)
Alapból az utolsó egy óra adataiból rajzol grafikont, amit tetszőlegesen meg lehet változtatni az előre elkészített linkek segítségével, sőt, az egérrel lehet egy tartományt kijelölni, amire rá fog zoomolni. Vagy egyedi időpontokat is ki lehet választani a From
: és a To
: mező segítségével.
Hogyan tudok új gépeket felvenni monitorozásra?
Tételezzük fel, hogy a 2. szerverünk is Linuxos 😉
Kattintsunk a Data collection -> hosts -> zabbix server
-re, kattintsunk a Clone
gombra, írjuk át a Host name
mezőt, az IP
címet vagy DNS name
mezőt (attól függően, hogy szeretnénk használni), ha mindent módosítottunk, az Update
gombbal mentsük el. Mivel az új host nem zabbix szerver, így a Templates
-ek közül töröljük ki a Zabbix server health
templatet az unlink
-re kattintva. Nálam ez így fest:
Vegyünk fel egy olyan hostot, amire nem lehet zabbix agentet telepíteni, pl egy nyomtatót:
Jobb híján csak a pingelni fogjuk, de ez is elég az esetek 99,9%-ban egy olyan eszközről, amire nincs lehetőség agentet telepíteni.
Összefoglalás
Egy olyan gépen, ahol már fut a docker, egy fájl létrehozásával percek alatt ki lehet építeni a zabbix szervert, és pár kattintással testre is lehet szabni. 15 éve használok aktívan zabbixot, annyi új funkciót belezsúfoltak, hogy időm se volt kipróbálni.
A verziókról sem beszéltem eddig. A zabbixból két féle érhető el, a hosszú ideig (5 évig) támogatott LTS verziók, pl a 4.0.x, az 5.0.x és a 6.0.x-es verziók. Illetve vannak a köztes változatok, mint a most bemutatott 6.4.x-es változat, ezt fél évig támogatják. Új kiadás fél évente jelenik meg, LTS verzió pedig másfél évente. Bővebb infó a weboldalukon.
Céges környezetben való használatra kizárólag az LTS verziót ajánlom, most kivételesen azért mutattam be a 6.4.4-es verziót, mert a hamarosan megjelenő (2-3 hónap múlva) 7.0-s LTS kinézete ezt fogja örökölni nagy eséllyel. Ha szeretnénk kipróbálni az újdonságokat, akkor a docker segítségével akár ugyanazon a gépen is tudjuk futtatni a másik zabbixunkat, csak arra kell ügyelnünk, hogy a port számokat változtassuk meg, különben nem fog elindulni port ütközés miatt.
Ha az időm engedni fogja, írok még a zabbixról, sok dolgot nem érintettünk.
Update (2023.07.28.): nemrég kipróbáltam a 7.0.0alpha3 verziót, jól tippeltem, pont úgy néz ki, mint a 6.4-es verzió 😉 Elsőre nem látok közöttük semmilyen különbséget, persze ez csak a felszín, a weboldaluk szerint akad bőven változás.