How To Configure HAProxy Logging with Rsyslog on CentOS 8 [Quickstart]

Introduction

HAProxy, joka on lyhenne sanoista High Availability Proxy, on laajalti käytetty TCP- ja HTTP-pohjainen välityspalvelin, joka toimii Linuxissa, Solariksessa ja FreeBSD:ssä. Sitä käytetään sovellusten kuorman tasapainottamiseen jakamalla pyyntöjä useiden palvelimien välillä ja varmistamaan, että sovellukset ovat erittäin hyvin käyttäjien käytettävissä.

HAProxy ei ole oletusarvoisesti monissa CentOS 8 -asennuksissa määritetty kirjoittamaan lokitulostettaan tiedostoon. Tässä pikaoppaassa kerrotaan, miten HAProxyn lokitiedostojen tallennus määritetään Rsyslogin avulla käyttämällä Unix-verkkotunnussokkelia luotettavuuden, nopeuden ja turvallisuuden takaamiseksi.

Edellytykset

Tämän ohjeen suorittamiseksi tarvitset palvelimen, jossa on CentOS 8. Tällä palvelimella tulee olla ei-root-käyttäjä, jolla on järjestelmänvalvojan oikeudet. Voit asentaa sen noudattamalla CentOS 8:n palvelimen alkuasennusopasta.

Vaihe 1 – HAProxyn asentaminen ja käyttöönotto

Asenna HAProxy suorittamalla seuraava dnf-komento:

  • sudo dnf install haproxy

Kun saat kehotuksen Is this ok :, kirjoita y ja paina RETURN asentaaksesi paketin.

Kun olet asentanut HAProxyn, ota se käyttöön ja käynnistä se komennolla systemctl:

  • sudo systemctl enable haproxy.service

Sinulle pitäisi tulla seuraava tuloste:

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

Kun HAProxy-palvelu on nyt otettu käyttöön, voit käynnistää sen varmistaaksesi, että se toimii palvelimesi oletuskonfiguraatiolla:

  • sudo systemctl start haproxy.service

Tarkista seuraavaksi HAProxy-palvelun tila varmistaaksesi, että se on käynnissä:

  • sudo systemctl status haproxy.service

Pitäisi saada seuraavan kaltainen tuloste. Huomaa tuotoksen korostettu active (running)-osa. Jos palvelimellasi näkyy sama korostettu osa, HAProxy toimii oikein palvelimellasi ja voit jatkaa kirjauksen määrittämistä.

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. . .

Jos tulosteesi on erilainen tai tilassa näkyy jotakin Active: failed kaltaista, noudata vianmääritysvaiheita, jotka on esitetty oppaassa Yleisten HAProxy-virheiden vianmääritys selvittääksesi, mikä estää HAProxya käynnistymästä oikein.

Kun olet varmistanut, että HAProxy on käytössä ja käynnissä, voit jatkaa seuraavaan vaiheeseen, joka on HAProxyn lokitusdirektiivien määrittäminen.

Vaihe 2 – HAProxyn lokidirektiivien konfigurointi

Avataksesi HAProxyn lokidirektiivien konfiguroinnin avaa /etc/haproxy/haproxy.cfg vi– tai haluamallasi editorilla:

  • sudo vi /etc/haproxy/haproxy.cfg

Paina i siirtyäksesi INSERT-tilaan, etsi sitten rivi log 127.0.0.1 local2 ja kommentoi se pois lisäämällä #-merkki rivin alkuun, kuten seuraavassa esimerkissä korostetaan:

/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. . .

Lisää nyt suoraan kommentoidun rivin jälkeen rivi, jonka sisältö on seuraava:

 log /dev/log local0

Koko muokkaamasi /etc/haproxy/haproxy.cfg-kohdan tulisi sisältää seuraavat rivit:

/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. . .

Rivi chroot on tärkeä, koska se rajoittaa HAProxy-prosessin käyttämään vain hakemistossa /var/lib/haproxy olevia tiedostoja. Rivillä log /dev/log local0 luodaan kyseisen hakemiston sisälle tiedosto, josta Rsyslog kerää lokimerkintöjä.

Kun olet muokannut /etc/haproxy/haproxy.cfg:n log riviä, tallenna ja sulje tiedosto painamalla ESC, kirjoittamalla :wq ja painamalla ENTER.

Viimeinen vaihe, joka sinun täytyy suorittaa tässä osiossa, on luoda hakemisto /var/lib/haproxy/dev, koska sitä ei ole oletusarvoisesti olemassa.

Luo hakemisto komennolla mkdir ja käynnistä sitten HAProxy uudelleen:

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

Olet nyt konfiguroinut HAProxyn lähettämään lokinsa Unix-toimialueen pistorasiaan, joka sijaitsee osoitteessa /var/lib/haproxy/dev/log. Seuraavassa vaiheessa konfiguroit Rsyslogin luomaan socketin ja käyttämään sitä.

Vaihe 3 – Rsyslogin konfigurointi HAProxy-lokeja keräämään

Rsyslogin oletuskonfiguraatio CentOS 8:ssa ei käsittele HAProxy-lokeja. Jotta voit kerätä lokit HAProxy-palvelusta, avaa uusi tiedosto /etc/rsyslog.d/99-haproxy.conf käyttäen vi tai haluamaasi editoria:

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

Paina i vaihtaaksesi INSERT-tilaan ja liitä sitten seuraavat rivit tiedostoon:

/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}

Direktiivi $AddUnixListenSocket käskee Rsyslogia luomaan Unix-verkkotunnuksen socketin määritettyyn paikkaan, tässä tapauksessa /var/lib/haproxy/dev/log. Kohdassa :programname, startswith, "haproxy" määritetään tiedosto, johon Rsyslog kirjoittaa lokimerkinnät, jotka se kerää socketista.

Kun olet valmis muokkaamaan /etc/rsyslog.d/99-haproxy.conf, tallenna ja sulje tiedosto painamalla ESC, kirjoittamalla :wq ja painamalla ENTER.

Olet nyt määrittänyt Rsyslogin lukemaan lokimerkinnät Unix-toimialueen socketista osoitteessa /var/lib/haproxy/dev/log ja kirjoittamaan ne lokitiedostoon osoitteessa /var/log/haproxy.log.

Mutta ennen Rsyslogin uudelleenkäynnistämistä sinun on määritettävä, onko SELinux valvomassa pääsynvalvontaa CentOS 8 -järjestelmässäsi.

Voidaksesi tarkistaa SELinuxin tämänhetkisen politiikan, suorita seuraava:

  • getenforce

Saat jonkin seuraavista tulosteista:

  • Enforcing – Tässä tilassa SELinux valvoo pääsynvalvontaa järjestelmässäsi. Sinun on suoritettava seuraava valinnainen Vaihe 4 – SELinuxin määrittäminen -osio.
  • Permissive – Tässä tapauksessa SELinux kirjaa kaikki pääsyyritykset lokitiedostoonsa, mutta ei valvo pääsynvalvontaa järjestelmässäsi.
  • Disabled – Jos SELinux on kytketty pois käytöstä, se ei kirjaa eikä valvo pääsynvalvontakäytäntöjä järjestelmässäsi.

Jos getenforce-komento antoi tulokseksi joko Permissive tai Disabled, voit käynnistää Rsyslogin uudelleen seuraavalla komennolla:

  • sudo systemctl restart rsyslog

Kun olet käynnistänyt Rsyslogin uudelleen, voit tarkastella lokitiedostoja /var/log/haproxy.log-tiedostossa, jonka määrittelit kohdassa /etc/rsyslog.d/99-haproxy.conf. Siirry vaiheeseen 5 – HAProxy-loggauksen testaaminen varmistaaksesi, että kaikki toimii odotetulla tavalla.

Muussa tapauksessa, jos järjestelmässäsi on SELinux Enforcing-tilassa, tämän ohjeen seuraavassa osassa kerrotaan, miten lisätään moduuli, jonka avulla Rsyslog ja HAProxy voivat kommunikoida toistensa kanssa jaetun Unix-toimialueen socketin kautta.

Vaihe 4 – (Valinnainen) SELinuxin konfigurointi

Jos CentOS 8 -järjestelmäsi on konfiguroitu SELinuxin kanssa Enforcing-tilassa, sinun on sallittava Rsyslogin pääsy HAProxyn chroot-hakemistoon. Tämän pääsyn salliminen antaa Rsyslogin luoda Unix-verkkotunnuksen socketin, johon HAproxy lähettää lokinsa.

Jos SELinux ei ole sinulle tuttu, tämä opetussarja Johdatus SELinuxiin CentOS 7:ssä auttaa sinua oppimaan SELinuxin hallintaa ja vuorovaikutusta. Vaikka se on kirjoitettu CentOS 7:lle, sarjan periaatteet ja komennot ovat yhtä lailla sovellettavissa CentOS 8:aan.

Voidaksesi sallia Rsyslogin ja HAProxyn pääsyn jaettuun socketiin, ensimmäinen tehtävä on luoda Type Enforcement -käytäntötiedosto. Avaa uusi tiedosto nimeltä rsyslog-haproxy.te ohjelmassa vi tai haluamassasi editorissa:

  • vi rsyslog-haproxy.te

Vaihda INSERT-tilaan painamalla i ja liitä sitten seuraavat rivit tiedostoon:

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 };

Ensimmäisellä rivillä määritellään moduulin nimi ja versio. require-osa kertoo SELinux-moduulinlataajalle tyypit ja luokat, joita tarvitaan, jotta käytäntö voidaan ladata moduulina. Kaksi viimeistä riviä ovat säännöt, jotka sallivat Rsyslogin pääsyn HAProxyn chroot– ja socket-tiedostoon vastaavasti.

Kun olet valmis muokkaamaan tiedostoa, tallenna ja sulje se painamalla ESC, kirjoittamalla :wq ja painamalla ENTER.

Seuraavaksi suorita seuraava komento asentaaksesi checkpolicy-paketin, joka sisältää checkmodule-apuohjelman, jota käytät muuttaaksesi Type Enforcement -tiedostosta SELinux-moduulin.

  • sudo dnf install checkpolicy

Nyt kun olet asentanut checkmodule-työkalun, seuraavana askeleena on moduulin kääntäminen ja sen jälkeen sen lataaminen SELinuxiin. Suorita seuraava komento kääntääksesi Type Enforcement-tiedoston SELinux-moduuliksi:

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

Seuraavaksi suorita komento semodule_package luodaksesi täydellisen käytäntöpaketin, jonka SELinux voi ladata Linux-ytimeen:

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

Viimeisenä askeleena lataat luodun paketin Linux-ytimeen komennolla semodule:

  • sudo semodule -i rsyslog-haproxy.pp

Moduulin lisääminen voi viedä muutaman sekunnin. Kun komento on valmis, voit varmistaa, että moduuli on ladattu ytimeen ajamalla komennon semodule:

  • sudo semodule -l |grep rsyslog-haproxy

Tulosteen pitäisi näyttää seuraavanlaiselta:

Output
rsyslog-haproxy

Moduulin ladattua voit käynnistää Rsyslogin uudestaan seuraavalla komennolla:

  • sudo systemctl restart rsyslog

Olet nyt määrittänyt, kääntänyt ja ladannut SELinux-käytännötekniikan, joka sallii HAProxyn ja Rsyslogin kommunikoida jaetun pistorasiansa kautta.

Seuraavassa vaiheessa testaat, että kaikki toimii tekemällä HTTP-pyynnön HAProxylle ja tutkimalla sen uutta lokitiedostoa.

Vaihe 5 – HAProxy-loggauksen testaaminen

Nyt kun olet konfiguroinut HAProxyn, Rsyslogin ja valinnaisesti SELinuxin, voit testata, että lokien kirjaaminen osoitteeseen /var/log/haproxy.log toimii.

Paketin haproxy mukana toimitetaan oletusarvoisesti konfigurointitiedosto, joka luo HTTP-kuuntelijasokkelin porttiin 5000. Konfiguraatio osoittaa olemattomaan taustapalvelimeen, joten kaikki pyynnöt porttiin johtavat HTTP 503 -virheeseen.

Tarkistaaksesi, onko /var/log/haproxy.log-tiedostossasi 503-virhe, luo ensin HTTP-pyyntö käyttämällä curl seuraavasti:

  • curl -si http://127.0.0.1:5000

Tulosteen pitäisi olla seuraavan kaltainen:

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>

Tarkista nyt /var/log/haproxy.log mahdollisten HTTP 503 -vastausten varalta komennolla grep:

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

Huomautus: Komennon NOSRV.+503-osa on säännöllinen lauseke. Tässä opetusohjelmassa Grep & Regular Expressions Using Grep & Regular Expressions to Search for Text Patterns in Linux
käsitellään syvällisemmin grep ja säännöllisten lausekkeiden käyttöä.

Sinun pitäisi saada seuraavan kaltainen rivi (tai useita rivejä):

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"

Tämä rivi vastaa tekemääsi curl-pyyntöä, mikä tarkoittaa, että Rsyslog ja HAProxy on konfiguroitu käyttämään jaettua pistorasiaa oikein.

Johtopäätös

Tämässä pikakäynnistyksen opetusohjelmassa konfiguroit HAProxyn kirjautumaan Unixin verkkotunnuksen pistorasiaan. Määritit myös Rsyslogin luomaan socketin ja lukemaan siitä, jotta nämä kaksi ohjelmaa voivat kommunikoida keskenään avaamatta mitään TCP/IP-portteja järjestelmässäsi. Lopuksi käänsit, paketoit ja latasit valinnaisesti SELinux-käytännön, joka sallii Rsyslogille ja HAProxylle jaetun pääsyn niiden socketiin.

Vastaa

Sähköpostiosoitettasi ei julkaista.