Úvod do HAProxy Přihlášení

přihlášení haproxy

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 (frontendbackendlisten 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-normaldefaults 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.

haproxy tcp protokolu, formátu

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.

haproxy http formát protokolu

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.

haproxy čas nahrávání

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

haproxy enterprise real-time dashboard

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!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.