Multe lucruri se pot întâmpla atunci când un utilizator ajunge pe un site web. Există chiar și momente în care solicitările utilizatorilor nu ajung la un server, oferindu-vă potențial un fals pozitiv care să spună că totul este în regulă. Au trecut demult vremurile în care un site web folosea un singur server. În lumea distribuită de astăzi, există mai multe servere în spatele unui load balancer care distribuie sarcina utilizatorilor site-ului web.
Atunci cum puteți ști dacă totul merge bine între utilizatorii și serverele dumneavoastră? Jurnalele emise de balansoarele de sarcină și de serverele proxy precum HAProxy vă oferă o altă perspectivă. Acestea vă pot spune, de exemplu, cât timp durează solicitările utilizatorilor și câte solicitări eșuează. Aceste informații sunt valoroase și vă pot oferi mai multe indicii atunci când depanați incidente într-un mediu live.
În postarea de astăzi, vă voi oferi o scurtă explicație a modului în care funcționează logarea în HAProxy, cum funcționează configurarea logării, cum să procesați logările și cum să evitați să rămâneți fără spațiu de stocare în serverele dvs. din cauza dimensiunilor mari ale fișierelor de logare.
Cum funcționează logarea în HAProxy?
Când instalați HAProxy, puteți configura modul în care doriți să lucrați cu jurnalele pe care le înregistrează acest instrument. De exemplu, puteți configura HAProxy pentru a trimite jurnalele la diferite locații în același timp. Poate că o echipă trebuie să primească jurnalele în timp real, iar o alta poate folosi jurnalele pentru a identifica o tendință istorică. Alternativ, este posibil să doriți pur și simplu să migrați jurnalele către o locație diferită, cum ar fi o soluție de stocare centralizată a jurnalelor.
În mod obișnuit, atunci când configurați jurnalizarea pentru un instrument, doriți ca jurnalele să fie înregistrate pe un disc local. Cu toate acestea, într-un scenariu în care vor exista multe operațiuni de scriere a jurnalelor, acest lucru poate fi contraproductiv. Performanța ar putea fi degradată și s-ar putea să pierdeți o parte din jurnale. În mod implicit, HAProxy vine cu o configurație pentru a scrie jurnalele pe un socket, deoarece este mai rapid decât să trimită jurnalele prin rețea sau să scrie direct într-un fișier.
În documentația HAProxy, există o secțiune care acoperă jurnalizarea în mai multe detalii. Odată ce aveți noțiunile de bază din această postare, vă puteți scufunda rapid mai adânc în alte subiecte, cum ar fi modul de capturare a cookie-urilor sau a antetelor HTTP. Puteți chiar configura tipul sau verbozitatea jurnalelor pe care doriți să le vedeți.
Dacă nu ați făcut-o încă, instalați HAProxy. În Ubuntu, o puteți face în felul următor:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Configurarea jurnalizării pentru Syslog
În mod implicit, există două secțiuni în fișierul de configurare HAProxy: global și defaults. În secțiunea globală, configurați caracteristici de nivel scăzut, cum ar fi securitatea, performanța și destinațiile de logare. Secțiunea defaults este cea în care aveți setările care se aplică tuturor celorlalte secțiuni proxy de mai jos, cum ar fi front end și back end. Scopul este de a evita repetițiile. O postare pe site-ul HAProxy oferă mai multe detalii despre fiecare secțiune, dar pentru cazul nostru, secțiunile global și defaults sunt suficiente.
În fișierul de configurare implicită (/etc/haproxy/haproxy.cfg), aveți ceva de genul acesta pentru logare:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Când vă uitați la directorul „/dev/log/”, veți vedea o legătură simbolică către jurnalul systemd, ceea ce înseamnă că jurnalele sunt trimise către syslog:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Versiunile recente, cum ar fi Ubuntu 18.04, vin cu rsyslog instalat. În caz contrar, va trebui să îl instalați prin rularea comenzii „sudo apt install -y rsyslog” în serverul dumneavoastră. Apoi, uitați-vă la configurația din folderul rsyslog. În cazul meu, arată cam așa:
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
Rețineți că există un fișier cu numele „49-haproxy.conf”, care este locul unde există configurația pentru logarea HAProxy. Dacă nu vedeți un astfel de fișier, creați-l. Iată conținutul implicit:
$ 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&~
Vezi că jurnalele vor fi scrise la fișierul /var/log/haproxy.log. De acolo, este treaba ta să faci ceva cu aceste jurnale. Cu toate acestea, este posibil să fie nevoie să reporniți rsyslog și HAProxy înainte de a putea vedea unele jurnale. Puteți face acest lucru executând următoarele comenzi:
sudo service rsyslog restartsudo service haproxy restart
Ar trebui să vedeți cel puțin niște jurnale inițiale ca acestea:
$ 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)
Acum că aveți jurnale, este timpul să faceți ceva cu ele. Nu contează ce instrument folosiți pentru a procesa jurnalele din fișierul haproxy.log. De exemplu, puteți alege un instrument precum SolarWinds® Loggly®, care are și un agent pentru a procesa jurnalele și a le trimite automat către Loggly.
Configurați serverele de back-end
Dacă doriți să încercați să vedeți cum funcționează în mod implicit logarea atunci când adăugați mai multe proxy-uri, puteți face acest lucru adăugând o configurație precum cea de mai jos la sfârșitul haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Înlocuiți „Your-Webserver1-IP” și „Your-Webserver2-IP” cu adresele IP ale serverelor către care doriți să redirecționați traficul. Salvați modificările și reporniți serviciul HAProxy. Observați că nu a fost nevoie să includem nicio configurație de logare în secțiunea proxy back-end. Acum ar trebui să puteți trimite trafic către acele servere back-end prin HAProxy, iar jurnalele vor merge automat în fișierul haproxy.log.
Rotați jurnalele cu Logrotate
În cele din urmă, ca buni cetățeni, trebuie să ne asigurăm că haproxy.log nu consumă toată memoria serverului. Pentru a face acest lucru, puteți folosi logrotate. În cazul meu, acesta vine instalat în mod implicit, dar îl puteți instala folosind următoarea comandă:
sudo apt-get install logrotate
Apoi veți avea un fișier de configurare ca următorul pentru a curăța și comprima fișierul haproxy.log:
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}
Când folosiți configurația de mai sus, logrotate va aplica această regulă în fiecare zi, păstrând orice jurnal vechi de 52 de zile sau mai nou. De asemenea, comprimă fișierele rotite într-un format gzip. Nu va trebui să vă faceți griji cu privire la faptul că aveți prea multe fișiere de jurnal pe server-logrotate va elimina pentru dvs. orice fișier mai vechi. Utilizând această configurație simplă, puteți evita să fiți nevoit să vă treziți în mijlocul nopții pentru a elimina jurnalele. Sună ca o afacere grozavă, nu-i așa?
Pentru a vă asigura că această configurație funcționează, reporniți HAProxy și rsyslog:
sudo service rsyslog restartsudo service haproxy restart
Concluzie
Am zgâriat doar suprafața opțiunilor de logare pe care le oferă HAProxy. Puteți continua să consultați documentația oficială. Există, de asemenea, o postare excelentă pe blogul HAProxy care aprofundează modul de modificare a formatului jurnalelor și chiar modul de obținere a metricilor de profilare.
Rețineți că am folosit un server Ubuntu 18.04 în AWS, iar majoritatea configurațiilor pe care le-am discutat aici sunt acolo în mod implicit. Nu toate serverele vor veni în acest mod, dar cel puțin acum știți cum funcționează logarea în HAProxy și unde sunt aceste configurații, astfel încât să le puteți modifica dacă este necesar. Logging fericit!