Když jde na společenskou své přihlašovací údaje, HAProxy poskytuje nepřeberné množství informací. V tomto příspěvku na blogu ukážeme, jak nastavit protokolování HAProxy, zacílit na server Syslog, porozumět polím protokolu a navrhnout některé užitečné nástroje pro analýzu souborů protokolu.
hluboký ponor do protokolování HAProxy
HAProxy se nachází v kritické cestě vaší infrastruktury. Ať už se používá jako vyvažovač zatížení hran, sidecar nebo jako regulátor vniknutí Kubernetes, je nutné mít smysluplné protokoly z HAProxy.
protokolování vám poskytne informace o každém připojení a požadavku. Umožňuje pozorovatelnost potřebnou pro řešení problémů a může být dokonce použita k včasné detekci problémů. Je to jeden z mnoha způsobů, jak získat informace od HAProxy. Jiné způsoby zahrnují získávání metrik pomocí Statistiky stránce, nebo Runtime API, nastavení e-mailových upozornění, a s využitím různých open-source integrace pro ukládání log nebo statistické údaje v průběhu času. HAProxy poskytuje velmi podrobné protokoly s přesností na milisekundy a generuje velké množství informací o provozu proudícím do vaší infrastruktury. To zahrnuje:
- metriky o provozu: data časování, čítače připojení, velikost provozu atd.
- informace o rozhodnutích HAProxy: přepínání obsahu, filtrování, perzistence atd.
- informace o požadavcích a odpovědích: záhlaví, stavové kódy, užitečné zatížení atd.
- Stav ukončení relace a schopnost sledovat, kde dochází k poruchám (na straně klienta, na straně serveru?)
v tomto příspěvku se dozvíte, jak nakonfigurovat protokolování HAProxy a jak číst zprávy protokolu, které generuje. Poté uvedeme některé nástroje, které vám pomohou při operacionalizaci dat protokolu.
Syslog Server
HAProxy může vysílat protokolovou zprávu pro zpracování syslog serverem. To je kompatibilní se známými nástroji syslog, jako je Rsyslog, stejně jako novější systemd service journald. Můžete také využít různé log forwarders jako Logstash a Fluentd přijímat Syslog zprávy z HAProxy a loď je do centrálního agregátoru protokolu.
Pokud pracujete v prostředí kontejneru, HAProxy podporuje cloud nativní protokolování, které vám umožní posílat zprávy protokolu do stdout a stderr. V takovém případě přejděte na další část, kde uvidíte jak.
než se podíváte na to, jak povolit protokolování pomocí konfiguračního souboru HAProxy, měli byste se nejprve ujistit, že máte server Syslog, například rsyslog, nakonfigurovaný pro příjem protokolů. Na Ubuntu, byste nainstalovat rsyslog pomocí apt správce balíčků, tak jako:
Jednou rsyslog je nainstalován, upravit jeho konfiguraci zvládnout požitím HAProxy zprávy protokolu. Přidejte následující buď do /etc / rsyslog.conf nebo do nového souboru v rsyslogu.d adresář, jako /etc/rsyslog.d / haproxy.conf:
poté restartujte službu rsyslog. Ve výše uvedeném příkladu rsyslog poslouchá na adrese IP loopback, 127.0.0.1, na výchozím portu UDP 514. Tento konkrétní config zapíše do dvou souborů protokolu. Vybraný soubor je založen na úrovni závažnosti, se kterou byla zpráva zaznamenána. Abyste tomu porozuměli, podívejte se blíže na poslední dva řádky v souboru. Začínají takto:
standard Syslog předepisuje, že každé zaznamenané zprávě by měl být přiřazen kód zařízení a úroveň závažnosti. Vzhledem k výše uvedenému příkladu konfigurace rsyslog můžete předpokládat, že budeme konfigurovat HAProxy tak, aby odesílal všechny zprávy protokolu s kódem zařízení local0.
úroveň závažnosti je zadána za kódem zařízení odděleným tečkou. Zde první řádek zachycuje zprávy na všech úrovních závažnosti a zapisuje je do souboru s názvem haproxy-traffic.protokol. Druhý řádek zachycuje pouze zprávy na úrovni oznámení a vyšší a zaznamenává je do souboru s názvem haproxy-admin.protokol.
HAProxy je pevně zakódován pro použití určitých úrovní závažnosti při odesílání určitých zpráv. Například kategorizuje zprávy protokolu týkající se připojení a požadavků HTTP s úrovní závažnosti informací. Ostatní události jsou kategorizovány pomocí jedné z dalších, méně podrobných úrovní. Od nejvíce k nejméně důležité, úrovně závažnosti, jsou:
Stupeň | HAProxy Protokoly |
prohlédnout | Chyby, jako je běh z popisovače souboru operačního systému. |
alert | některé vzácné případy, kdy se stalo něco neočekávaného, jako například neschopnost mezipaměti odpovědi. |
crit | nepoužívá se. |
err | chyby, jako například neschopnost analyzovat soubor mapy, neschopnost analyzovat konfigurační soubor HAProxy a selhání operace na tabulce stick. |
varování | některé důležité, ale nekritické chyby, jako je selhání nastavení záhlaví požadavku nebo selhání připojení k DNS nameserveru. |
oznámení | změny stavu serveru, jako je například nahoru nebo dolů nebo když je server zakázán. Další události při spuštění, jako je spuštění proxy a načítání modulů jsou také zahrnuty. Protokolování kontroly stavu, pokud je povoleno, také používá tuto úroveň. |
info | TCP spojení a HTTP podrobnosti požadavku a chyby. |
debug | můžete napsat vlastní Lua kód, který záznamy debug zpráv |
Moderní Linuxové distribuce jsou dodávány s správce služeb systemd, který zavádí journald pro shromažďování a ukládání logů. Služba journald není implementací Syslog, ale je kompatibilní s Syslogem, protože bude poslouchat na stejném soketu /dev/log. Bude shromažďovat přijaté protokoly a umožní uživateli filtrovat podle kódu zařízení a / nebo úrovně závažnosti pomocí ekvivalentních polí žurnálu (SYSLOG_FACILITY, priorita).
HAProxy Protokolování Konfigurace
HAProxy konfigurační příručka vysvětluje, že přihlášení lze povolit ve dvou krocích: prvním je stanovit Syslog server v global
oddíl pomocí log
směrnice:
log
směrnice pověřuje HAProxy odesílat záznamy na Syslog server poslouchá na 127.0.0.1:514. Zprávy jsou odesílány pomocí zařízení local0, což je jedno ze standardních, uživatelem definovaných zařízení Syslog. Je to také zařízení, které naše konfigurace rsyslog očekává. Můžete přidat více než jeden příkaz log
pro odeslání výstupu na více serverů Syslog.
můžete kontrolovat, kolik informace je zaznamenána přidáním Syslog úrovni až do konce řádku:
druhý krok konfigurace protokolování je aktualizovat různé proxy servery (frontend
backend
listen
sekcí) k odesílání zpráv na Syslog server(y) nastavit v global
oddíl. To se provádí přidáním direktivy log global
. Můžete ji přidat do defaults
oddíl, jak je uvedeno:
log global
směrnice v podstatě říká, používání log
linii, která byla nastavena v global
oddíl. Uvedení log global
směrnice do defaults
oddíl je ekvivalentní k uvedení do všech následných proxy sekcí. To umožní přihlášení všech serverů proxy. Můžete si přečíst více o částech konfiguračního souboru HAProxy v našem blogu čtyři základní části Konfigurace HAProxy.
ve výchozím nastavení je výstup z HAProxy minimální. Přidání řádku option httplog
do sekce defaults
umožní podrobnější protokolování HTTP, které podrobněji vysvětlíme později.
typický HAProxy konfigurace vypadá takto:
Pomocí globální protokolování pravidla je nejčastější HAProxy nastavení, ale můžete dát je přímo do frontend
oddíl místo. Může být užitečné mít jinou konfiguraci protokolování jako jednorázovou. Můžete například poukázat na jiný cílový server Syslog, použít jiné zařízení pro protokolování nebo zachytit různé úrovně závažnosti v závislosti na případu použití aplikace backend. Zvažte následující příklad, ve kterém frontend
sekcí, fe_site1 a fe_site2, nastavit různé IP adresy a úrovně závažnosti:
Při přihlašování do místní Syslog služby, psaní na UNIX socket může být rychlejší než cílení TCP loopback adresu. Obecně platí, že v systémech Linux je k dispozici soket UNIX pro poslech zpráv Syslog na adrese /dev/log, protože zde je funkce syslog() knihovny GNU C ve výchozím nastavení odesílá zprávy. Cíl UNIX socket, jako je tento:
Nicméně, měli byste mít na paměti, že pokud budete používat UNIX socket pro přihlášení a zároveň používáte HAProxy v chroot prostředí—nebo HAProxy vytvořit chroot
adresář pro vás pomocí chroot konfigurace směrnice—pak UNIX socket, musí být k dispozici v rámci které chroot adresář. To lze provést jedním ze dvou způsobů.
nejprve, když se rsyslog spustí, může vytvořit nový poslechový soket v souborovém systému chroot. Přidejte následující do vašeho HAProxy rsyslog konfiguračního souboru:
druhý způsob je ručně přidat zásuvky do chroot souborového systému pomocí mount
příkaz --bind
možnost.
nezapomeňte přidat položku do souboru /etc/fstab nebo do souboru jednotky systemd, aby připojení přetrvávalo i po restartu. Po konfiguraci protokolování budete chtít pochopit, jak jsou zprávy strukturovány. V další části uvidíte pole, která tvoří protokoly na úrovni TCP a HTTP.
Pokud potřebujete omezit množství uložených dat, jedním ze způsobů je vzorek pouze části zpráv protokolu. Nastavte úroveň protokolu na Tichý pro náhodný počet požadavků, například:
Všimněte si, že pokud je to možné, je lepší zachytit co nejvíce dat. Tímto způsobem nemáte chybějící informace, když je nejvíce potřebujete. Můžete také upravit výraz ACL tak, aby určité podmínky pravidlo přepsaly.
Další způsob, jak omezit počet zpráv, přihlášen je nastavit option dontlog-normal
defaults
nebo frontend
. Tímto způsobem jsou zachyceny pouze časové limity, opakování a chyby. Pravděpodobně byste to nechtěli povolit po celou dobu, ale pouze v určitých časech, například při provádění srovnávacích testů.
Pokud používáte HAProxy uvnitř kontejneru Docker a používáte HAProxy verze 1.9, pak místo odesílání výstupu protokolu na server Syslog jej můžete odeslat na stdout a/nebo stderr. Nastavte adresu na stdout
nebo stderr
. V tomto případě je také výhodné nastavit formát zprávy, aby raw
, tak jako:
HAProxy Log Formát
typ přihlášení uvidíte je určen režim proxy, které jste nastavili v HAProxy. HAProxy může pracovat buď jako vrstva 4 (TCP) proxy nebo jako vrstva 7 (HTTP) proxy. Režim TCP je výchozí. V tomto režimu je mezi klienty a servery vytvořeno plně duplexní spojení a nebude provedeno žádné vyšetření vrstvy 7. Pokud jste nastavili konfiguraci rsyslogu na základě naší diskuse v první části, najdete soubor protokolu na adrese / var/log/haproxy-traffic.protokol.
V režimu TCP, který je nastaven přidáním mode tcp
, měli byste také přidat volbu tcplog. S touto volbou je formát protokolu výchozí pro strukturu, která poskytuje užitečné informace, jako jsou podrobnosti o připojení vrstvy 4, časovače, počet bajtů atd. Pokud byste tento formát znovu vytvořili pomocí log-format
, který se používá k nastavení vlastního formátu, vypadal by takto:
popisy těchto polí lze nalézt v dokumentaci formátu protokolu TCP, i když několik popíšeme v nadcházející části.
TCP protokolu, formátu v HAProxy
Když HAProxy je spustit jako Vrstva 7 proxy pomocí mode http
, měli byste přidat možnost httplog směrnice. Zajišťuje, že požadavky a odpovědi HTTP jsou podrobně analyzovány a že žádný obsah kompatibilní s RFC nebude zachycen. Toto je režim, který skutečně zdůrazňuje diagnostickou hodnotu HAProxy. Formát protokolu HTTP poskytuje stejnou úroveň informací jako formát TCP, ale s dalšími daty specifickými pro protokol HTTP. Pokud byste tento formát znovu vytvořili pomocí log-format
, vypadalo by to takto:
podrobné popisy různých polí naleznete v dokumentaci formátu protokolu HTTP.
HTTP formát protokolu v HAProxy
můžete také definovat vlastní formát protokolu, zachytit pouze to, co potřebujete. Pomocí log-format
(nebo log-format-sd
u strukturovaných dat syslog) směrnice v defaults
nebo frontend
. Přečtěte si náš blog post HAProxy Log přizpůsobení se dozvědět více a vidět některé příklady.
v několika následujících sekcích se seznámíte s poli, která jsou zahrnuta při použití option tcplog
nebo option httplog
.
Proxy
V vytvořeném souboru protokolu začíná každý řádek frontendem, backendem a serverem, na který byl požadavek odeslán. Pokud byste například měli následující konfiguraci HAProxy, viděli byste řádky, které popisují požadavky jako směrované přes http-in frontend do statického backendu a poté na server srv1.
To se stává důležitou informací, když potřebujete vědět, kam byl požadavek odeslán, například když vidíte chyby, které se týkají pouze některých vašich serverů.
časovače
časovače jsou poskytovány v milisekundách a pokrývají události, které se dějí během relace. Časovače zachycené výchozím formátem protokolu TCP jsou Tw / Tc / Tt. Ty, které jsou poskytovány ve výchozím formátu protokolu HTTP, jsou TR / Tw / Tc / Tr / Ta. Tyto přeložit jako:
Časovač | Význam |
TR | celkový čas, aby si klient požadavek (HTTP pouze v režimu). |
Tw | celkový čas strávený ve frontách čekajících na slot pro připojení. |
Tc | celkový čas pro navázání TCP připojení k serveru. |
Tr | doba odezvy serveru (pouze režim HTTP). |
Ta | celkový aktivní čas pro požadavek HTTP (pouze režim HTTP). |
tt | celková doba trvání relace TCP, mezi okamžikem, kdy ji proxy přijal, a okamžikem, kdy byly oba konce uzavřeny. |
najdete podrobný popis všech dostupných časovačů v HAProxy dokumentace. Následující diagram také ukazuje, kde je čas zaznamenán během jedné transakce typu end-to-end. Všimněte si, že fialové čáry na okrajích označují časovače.
Čas nahrávání během jediného end-to-end transakce
Stavu Relace při Odpojení
Oba TCP a HTTP protokoly patří ukončení státních kód, který vám řekne, jakým způsobem TCP nebo HTTP relace skončila. Je to dvoumístný kód. První znak hlásí první událost, která způsobila ukončení relace, zatímco druhý hlásí stav relace TCP nebo HTTP, když byla uzavřena.
zde jsou některé příklady terminačního kódu:
dvouznakový kód | Význam |
— | Normální ukončení na obou stranách. |
cD | klient neposlal ani uznat všechny údaje a nakonec timeout client vypršela. |
SC | server výslovně odmítl připojení TCP. |
PC | proxy odmítl navázat připojení k serveru, protože při pokusu o připojení bylo dosaženo limitu soketu procesu. |
existuje celá řada důvodů, proč mohlo být spojení uzavřeno. Podrobné informace o všech možných koncových kódech naleznete v dokumentaci HAProxy.
čítače
čítače označují stav systému, když požadavek prošel. HAProxy zaznamenává pět čítačů pro každé připojení nebo požadavek. Mohou být neocenitelné při určování toho, kolik zatížení je umístěno v systému, kde systém zaostává a zda byly zasaženy limity. Při pohledu na řádek v protokolu uvidíte čítače uvedené jako pět čísel oddělených lomítky: 0/0/0/0/0.
V režimu TCP nebo HTTP se tyto dělí na:
- celkový počet souběžných připojení v procesu HAProxy, když byla relace zaznamenána.
- celkový počet souběžných připojení směrovaných tímto
frontend
, když byla relace zaznamenána. - celkový počet souběžných připojení směrovaných k tomuto
backend
, když byla relace zaznamenána. - celkový počet souběžných připojení je stále aktivní na tomto
server
, když byla relace zaznamenána. - počet pokusů o opakování při pokusu o připojení k serveru backend.
ostatní pole
HAProxy nezaznamenává vše mimo krabici, ale můžete jej vyladit, abyste zachytili, co potřebujete. HTTP hlavičky požadavku může být zaznamenána přidáním http-request capture
směrnice:
přihlaste se ukáže mailů mezi složenými závorkami a odděleny potrubní symboly. Zde můžete vidět záhlaví hostitele a User-Agent pro požadavek:
hlavičku odpovědi může být přihlášen přidáním http-response capture
směrnice:
V tomto případě, musíte také přidat declare capture response
směrnice, které přiděluje zachytit slot, kde záhlaví odezvy, jednou to přijde, mohou být uloženy. Každý slot, který přidáte, je automaticky přiřazen ID od nuly. Odkazujte na toto ID při volání http-response capture
. Hlavičky odpovědí jsou zaznamenány po hlavičkách požadavků v samostatné sadě složených závorek.
hodnoty souborů Cookie lze přihlásit podobným způsobem se směrnicí http-request capture
.
vše zachycené pomocí http-request capture
, včetně hlaviček HTTP a souborů cookie, se objeví ve stejné sadě složených závorek. Totéž platí pro vše zachycené pomocí http-response capture
.
můžete také použít http-request capture
pro přihlášení vzorkovaných dat z tabulek stick. Pokud jste byli sledování požadavku uživatele sazeb s stick-table
, můžete se přihlásit na ně, jako je tento:
Tak, aby požadavek na webovou stránku, která obsahuje HTML dokumentu a dva obrazy by se ukázat uživatele souběžných žádostí rychlost přírůstky až tři:
můžete se také přihlásit hodnoty fetch metod, jako je záznam, verze SSL/TLS, který byl použit (všimněte si, že tam je vestavěný v protokolu proměnné pro získání této zvané %sslv):
Proměnné nastavit pomocí http-request set-var
může být také zaznamenána.
ACL výrazy vyhodnotí na true nebo false. Nemůžete je přímo přihlásit, ale můžete nastavit proměnnou podle toho, zda je výraz pravdivý. Například, pokud uživatel navštíví /api, můžete nastavit proměnnou s názvem req.is_api hodnota Je API a pak zachytit, že v protokolech.
povolení HAProxy profilování
s vydáním HAProxy 1.9 můžete zaznamenat čas CPU strávený zpracováním požadavku v HAProxy. Přidat do profiling.tasks
směrnice global
části:
k Dispozici jsou nové metody fetch, že vystavit profilování metriky:
Fetch metodu | Popis |
date_us |
mikrosekund část dne. |
cpu_calls |
počet volání na zpracování úloh proudu nebo proudu žádost, protože to bylo přiděleno. Resetuje se pro každý nový požadavek na stejném připojení. |
cpu_ns_avg |
průměrný počet nanosekund strávených při každém volání úkolu zpracováním proudu nebo aktuálního požadavku. |
cpu_ns_tot
|
celkový počet nanosekund strávených při každém volání úkolu zpracováním proudu nebo aktuálního požadavku. |
lat_ns_avg |
průměrný počet nanosekund strávil mezi okamžikem, kdy řešení úkolu proud je probudil a v okamžiku, kdy je účinně povolán. |
lat_ns_tot |
celkový počet nanosekund mezi okamžikem, kdy řešení úkolu proud je probudil a v okamžiku, kdy je účinně povolán. |
Přidat tyto do logu zprávy, jako je tento:
Toto je skvělý způsob, jak posoudit, které požadavky stát nejvíce zpracovat.
Parsing HAProxy Logs
Jak jste se dozvěděli, HAProxy má mnoho polí, která poskytují obrovské množství informací o připojení a požadavcích. Jejich přímé čtení však může vést k přetížení informací. Často je snazší je analyzovat a agregovat pomocí externích nástrojů. V této části uvidíte některé z těchto nástrojů a jak mohou využít informace o protokolování poskytované HAProxy.
HALog
HALog je malý, ale výkonný nástroj pro analýzu protokolu, který je dodáván s HAProxy. Byl navržen tak, aby byl nasazen na produkční servery, kde může pomoci s ručním řešením problémů, například při řešení živých problémů. Je extrémně rychlý a schopný analyzovat protokoly TCP a HTTP rychlostí 1 až 2 GB za sekundu. Předáním kombinace příznaků můžete extrahovat statistické informace z protokolů, včetně požadavků na adresu URL a požadavků na zdrojovou IP. Poté můžete třídit podle doby odezvy, chybovosti a kódu ukončení.
Pokud chcete například extrahovat statistiky na server z protokolů, můžete použít následující příkaz:
to je užitečné, když potřebujete analyzovat řádky protokolu podle stavového kódu a rychle zjistit, zda je daný server nezdravý (např. vrací příliš mnoho odpovědí 5xx). Nebo server může popírat příliš mnoho požadavků (4xx odpovědi), což je známkou útoku hrubou silou. Můžete také získat průměrnou dobu odezvy na server pomocí sloupce avg_rt
, což je užitečné pro řešení problémů.
S Halogem můžete získat statistiky podle adresy URL pomocí následujícího příkazu:
výstup ukazuje počet žádostí, počet chyb, celkový výpočetní čas, průměrný čas výpočtu, celkový čas výpočtu úspěšných žádostí, průměrný čas výpočtu úspěšných žádostí, průměrný počet bajtů odeslaných a celkový počet bajtů odeslaných. Kromě analýzy statistik serveru a adresy URL můžete použít více filtrů, které odpovídají protokolům s danou dobou odezvy, stavovým kódem HTTP, kódem ukončení relace atd.
stránka HAProxy Stats
analýza protokolů pomocí Halogu není jediný způsob, jak získat metriky z HAProxy. HAProxy Statistiky Stránka může být povoleno přidáním stats enable
směrnice frontend
nebo listen
oddíl. Zobrazuje živé statistiky vašich serverů. Follow listen
oddíl začíná Statistiky strana naslouchá na portu 8404:
Statistiky Stránka je velmi užitečné pro získání okamžité informace o provozu teče přes HAProxy. Tato data však neukládá a zobrazuje data pouze pro jeden vyvažovač zatížení.
HAProxy Enterprise real-Time Dashboard
Pokud používáte HAProxy Enterprise, máte přístup k řídicímu panelu v reálném čase. Vzhledem k tomu, že Statistiky stránka zobrazuje statistiky pro jednu instanci HAProxy, Real-Time Dashboard shromažďuje a zobrazuje informace napříč clusterem rozložení zátěže. Díky tomu je snadné sledovat zdraví všech vašich serverů z jedné obrazovky. Data lze prohlížet až 30 minut.
palubní deska ukládá a zobrazuje informace o službě zdraví, žádost sazby a zatížení. Usnadňuje také provádění administrativních úkolů, jako je povolení, zakázání a vypouštění backendů. Na první pohled můžete vidět, které servery jsou a na jak dlouho. Můžete také zobrazit data tabulky stick, která v závislosti na tom, co tabulka stick sleduje, vám mohou ukázat chybovost, míru požadavků a další informace o vašich uživatelích v reálném čase. Data tabulky Stick lze také agregovat.
Real-Time Dashboard v HAProxy Enterprise
Real-Time Dashboard je jedním z mnoha add-ons jsou k dispozici s HAProxy Podniku.
Závěr
V tomto blogu, jste se naučili, jak nastavit HAProxy protokolování, aby si pozorovatelnost nad vaší vyrovnávání zatížení, který je zásadní složkou v rámci své infrastruktury. HAProxy vydává podrobné zprávy Syslog při provozu v režimu TCP a HTTP. Ty mohou být odeslány do řady nástrojů pro protokolování, jako je rsyslog.
HAProxy lodě s HALog příkaz-line nástroj, který zjednodušuje analýzy log dat, když potřebujete informace o typy reakcí uživatelů jsou stále a zatížení na vaše servery. Můžete také získat vizuální o zdraví svých serverů pomocí HAProxy Stats stránku nebo HAProxy Enterprise real-Time Dashboard.
Chcete vědět, kdy je takový obsah publikován? Přihlaste se k odběru tohoto blogu nebo nás sledujte na Twitteru. Můžete se také připojit ke konverzaci na Slack! HAProxy Enterprise kombinuje HAProxy s funkcemi podnikové třídy, jako je řídicí panel v reálném čase a Prémiová podpora. Kontaktujte nás a dozvíte se více nebo se zaregistrujte na bezplatnou zkušební verzi ještě dnes!