Használata opcionális. Nagy kiterjedésű hálózatoknál csökkenti a zabbix szerverre eső terhelést. Ha több telephelyed van, egyenesen kötelező minden telephelyre egy-egy zabbix proxyt telepíteni. A kliensek a beállított proxyhoz csatlakoznak, nekik küldik el a mért adatokat. A proxyk pedig továbbítják a szervernek.
Hogyan működik az adatok lekérése egy távoli szerverről?
- a zabbix szerver átadja a proxyjainak a monitorozandó kliensek listáját, és a kliensektől várt adatok listáját (ez gyárilag óránként zajlik le, ami természetesen módosítható)
- a proxyk lementik a saját adatbázisukba a listákat
- a proxyk az ütemezésnek megfelelően kérdezgetik a rájuk bízott hosztokat
- a hosztokon futó zabbix agent elküldi a proxynak a mérés eredményét
- a proxy tárolja a fogadott eredményt, majd elküldi a szervernek
Másképpen fogalmazva ez egy soros lánc: zabbix szerver <-> zabbix proxy <-> zabbix agent
Mik az előnyei a zabbix proxy használatának?
A teljesség igénye nélkül:
- csökkenti a zabbix szerver terhelését
- a szerver és a proxy közötti hálózati hiba esetén tárolja a mért adatokat, így nincs elveszett adat
- természetesen, ha mondjuk frissítés miatt leállítjuk a zabbix szervert, akkor is tárolja a mért adatokat
- egyszerűsíti a tűzfal beállításokat, elég a szerver és a proxy közötti kapcsolatot engedélyezni
Mik a hátrányai a zabbix proxy használatának?
Bárhogy töröm a fejem, csak két dolog jut eszembe:
- ha a szerver és a proxy között hálózati hiba áll fenn, a szerver nem fog tudni a hiba alatt bekövetkezett eseményekről, bár utólag természetesen megkapja az adatokat
- ha leállítjuk a proxyt (pl frissítés miatt), vagy ha megsérül a proxy adatbázisa, akkor minden olyan adatot bukunk, amit ez a proxy monitoroz
Ki tudjuk küszöbölni a hátrányát?
Részben igen.
Azt javaslom, hogy a proxykra is telepítsünk zabbix agentet, amiket közvetlenül a szerver monitorozzon, így hálózati hiba esetén a szerver tudni fogja, hogy baj van.
Térjünk át a gyakorlatra
A legegyszerűbb, ha a proxyt is konténerben futtatjuk. Szüksége lesz egy adatbázisra is, kis hálózatoknál bőven elég az egyszerű noSQL. Gyakorlatilag nincs vele semmi dolgunk, a konténer első indításakor magától létrejön.
Hozzunk létre egy docker-compose.yml fájlt az alábbi tartalommal:
version: "2"
volumes:
ZBXPROXY_DB:
ZBXPROXY_SNMPTRAPS:
ZBXPROXY_SECRETS:
services:
zabbix-proxy:
container_name: zabbix-proxy
image: zabbix/zabbix-proxy-sqlite3:alpine-6.4-latest
volumes:
- /etc/localtime:/etc/localtime:ro
- ZBXPROXY_DB:/var/lib/zabbix/db_data
- ZBXPROXY_SNMPTRAPS:/var/lib/zabbix/snmptraps
- ZBXPROXY_SECRETS:/var/lib/zabbix/enc
ports:
- 10051:10051
restart: always
environment:
- ZBX_SERVER_HOST=192.168.56.6
- ZBX_SERVER_PORT=10051
- ZBX_HOSTNAME=proxy1
- ZBX_CONFIGFREQUENCY=300
- ZBX_TLSCONNECT=psk
- ZBX_TLSPSKFILE=/var/lib/zabbix/enc/zabbix.psk
- ZBX_TLSPSKIDENTITY=proxy1
Némi magyarázat:
- ez a konfiguráció tökéletesen illeszkedik a korábbi cikkeimben bemutatott demó környezethez
- ennek a proxynak ‘proxy1’ lesz a neve, ezzel azonosítja magát a szerver felé
- 300 másodpercenként kéri le a szervertől az inventoryt (a hosztok és a mért adatok listáját)
- előre be van állítva a PSK mód, ezt erősen javaslom, ha a szerver és a proxy nem egy hálózatban található
Indítsuk el a konténert, hogy létrehozza a VOLUME-okat: $ docker compose docker-compose.yml up -d
Amint visszakapjuk a promptot, le is állíthatjuk: $ docker-compose -f docker-compose.yml down
Generáljunk egy kulcsot a proxynak: $ psktool -u proxy1 -p zabbix.psk -s 32
Keressük meg a ‘ZBXPROXY_SECRETS’ volume fizikai helyét a szerveren: $ docker volume inspect $(docker volume ls | grep ZBXPROXY_SECRETS | awk '{print $2}') | grep Mountpoint | awk -F"\"" '{print $4}'
Ez tipikus esetben itt található (ha nem költöztettétek el a dockert, nálatok is ezt fogja kidobni):
/var/lib/docker/volumes/zabbixproxy_ZBXPROXY_SECRETS/_data
Root felhasználóval hozzuk létre a zabbix.psk fájlt ebben a mappában a korábban létrehozott kulccsal: 977b74008c40fed130a410074df64a4fafd7244b64e163ec86a77e0e49323dbd
Kész is vagyunk, indíthatjuk is a proxyt: $ docker compose docker-compose.yml up -d
Félig megvagyunk, de ezt még a zabbix szerveren is be kell állítani. Nyissuk meg a zabbix weboldalát, azon belül pedig az Administration -> Proxies oldalt. Kattintsunk a jobb felső sarokban található „Create proxy” gombra.
Töltsük ki a két fület a képeken látható módon (a Proxy address mezőbe a saját proxy-d címét írd be):
Az „Add” gombra kattintva mentsük el.
Ha nem rontottunk el semmit, ezt kell látnunk mentés után:
Létrejött a titkosított kapcsolat a zabbix szerver és a proxy1 nevű zabbix proxy között, ám ahogy a képen is látszik, hosztok még nincsenek rákötve. Az egyszerűség kedvéért állítsuk át az egyik hosztot (pl az smtp szervert), hogy a jövőben a proxy1 nevű zabbix proxy fogja monitorozni:
Update után máris látszik a változás a Proxies oldalon:
Ennyi, kész vagyunk, működik az első zabbix proxynk!
Ui: ha zabbix agentet futtató gépet kötünk rá a zabbix proxyra, ne felejtsük el, hogy a kérdéses gépek zabbix-agentd.conf fájljában már nem a zabbix szerver IP címét kell megadni, hanem a zabbix proxy címét (Server=
).