Monia asioita voi tapahtua, kun käyttäjä saapuu verkkosivustolle. On jopa tilanteita, joissa käyttäjän pyynnöt eivät saavuta palvelinta, mikä saattaa antaa väärän positiivisen tuloksen, jonka mukaan kaikki on kunnossa. Kaukana ovat ne ajat, jolloin verkkosivusto käytti vain yhtä palvelinta. Nykyisessä hajautetussa maailmassa kuormantasaajan takana on monia palvelimia, jotka jakavat verkkosivuston käyttäjäkuorman.
Miten voit siis tietää, toimiiko kaikki sujuvasti käyttäjien ja palvelinten välillä? Kuormantasaajien ja HAProxyn kaltaisten välityspalvelinten lähettämät lokit antavat sinulle toisenlaisen näkökulman. Ne voivat esimerkiksi kertoa, kuinka paljon aikaa käyttäjien pyynnöt vievät ja kuinka monta pyyntöä epäonnistuu. Nämä tiedot ovat arvokkaita, ja ne voivat antaa sinulle lisää vihjeitä, kun korjaat häiriöitä live-ympäristössä.
Tämän päivän postauksessa selitän lyhyesti, miten lokitiedostojen kirjaaminen toimii HAProxyssa, miten lokien konfigurointi toimii, miten lokitiedostoja käsitellään ja miten vältät tallennustilan loppumisen palvelimiltasi suurten lokitiedostojen koon vuoksi.
Miten lokitus toimii HAProxyssa?
Kun asennat HAProxyn, voit määrittää, miten haluat käsitellä tämän työkalun tallentamia lokeja. Voit esimerkiksi määrittää HAProxyn lähettämään lokit samanaikaisesti eri paikkoihin. Ehkä yksi tiimi tarvitsee lokit reaaliajassa ja toinen voi käyttää lokeja historiallisen trendin tunnistamiseen. Vaihtoehtoisesti voit yksinkertaisesti haluta siirtää lokit eri paikkaan, kuten keskitettyyn lokitallennusratkaisuun.
Tyypillisesti, kun työkalun lokitusta määritetään, lokit halutaan tallentaa paikalliselle levylle. Skenaariossa, jossa lokien kirjoitusoperaatioita tulee olemaan paljon, tämä voi kuitenkin olla haitallista. Suorituskyky saattaa heikentyä, ja osa lokitiedostoista saattaa jäädä saamatta. HAProxy on oletusarvoisesti konfiguroitu niin, että lokit kirjoitetaan socketiin, koska se on nopeampaa kuin lokien lähettäminen verkon yli tai kirjoittaminen suoraan tiedostoon.
HAProxyn dokumentaatiossa on osio, joka käsittelee lokien kirjaamista tarkemmin. Kun sinulla on perusteet tästä viestistä, voit nopeasti sukeltaa syvemmälle muihin aiheisiin, kuten evästeiden tai HTTP-otsakkeiden kaappaamiseen. Voit jopa määrittää haluamiesi lokien tyypin tai sanamäärän.
Jos et ole vielä tehnyt sitä, asenna HAProxy. Ubuntussa voit tehdä sen näin:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Loggauksen määrittäminen Syslogia varten
HAProxyn konfigurointitiedostossa on oletusarvoisesti kaksi osiota: global ja defaults. Globaalissa osiossa määritetään matalan tason ominaisuuksia, kuten tietoturva, suorituskyky ja kirjauskohteet. Oletusasetukset-osiossa on asetuksia, jotka koskevat kaikkia muita alla olevia välityspalvelimen osioita, kuten etu- ja takapäätä. Tavoitteena on välttää toistoa. HAProxy-sivuston postauksessa kerrotaan tarkemmin kustakin osiosta, mutta meidän tapauksessamme globaali- ja defaults-osiot riittävät.
Vakiokokoonpanotiedostossa (/etc/haproxy/haproxy.cfg) on jotain tällaista lokitusta varten:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Kun katsot hakemistoa ”/dev/log/”, näet symbolisen linkin systemd:n journaliin, mikä tarkoittaa, että lokit lähetetään syslogiin:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Uudemmissa versioissa, kuten Ubuntu 18.04:ssä, on rsyslog asennettuna. Muussa tapauksessa sinun on asennettava se suorittamalla komento ”sudo apt install -y rsyslog” palvelimellasi. Tutustu sitten rsyslog-kansiossa olevaan konfiguraatioon. Minun tapauksessani se näyttää tältä:
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
Huomaa, että siellä on tiedosto nimellä ”49-haproxy.conf”, jossa on HAProxy-loggauksen konfiguraatio. Jos et näe tällaista tiedostoa, luo se. Tässä on oletussisältö:
$ 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&~
Voit nähdä, että lokit kirjoitetaan tiedostoon /var/log/haproxy.log. Siitä eteenpäin on sinun tehtäväsi tehdä jotain näille lokeille. Saatat kuitenkin joutua käynnistämään rsyslogin ja HAProxyn uudelleen, ennen kuin näet jotkin lokit. Voit tehdä tämän suorittamalla seuraavat komennot:
sudo service rsyslog restartsudo service haproxy restart
Sinun pitäisi nähdä ainakin joitain alustavia lokeja näin:
$ 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)
Nyt kun sinulla on lokit, on aika tehdä niille jotain. Sillä ei ole väliä, mitä työkalua käytät haproxy.log-tiedoston lokien käsittelyyn. Voit valita esimerkiksi SolarWinds® Loggly®:n kaltaisen työkalun, jossa on myös agentti, joka käsittelee lokit ja lähettää ne automaattisesti Logglyyn.
Takapalvelimien konfigurointi
Jos haluat kokeilla, miten lokien kirjaaminen toimii oletusarvoisesti, kun lisäät lisää välityspalvelimia, voit tehdä sen lisäämällä haproxyn loppuun seuraavan kaltaisen konfiguraation.conf-tiedosto:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Korvaa ”Your-Webserver1-IP” ja ”Your-Webserver2-IP” niiden palvelimien IP-osoitteilla, joihin haluat ohjata liikenteen. Tallenna muutokset ja käynnistä HAProxy-palvelu uudelleen. Huomaa, että meidän ei tarvinnut sisällyttää mitään lokitusmäärityksiä back-end proxy -osioon. Sinun pitäisi nyt pystyä lähettämään liikennettä näille back-end-palvelimille HAProxyn kautta, ja lokit menevät automaattisesti haproxy.log-tiedostoon.
Rotate Logs With Logrotate
Loppujen lopuksi, kunnon kansalaisina, meidän on varmistettava, ettei haproxy.log syö kaikkea palvelimen tallennustilaa. Tähän voit käyttää logrotatea. Minun tapauksessani se on asennettu oletusarvoisesti, mutta voit asentaa sen seuraavalla komennolla:
sudo apt-get install logrotate
Tällöin sinulla on seuraavan kaltainen konfigurointitiedosto, joka siivoaa ja pakkaa haproxy.log-tiedoston:
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}
Kun käytät yllä olevaa konfigurointia, logrotate soveltaa tätä sääntöä joka päivä pitäen tallessa kaikki lokit, jotka ovat 52 päivää vanhoja tai uudempia. Se myös pakkaa pyöritetyt tiedostot gzip-muotoon. Sinun ei tarvitse huolehtia siitä, että palvelimella on liikaa lokitiedostoja – logrotate poistaa kaikki vanhemmat tiedostot puolestasi. Käyttämällä tätä yksinkertaista asetusta voit välttää heräämisen keskellä yötä lokien poistamiseksi. Kuulostaa hyvältä, eikö niin?
Varmistaaksesi, että konfiguraatio toimii, käynnistä HAProxy ja rsyslog uudelleen:
sudo service rsyslog restartsudo service haproxy restart
Johtopäätös
Raapaisin vasta pintaa HAProxyn tarjoamista lokivaihtoehdoista. Voit jatkaa tutustumista viralliseen dokumentaatioon. HAProxy-blogissa on myös erinomainen postaus, jossa käydään syvällisemmin läpi, miten muuttaa lokien muotoa ja jopa miten saada profilointimittareita.
Huomaa, että käytin Ubuntu 18.04 -palvelinta AWS:ssä, ja suurin osa tässä käsittelemistäni määrityksistä on siellä oletuksena. Kaikki palvelimet eivät tule näin, mutta ainakin nyt tiedät, miten lokitus toimii HAProxyssa ja missä nämä määritykset ovat, jotta voit muuttaa niitä tarvittaessa. Hyvää loggausta!