Sok minden történhet, amikor egy felhasználó egy weboldalra lép. Még az is előfordul, hogy a felhasználói kérések nem érik el a kiszolgálót, ami esetleg azt a hamis pozitív jelzést adja, hogy minden rendben van. Régen elmúltak már azok az idők, amikor egy weboldal csak egy szervert használt. A mai elosztott világban sok szerver áll egy terheléselosztó mögött, amely elosztja a webhely felhasználói terhelését.
Honnan tudhatja tehát, hogy minden zökkenőmentesen működik-e a felhasználók és a szerverek között? A terheléselosztók és az olyan proxy-kiszolgálók, mint a HAProxy által kibocsátott naplók más perspektívát adnak. Ezekből megtudhatja például, hogy mennyi időt vesznek igénybe a felhasználói kérések, és hány kérés sikertelen. Ez az információ értékes, és több támpontot adhat, amikor éles környezetben orvosolja az incidenseket.
A mai bejegyzésben röviden ismertetem, hogyan működik a naplózás a HAProxyban, hogyan működik a naplózás konfigurálása, hogyan kell feldolgozni a naplókat, és hogyan kerülheti el, hogy a nagyméretű naplófájlok miatt kifogyjon a tárhely a szerverein.
Hogyan működik a naplózás a HAProxyban?
A HAProxy telepítésekor beállíthatja, hogyan szeretne dolgozni az eszköz által rögzített naplókkal. Beállíthatja például, hogy a HAProxy egyszerre küldjön naplókat különböző helyekre. Lehet, hogy az egyik csapatnak valós időben kell megkapnia a naplókat, egy másik pedig a naplókat egy múltbeli tendencia azonosítására használhatja. Alternatív megoldásként egyszerűen más helyre, például egy központosított naplótárolási megoldáshoz hasonlóan máshová szeretné áthelyezni a naplókat.
Típusosan, amikor egy eszköz naplózását konfigurálja, a naplókat egy helyi lemezen szeretné rögzíteni. Egy olyan forgatókönyvben azonban, ahol sok naplóírási művelet lesz, ez kontraproduktív lehet. A teljesítmény romolhat, és előfordulhat, hogy a naplók egy része kimarad. A HAProxy alapértelmezés szerint úgy van konfigurálva, hogy a naplókat egy foglalatba írja, mivel ez gyorsabb, mint a naplók hálózaton keresztül történő elküldése vagy a közvetlen fájlba írás.
A HAProxy dokumentációjában van egy szakasz, amely részletesebben foglalkozik a naplózással. Ha már megismerte az alapokat ebből a bejegyzésből, gyorsan elmélyedhet más témákban, például a cookie-k vagy a HTTP fejlécek rögzítésében. Még azt is beállíthatja, hogy milyen típusú vagy terjedelmű naplókat szeretne látni.
Ha még nem tette meg, telepítse a HAProxy-t. Ubuntuban ezt így teheti meg:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Naplózás konfigurálása Sysloghoz
A HAProxy konfigurációs fájlban alapértelmezés szerint két szakasz van: a globális és az alapértelmezett. A globális szakaszban olyan alacsony szintű funkciókat konfigurálhat, mint a biztonság, a teljesítmény és a naplózási célpontok. A defaults szakaszban vannak azok a beállítások, amelyek az összes többi alábbi proxy-szekcióra, például a front endre és a back endre vonatkoznak. A cél az ismétlések elkerülése. A HAProxy weboldalán található bejegyzés részletesebben ismerteti az egyes szakaszokat, de esetünkben a globális és a defaults szakaszok elegendőek.
Az alapértelmezett konfigurációs fájlban (/etc/haproxy/haproxy.cfg) valami ilyesmi van a naplózáshoz:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Ha megnézzük a “/dev/log/” könyvtárat, akkor egy szimbolikus linket látunk a systemd naplójára, ami azt jelenti, hogy a naplókat a syslogba küldjük:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
A legújabb verziók, mint az Ubuntu 18.04, már telepítve van az rsyslog. Ellenkező esetben a “sudo apt install -y rsyslog” parancs futtatásával kell telepítenie a szerverén. Ezután nézd meg a konfigurációt az rsyslog mappában. Az én esetemben így néz ki:
ls -la /etc/rsyslog.d/total 24drwxr-xr-x 2 root root 4096 Aug 21 22:41 .drwxr-xr-x 90 root root 4096 Aug 21 22:41 ..-rw-r--r-- 1 root root 314 Aug 15 2017 20-ufw.conf-rw-r--r-- 1 root root 255 Jun 3 02:08 21-cloudinit.conf-rw-r--r-- 1 root root 282 Jun 22 08:41 49-haproxy.conf-rw-r--r-- 1 root root 1124 Jan 30 2018 50-default.conf
Nézd meg, hogy van egy “49-haproxy.conf” nevű fájl, ahol a HAProxy naplózás konfigurációja található. Ha nem lát ilyen fájlt, hozza létre. Itt van az alapértelmezett tartalom:
$ cat /etc/rsyslog.d/49-haproxy.conf# Create an additional socket in haproxy's chroot in order to allow logging via# /dev/log to chroot'ed HAProxy processes$AddUnixListenSocket /var/lib/haproxy/dev/log# Send HAProxy messages to a dedicated logfileif $programname startswith 'haproxy' then /var/log/haproxy.log&~
Láthatod, hogy a naplófájlok a /var/log/haproxy.log fájlba fognak íródni. Onnan már a te feladatod, hogy csinálj valamit ezekkel a naplókkal. Előfordulhat azonban, hogy újra kell indítanod az rsyslogot és a HAProxy-t, mielőtt láthatsz néhány naplót. Ezt a következő parancsok futtatásával teheti meg:
sudo service rsyslog restartsudo service haproxy restart
Mindenesetre legalább néhány kezdeti naplót látnia kell, így:
$ cat /var/log/haproxy.logAug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Exiting Master process...Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Current worker 1815 exited with code 143Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : All workers exited. Exiting... (143)
Most, hogy vannak naplófájlok, itt az ideje, hogy csináljon velük valamit. Nem számít, hogy milyen eszközt használsz a haproxy.log fájlból származó naplófájlok feldolgozására. Választhat például egy olyan eszközt, mint a SolarWinds® Loggly®, amelynek van egy ügynöke is a naplók feldolgozására és automatikus elküldésére a Loggly-nak.
Back-End szerverek konfigurálása
Ha szeretné kipróbálni, hogyan működik a naplózás alapértelmezés szerint, ha több proxyt ad hozzá, akkor ezt megteheti, ha a haproxy végéhez hozzáad egy olyan konfigurációt, mint a következő.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
A “Your-Webserver1-IP” és “Your-Webserver2-IP” helyett a forgalmat átirányítani kívánt szerverek IP-címét írja be. Mentse a módosításokat, és indítsa újra a HAProxy szolgáltatást. Vegye észre, hogy a back-end proxy szakaszban nem kellett naplózási konfigurációt megadnunk. Most már képesnek kell lennie arra, hogy a HAProxy-n keresztül forgalmat küldjön ezekre a back-end szerverekre, és a naplók automatikusan a haproxy.log fájlba kerülnek.
Rotate Logs With Logrotate
Végül, mint jó polgároknak, gondoskodnunk kell arról, hogy a haproxy.log ne eméssze fel az összes szervertárolót. Ehhez használhatjuk a logrotate-ot. Az én esetemben alapértelmezetten telepítve van, de a következő paranccsal is telepítheted:
sudo apt-get install logrotate
Ezután egy olyan konfigurációs fájlod lesz, mint a következő a haproxy.log fájl megtisztításához és tömörítéséhez:
cat /etc/logrotate.d/haproxy/var/log/haproxy.log { daily rotate 52 missingok notifempty compress delaycompress postrotate invoke-rc.d rsyslog rotate >/dev/null 2>&1 || true endscript}
A fenti konfiguráció használata esetén a logrotate minden nap alkalmazni fogja ezt a szabályt, megtartva minden 52 napos vagy újabb naplót. A rotált fájlokat gzip formátumba is tömöríti. Nem kell aggódnia amiatt, hogy túl sok naplófájl van a szerveren – a logrotate eltávolítja a régebbi fájlokat. Ezzel az egyszerű beállítással elkerülheti, hogy az éjszaka közepén fel kelljen ébrednie a naplók eltávolításához. Remekül hangzik, igaz?
Hogy megbizonyosodjon arról, hogy a konfiguráció működik, indítsa újra a HAProxy-t és az rsyslogot:
sudo service rsyslog restartsudo service haproxy restart
Következtetés
A HAProxy által biztosított naplózási opcióknak csak a felszínét karcoltam. Folytathatod a hivatalos dokumentációban. Van egy kiváló bejegyzés a HAProxy blogon is, amely mélyebben belemegy abba, hogyan lehet megváltoztatni a naplózás formátumát, és még abba is, hogyan lehet profiling metrikákat kapni.
Megjegyzem, hogy egy Ubuntu 18.04-es szervert használtam az AWS-ben, és az itt tárgyalt konfigurációk többsége alapértelmezés szerint ott van. Nem minden szerver lesz így, de legalább most már tudod, hogyan működik a naplózás a HAProxyban, és hol vannak ezek a konfigurációk, így szükség esetén módosíthatod őket. Boldog naplózást!