Hogyan konfiguráljuk a HAProxy naplózását Rsysloggal a CentOS 8 rendszeren [Gyorstalpaló]

Bevezetés

A HAProxy, ami a High Availability Proxy rövidítése, egy széles körben használt TCP és HTTP alapú proxykiszolgáló, amely Linux, Solaris és FreeBSD rendszereken fut. Alkalmazások terheléskiegyenlítésére használják a kérések több kiszolgáló között történő elosztásával, valamint annak biztosítására, hogy az alkalmazások nagymértékben elérhetőek legyenek a felhasználók számára.

A CentOS 8 számos telepítésénél a HAProxy alapértelmezés szerint nincs úgy beállítva, hogy a napló kimenetét fájlba írja. Ez a gyorstalpaló bemutató elmagyarázza, hogyan konfigurálhatjuk a HAProxy naplózását az Rsysloggal egy Unix tartományi aljzat használatával a megbízhatóság, a sebesség és a biztonság érdekében.

Előfeltételek

A bemutató elvégzéséhez szükségünk lesz egy CentOS 8 rendszert futtató kiszolgálóra. A kiszolgálónak rendelkeznie kell egy rendszergazdai jogosultságokkal rendelkező, nem root felhasználóval. Ennek beállításához kövesse a CentOS 8 kezdeti szerverbeállítási útmutatóját.

1. lépés – A HAProxy telepítése és engedélyezése

A HAProxy telepítéséhez futtassa a következő dnf parancsot:

  • sudo dnf install haproxy

Amikor a Is this ok : kérés megjelenik, írja be y és nyomja meg a RETURN gombot a csomag telepítéséhez.

Amikor telepítette a HAProxy-t, engedélyezze és indítsa el a systemctl paranccsal:

  • sudo systemctl enable haproxy.service

A következő kimenetet kell kapnia:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/haproxy.service → /usr/lib/systemd/system/haproxy.service.

Mivel a HAProxy szolgáltatás most engedélyezve van, elindíthatja, hogy megbizonyosodjon arról, hogy alapértelmezett konfigurációval fut a kiszolgálón:

  • sudo systemctl start haproxy.service

Következő lépésként vizsgálja meg a HAProxy állapotát, hogy megbizonyosodjon arról, hogy fut:

  • sudo systemctl status haproxy.service

A következő kimenetet kell kapnia. Figyelje meg a kimenet kiemelt active (running) részét. Ha a kiszolgálója ugyanezt a kiemelt részt mutatja, akkor a HAProxy helyesen fut a kiszolgálón, és folytathatja a naplózás konfigurálását.

Output
● haproxy.service - HAProxy Load Balancer Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-09-09 21:16:39 UTC; 4min 39s ago Process: 21340 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS) Main PID: 21341 (haproxy) Tasks: 2 (limit: 2881) Memory: 2.7M CGroup: /system.slice/haproxy.service ├─21341 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid. . .

Ha a kimenete más, vagy az állapot valami olyasmit mutat, mint Active: failed, akkor kövesse a HAProxy gyakori hibáinak hibaelhárítása című útmutató hibaelhárítási lépéseit, hogy meghatározza, mi akadályozza a HAProxy helyes indítását.

Ha megerősítette, hogy a HAProxy engedélyezve van és fut, akkor folytathatja a következő lépéssel, amely a HAProxy naplózási direktíváinak konfigurálása.

2. lépés – A HAProxy naplózási direktívák konfigurálása

A HAProxy naplózási direktíváinak konfigurálásához nyissa meg a /etc/haproxy/haproxy.cfg programot a vi vagy a kívánt szerkesztőprogramban:

  • sudo vi /etc/haproxy/haproxy.cfg

Nyomja meg a i gombot a INSERT módba való váltáshoz, majd keresse meg a log 127.0.0.1 local2 sort, és kommentálja ki a sor elejére egy # karakter hozzáadásával, ahogy a következő példában kiemeltük:

/etc/haproxy/haproxy.cfg
. . .# 2) configure local2 events to go to the /var/log/haproxy.log# file. A line like the following can be added to# /etc/sysconfig/syslog## local2.* /var/log/haproxy.log# #log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid. . .

Ezután adjunk hozzá egy sort közvetlenül a kikommentált sor után a következő tartalommal:

 log /dev/log local0

A teljes /etc/haproxy/haproxy.cfg szakasznak, amelyet szerkesztettünk, a következő sorokat kell tartalmaznia:

/etc/haproxy/haproxy.cfg
. . .# local2.* /var/log/haproxy.log# #log 127.0.0.1 local2 log /dev/log local0 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid. . .

A chroot sor azért fontos, mert ez korlátozza a HAProxy folyamatot arra, hogy csak a /var/lib/haproxy könyvtárban lévő fájlokhoz férjen hozzá. A log /dev/log local0 sor létrehoz egy fájlt ebben a könyvtárban, amelyből az Rsyslog naplóbejegyzéseket fog gyűjteni.

Mihelyt befejezte a /etc/haproxy/haproxy.cfg log sorok szerkesztését, mentse és zárja be a fájlt a ESC gomb megnyomásával, majd írja be a :wq és a ENTER gomb megnyomásával.

Az utolsó lépés, amit ebben a szakaszban el kell végeznie, a /var/lib/haproxy/dev könyvtár létrehozása, mivel alapértelmezés szerint nem létezik.

Hozza létre a könyvtárat a mkdir paranccsal, majd indítsa újra a HAProxy-t:

  • sudo mkdir /var/lib/haproxy/dev
  • sudo systemctl restart haproxy.service

Most már úgy konfigurálta a HAProxy-t, hogy a naplóit a /var/lib/haproxy/dev/log-ban található Unix tartományi foglalatba küldje. A következő lépésben az Rsyslogot konfigurálja a socket létrehozására és elérésére.

3. lépés – Az Rsyslog konfigurálása a HAProxy naplók gyűjtésére

A CentOS 8 rendszerben a Rsyslog alapértelmezett konfigurációja nem kezeli a HAProxy naplókat. A HAProxy szolgáltatás naplóinak összegyűjtéséhez nyisson egy új /etc/rsyslog.d/99-haproxy.conf fájlt a vi vagy az Ön által preferált szerkesztőprogrammal:

  • sudo vi /etc/rsyslog.d/99-haproxy.conf

Nyomja meg a i gombot a INSERT módba való váltáshoz, majd illessze be a következő sorokat a fájlba:

/etc/rsyslog.d/99-haproxy.conf
$AddUnixListenSocket /var/lib/haproxy/dev/log# Send HAProxy messages to a dedicated logfile:programname, startswith, "haproxy" { /var/log/haproxy.log stop}

A $AddUnixListenSocket utasítás arra utasítja az Rsyslogot, hogy hozzon létre egy Unix tartományi foglalatot a megadott helyen, ebben az esetben a /var/lib/haproxy/dev/log-ban. A :programname, startswith, "haproxy" szakasz megadja azt a fájlt, ahová az Rsyslog a socketből begyűjtött naplóbejegyzéseket írja.

Amikor befejezte a /etc/rsyslog.d/99-haproxy.conf szerkesztését, mentse és zárja le a fájlt a ESC gomb megnyomásával, majd írja be a :wq és a ENTER gomb megnyomásával.

Most beállította az Rsyslogot, hogy a /var/lib/haproxy/dev/log-ban lévő Unix tartományi socketből olvassa a naplóbejegyzéseket, és a /var/log/haproxy.log-ban lévő naplófájlba írja azokat.

Az Rsyslog újraindítása előtt azonban meg kell határoznia, hogy a SELinux érvényesíti-e a hozzáférés-szabályozást a CentOS 8 rendszerén.

A SELinux aktuális házirendjének ellenőrzéséhez futtassa a következőket:

  • getenforce

A következő kimenetek egyikét fogja kapni:

  • Enforcing – Ebben a módban a SELinux érvényesíti a hozzáférés-szabályozást a rendszerén. Ki kell töltenie a következő opcionális 4. lépés – A SELinux konfigurálása részt.
  • Permissive – Ebben az esetben a SELinux minden hozzáférési kísérletet naplóz a naplófájljába, de nem hajtja végre a hozzáférés-szabályozást a rendszerén.
  • Disabled – Ha a SELinux ki van kapcsolva, akkor nem naplóz és nem hajt végre semmilyen hozzáférés-szabályozást a rendszerén.

Ha a getenforce parancs Permissive vagy Disabled értéket adott vissza, akkor az Rsyslogot a következő paranccsal indíthatja újra:

  • sudo systemctl restart rsyslog

Az Rsyslog újraindítása után a /etc/rsyslog.d/99-haproxy.conf pontban konfigurált /var/log/haproxy.log fájlban lévő naplókat tekintheti meg. Folytassa az 5. lépés – A HAProxy naplózás tesztelése című részt, hogy megbizonyosodjon arról, hogy minden az elvárásoknak megfelelően működik.

Máskülönben, ha a rendszerén a SELinux Enforcing módban fut, akkor a bemutató következő szakasza elmagyarázza, hogyan kell hozzáadni egy modult, hogy az Rsyslog és a HAProxy kommunikálhasson egymással a közös Unix tartományi foglalaton keresztül.

4. lépés – (Opcionális) SELinux konfigurálása

Ha a CentOS 8 rendszerén a SELinux Enforcing módban van konfigurálva, akkor engedélyeznie kell az Rsyslog számára a hozzáférést a HAProxy chroot könyvtárához. A hozzáférés engedélyezése lehetővé teszi, hogy az Rsyslog létrehozza azt a Unix tartományi aljzatot, amelyre a HAproxy a naplóit küldi.

Ha nem ismeri a SELinuxot, akkor az An Introduction to SELinux on CentOS 7 című bemutató sorozat segít megtanulni a SELinux kezelését és interakcióját. Bár a CentOS 7-re íródott, a sorozatban szereplő elvek és parancsok ugyanúgy alkalmazhatóak a CentOS 8-ra is.

Az Rsyslog és a HAProxy hozzáférésének engedélyezéséhez a megosztott aljzatukhoz az első feladat egy Type Enforcement policy fájl létrehozása. Nyisson meg egy új, rsyslog-haproxy.te nevű fájlt a vi vagy a kívánt szerkesztőprogramban:

  • vi rsyslog-haproxy.te

Nyomja meg a i gombot a INSERT módba való váltáshoz, majd illessze be a következő sorokat a fájlba:

rsyslog-haproxy.te
module rsyslog-haproxy 1.0;require { type syslogd_t; type haproxy_var_lib_t; class dir { add_name remove_name search write }; class sock_file { create setattr unlink };}#============= syslogd_t ==============allow syslogd_t haproxy_var_lib_t:dir { add_name remove_name search write };allow syslogd_t haproxy_var_lib_t:sock_file { create setattr unlink };

Az első sor meghatározza a modul nevét és verzióját. A require rész közli a SELinux modulbetöltővel, hogy milyen típusok és osztályok szükségesek a házirend modulként való betöltéséhez. Az utolsó két sor az Rsyslognak a HAProxy chroot, illetve a socket fájlhoz való hozzáférését engedélyező szabályokat tartalmazza.

Amikor befejezte a fájl szerkesztését, mentse el és zárja be a ESC gomb megnyomásával, majd írja be a :wq és a ENTER billentyűt.

Következő lépésként futtassa a következő parancsot a checkpolicy csomag telepítéséhez, amely tartalmazza a checkmodule segédprogramot, amellyel a Type Enforcement fájlt SELinux modullá alakíthatja.

  • sudo dnf install checkpolicy

Most, hogy telepítette a checkmodule eszközt, a következő lépés a modul lefordítása, majd betöltése a SELinuxba. A Type Enforcement fájl SELinux modullá történő lefordításához futtassa a következőt:

  • checkmodule -M -m rsyslog-haproxy.te -o rsyslog-haproxy.mod

A következő lépésben futtassa a semodule_package parancsot egy teljes házirendcsomag létrehozásához, amelyet a SELinux be tud tölteni a Linux kernelbe:

  • semodule_package -o rsyslog-haproxy.pp -m rsyslog-haproxy.mod

A végső lépés a generált csomag betöltése a Linux kernelbe a semodule parancs segítségével:

  • sudo semodule -i rsyslog-haproxy.pp

A modul betöltése néhány másodpercet vehet igénybe. Miután a parancs befejeződött, a semodule parancs futtatásával megerősítheti, hogy a modul betöltődött a kernelbe:

  • sudo semodule -l |grep rsyslog-haproxy

A következő kimenethez hasonlót kell kapnia:

Output
rsyslog-haproxy

A modul betöltése után újraindíthatja az Rsyslogot a következő paranccsal:

  • sudo systemctl restart rsyslog

Most definiált, lefordított és betöltött egy SELinux házirendet, amely lehetővé teszi a HAProxy és az Rsyslog számára a közös foglalaton keresztüli kommunikációt.

A következő lépésben tesztelni fogod, hogy minden működik-e azzal, hogy HTTP-kérést intézel a HAProxyhoz, és megvizsgálod az új naplófájlját.

5. lépés – A HAProxy naplózásának tesztelése

Most, hogy konfigurálta a HAProxy-t, az Rsyslogot és opcionálisan a SELinuxot, tesztelheti, hogy működik-e a naplózás a /var/log/haproxy.log-re.

Az haproxy csomag alapértelmezés szerint egy konfigurációs fájlt szállít, amely létrehoz egy HTTP listener foglalatot az 5000-es porton. A konfiguráció egy nem létező háttértár-kiszolgálóra mutat, így a portra érkező bármely kérés HTTP 503 hibát eredményez.

Az 503-as hiba ellenőrzéséhez a /var/log/haproxy.log fájlban először generáljon egy HTTP-kérést a curl segítségével, így:

  • curl -si http://127.0.0.1:5000

A következő kimenetet kell kapnia:

Output
HTTP/1.0 503 Service UnavailableCache-Control: no-cacheConnection: closeContent-Type: text/html<html><body><h1>503 Service Unavailable</h1>No server is available to handle this request.</body></html>

Most vizsgálja meg a /var/log/haproxy.log-t a grep parancs segítségével, hogy van-e HTTP 503-as válasz:

  • sudo grep -E 'NOSRV.+503' /var/log/haproxy.log

Megjegyzés: A parancs NOSRV.+503 része egy reguláris kifejezés. A Grep & szabályos kifejezések használata szövegminták kereséséhez Linuxban
című bemutató részletesebben foglalkozik a grep és a szabályos kifejezések használatával.

Egy olyan sort (vagy több sort) kell kapnia, mint a következő:

Output
Sep 9 21:32:22 centos-s-1vcpu-1gb-nyc3-01 haproxy: 127.0.0.1:56024 main app/<NOSRV> 0/-1/-1/-1/0 503 212 - - SC-- 1/1/0/0/0 0/0 "GET / HTTP/1.1"

Ez a sor megfelel az curl kérésnek, amit tett, ami azt jelenti, hogy az Rsyslog és a HAProxy úgy van beállítva, hogy helyesen használja a közös foglalatot.

Következtetés

Ebben a gyorsindító bemutatóban a HAProxy-t úgy konfigurálta, hogy egy Unix tartományi foglalatra naplózzon. Az Rsyslogot is beállította a socket létrehozására és olvasására, hogy a két program kommunikálni tudjon egymással anélkül, hogy bármilyen TCP/IP portot megnyitna a rendszerén. Végül opcionálisan lefordított, csomagolt és betöltött egy SELinux házirendet, hogy engedélyezze az Rsyslog és a HAProxy közös hozzáférését a foglalatukhoz.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.