Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Logbicher sinn e wichtege Bestanddeel vum System, wat Iech erlaabt ze verstoen datt et funktionnéiert (oder net funktionnéiert) wéi erwaart. Ënnert de Bedéngungen vun der Mikroservicearchitektur gëtt d'Aarbecht mat Logbicher eng separat Disziplin vun der Special Olympiad. Et gi vill Themen déi musse behandelt ginn:

  • wéi Logbicher aus der Applikatioun ze schreiwen;
  • wou Logbicher ze schreiwen;
  • wéi Logbicher fir Stockage a Veraarbechtung ze liwweren;
  • wéi Dir Logbicher veraarbecht a späichert.

D'Benotzung vun aktuell populäre Containeriséierungstechnologien füügt Sand uewen op der Rake am Beräich vun de Problemléisungsoptiounen.

Just iwwer dëst ass den Transkript vum Bericht vum Yuri Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vu Logbicher"

Wien egal, w.e.g. ënnert der Kaz.

Mäin Numm ass Yuri Bushmelev. Ech schaffen fir Lazada. Haut wäert ech schwätzen iwwer wéi mir eis Logbicher gemaach hunn, wéi mir se gesammelt hunn a wat mir do schreiwen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Wou kommen mir hier? Wien si mir? Lazada ass den #1 Online Händler a sechs Länner a Südostasien. All dës Länner sinn ënner Rechenzentren verdeelt. Et sinn elo am Ganzen 4 Datenzenter.Firwat ass dat wichteg? Well e puer Decisioune wieren der Tatsaach, datt et e ganz schwaache Lien tëscht den Zentren ass. Mir hunn eng Microservice Architektur. Ech war iwwerrascht ze fannen datt mir schonn 80 Mikroservicer hunn. Wéi ech d'Aufgab mat Logbicher ugefaang hunn, waren et der nëmmen 20. Plus, et gëtt e zimlech grousst Stéck PHP-Legacy, mat deem ech och muss liewen a matmaachen. All dëst generéiert fir eis am Moment méi wéi 6 Millioune Messagen pro Minutt am ganze System. Weider wäert ech weisen, wéi mir probéieren domat ze liewen, a firwat dat esou ass.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Dir musst mat dëse 6 Millioune Messagen iergendwéi liewen. Wat solle mir mat hinnen maachen? 6 Millioune Messagen néideg:

  • aus der App schécken
  • akzeptéieren fir Liwwerung
  • liwweren fir Analyse a Lagerung.
  • analyséieren
  • Buttek iergendwéi.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Wann et dräi Millioune Messagen, Ech hat ongeféier de selwechte Bléck. Well mir ugefaang mat e puer Penny. Et ass kloer datt Applikatiounsprotokoller do geschriwwe sinn. Zum Beispill, konnt net mat der Datebank konnektéieren, konnt mat der Datebank konnektéieren, awer konnt net eppes liesen. Awer nieft dësem schreift jidderee vun eise Mikroservicer och en Zougangsprotokoll. All Ufro, déi am Mikroservice ukomm ass, fällt an de Logbuch. Firwat maache mir dat? Entwéckler wëllen fäeg sinn ze verfollegen. All Zougangsprotokoll enthält den Traceidfeld, no deem e speziellen Interface dann d'ganz Kette entspant an d'Spuer schéin weist. D'Spuer weist wéi d'Demande gaangen ass, an dëst hëlleft eis Entwéckler méi séier mat all onbekannte Gerempels ëmzegoen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Wéi mat et ze liewen? Elo wäert ech kuerz de Beräich vun Optiounen beschreiwen - wéi dëse Problem allgemeng geléist ass. Wéi de Problem vun Sammelen, Transfert an Stockage Logbicher léisen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Wéi aus der Applikatioun ze schreiwen? Et ass kloer datt et verschidde Weeër ginn. Besonnesch gëtt et bescht Praxis, wéi fashionable Komeroden eis soen. Et ginn zwou Zorte vun al Schoul, wéi Grousspappen gesot. Et ginn aner Weeër.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Mat der Sammlung vu Logbicher ass d'Situatioun ongeféier d'selwecht. Et ginn net sou vill Méiglechkeeten fir dëse bestëmmten Deel ze léisen. Et gi méi vun hinnen, awer nach net sou vill.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Awer mat der Liwwerung a spéider Analyse fänkt d'Zuel vu Variatiounen un ze explodéieren. Ech wäert elo net all Optioun beschreiwen. Ech denken, datt d'Haaptoptioune jidderengem bekannt sinn, deen un d'Thema interesséiert war.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Ech weisen Iech wéi mir et zu Lazada gemaach hunn a wéi et alles ugefaang huet.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Virun engem Joer sinn ech op Lazada komm a gouf op de Logprojet geschéckt. Do war et esou. De Log vun der Applikatioun gouf op stdout a stderr geschriwwen. Alles gouf op eng fashionable Manéier gemaach. Awer dunn hunn d'Entwéckler et aus de Standardstreamen erausgehäit, an da wäerten d'Infrastrukturspezialisten et iergendwéi erausfannen. Tëscht Infrastrukturspezialisten an Entwéckler ginn et och Verëffentlecher déi gesot hunn: "äh ... bon, loosst eis se einfach an eng Datei mat enger Schuel wéckelen, an dat ass et." A well dat alles an engem Container ass, hunn se et direkt am Container selwer gewéckelt, de Verzeechnes dobannen kartéiert an do gesat. Ech mengen et ass jidderengem zimlech offensichtlech wat geschitt ass.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Loosst eis e bësse méi wäit kucken. Wéi mir dës Logbicher geliwwert hunn. Een huet den td-Agent erausgesicht, deen eigentlech fléissend awer net ganz fléissend ass. Ech verstinn nach ëmmer net d'Relatioun vun dësen zwee Projeten, awer si schéngen ongeféier d'selwecht ze sinn. An dës fléissend, am Ruby geschriwwen, liest Logdateien, parséiert se an JSON mat e puer reguläre Ausdréck. Duerno goufen se op de Kafka geschéckt. Ausserdeem, am Kafka, hu mir 4 separat Themen fir all API. Firwat 4? Well et Live gëtt, gëtt et Inszenéierung, a well et stdout a stderr gëtt. Entwéckler produzéieren se, an Infrastrukturaarbechter mussen se am Kafka kreéieren. Ausserdeem gouf de Kafka vun engem aneren Departement kontrolléiert. Dofir war et néideg en Ticket ze kreéieren sou datt se do 4 Themen fir all API erstallt hunn. Jiddereen huet et vergiess. Am Allgemengen war et Dreck an Offall.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Wat hu mer dann domat gemaach? Mir geschéckt et zu Kafka. Weider vum Kafka ass d'Halschent vun de Logbicher op Logstash geflunn. Déi aner Halschent vun de Logbicher goufe gedeelt. E puer sinn op eng Graylog geflunn, anerer op en aneren Graylog. Als Resultat ass dëst alles an een Elasticsearch Cluster geflunn. Dat ass, all dës Chaos ass um Enn do gefall. Dir musst dat net maachen!

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Dëst ass wéi et ausgesäit wann Dir vun uewen kuckt. Dir musst dat net maachen! Hei sinn d'Problemberäicher direkt mat Zuelen markéiert. Et ginn der eigentlech méi, mä 6 si wierklech problematesch, mat deenen eppes muss gemaach ginn. Ech wäert elo iwwer se separat soen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Hei (1,2,3) schreiwen mir Dateien an deementspriechend ginn et dräi Raken hei gläichzäiteg.

Déi éischt (1) ass datt mir se iergendwou musse schreiwen. Et ass net ëmmer wënschenswäert eng API d'Fäegkeet ze ginn direkt op eng Datei ze schreiwen. Et ass wënschenswäert datt d'API an engem Container isoléiert ass, an nach besser, datt et nëmme liesen ass. Ech sinn e System Administrateur, also ech hunn eng liicht alternativ Vue vun dëse Saachen.

Den zweete Punkt (2,3) ass datt mir vill Ufroen op d'API kommen. D'API schreift vill Daten an eng Datei. D'Fichier'en wuessen. Mir mussen se rotéieren. Well soss kënnt Dir keng Discs do späicheren. D'Rotatioun vun hinnen ass schlecht well se iwwer d'Schuel an e Verzeechnes ëmgeleet ginn. Et gëtt kee Wee mir kënnen et rotéieren. Dir kënnt d'Applikatioun net soen fir d'Gränn nei opzemaachen. Well d'Entwéckler kucken Iech wéi en Narr: "Wéi eng Descriptoren? Mir schreiwen allgemeng op stdout. D'Frameworks gemaach copytruncate zu logrotate, déi just eng Kopie vun der Datei mécht an d'Original trunks. Deementspriechend, tëscht dëse Kopieprozesser leeft Disk Space normalerweis aus.

(4) Mir haten verschidde Formater a verschiddene APIen. Si waren liicht anescht, awer regexp misst anescht geschriwwe ginn. Well et alles vun Puppet geréiert gouf, gouf et eng grouss Rëtsch Klassen mat hiren eegene Kakerlaken. Plus, td-Agent kéint meeschtens Erënnerung iessen, domm sinn, hie konnt just maachen wéi wann hien schafft an näischt mécht. Ausserhalb war et onméiglech ze verstoen datt hien näischt mécht. Am beschten fällt hien, an iergendeen wäert hien spéider ophuelen. Méi präzis, eng Alarm fléien an, an een geet an hieft et mat hiren Hänn.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

(6) An déi meescht Dreck an Offall - et war elastesch Sich. Well et war eng al Versioun. Well mir deemools keng engagéiert Meeschteren haten. Mir haten heterogen Logbicher, deenen hir Felder iwwerlappe kënnen. Verschidde Logbicher vu verschiddenen Uwendungen kéinte mat deene selwechte Feldnimm geschriwwe ginn, awer gläichzäiteg kënnen et verschidden Daten dobannen sinn. Dat ass, ee Log kënnt mat engem Integer an engem Feld, zum Beispill, Niveau. En anere Log kënnt mat engem String am Niveaufeld. An der Verontreiung vu statesche Mapping, stellt sech sou eng wonnerbar Saach eraus. Wann no der Indexrotatioun e Message mat engem String fir d'éischt an der Elasticsearch ukomm ass, da liewen mir normal. A wann déi éischt mat Integer ukomm ass, da ginn all spéider Messagen, déi mam String ukomm sinn, einfach verworf. Well den Terrain Typ passt net.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Mir hunn ugefaang dës Froen ze stellen. Mir hu beschloss net no de Schëllegen ze sichen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Awer eppes muss gemaach ginn! Déi offensichtlech Saach ass datt mir Standarde mussen opstellen. Mir hate schonn e puer Standarden. E puer hu mir e bësse méi spéit bruecht. Glécklecherweis war en eenzege Logformat fir all APIen zu där Zäit scho guttgeheescht. Et ass direkt an de Service Interaktioun Standarden geschriwwe. Deementspriechend sollen déi, déi Logbicher kréien wëllen, se an dësem Format schreiwen. Wann iergendeen keng Logbicher an dësem Format schreift, da garantéieren mir näischt.

Weider, ech géif gären en eenzege Standard fir d'Methoden vun Opnam, Liwwerung a Sammelt Logbicher hunn. Eigentlech, wou se ze schreiwen, a wéi se liwweren. Déi ideal Situatioun ass wann Projeten déi selwecht Bibliothéik benotzen. Et gëtt eng separat Logbibliothéik fir Go, et gëtt eng separat Bibliothéik fir PHP. Jiddereen dee mir hunn, jidderee soll se benotzen. Am Moment géif ech soen, datt mir ëm 80 Prozent geléngen. Awer e puer iessen weider Kaktusse.

An do (op der Rutsch) fänkt de "SLA fir Log Liwwerung" kaum op. Et ass nach net do, mä mir schaffen drun. Well et ass ganz bequem wann infra seet, datt wann Dir an esou an esou engem Format op esou an esou eng Plaz schreift an net méi wéi N Messagen pro Sekonn, da liwwere mir dat héchstwahrscheinlech do. Et hëlt vill Kappwéi ewech. Wann et en SLA gëtt, dann ass et einfach super!

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Wéi hu mir ugefaang de Problem ze léisen? D'Haaptrei Rake war mat td-Agent. Et war net kloer wou eis Logbicher higoen. Ginn se geliwwert? Ginn se? Wou sinn se iwwerhaapt? Dofir gouf decidéiert den td-Agent duerch den éischten Artikel ze ersetzen. Optiounen fir wat et ze ersetzen, hunn ech hei kuerz beschriwwen.

Fléissend. Als éischt hunn ech hien op enger fréierer Aarbecht begéint, an hien ass och periodesch do gefall. Zweetens, dëst ass d'selwecht, nëmmen am Profil.

filebeat. Wéi war et gutt fir eis? Der Tatsaach, datt hien an Go ass, a mir hunn eng grouss Expertise an Go. Deementspriechend, wann iwwerhaapt, kënne mir et iergendwéi eis selwer addéieren. Dofir hu mir et net geholl. Sou datt et net emol eng Versuchung wier et fir Iech selwer ze schreiwen.

Déi offensichtlech Léisung fir de Sysadmin ass all Zorte vu Syslogs an dëser Quantitéit (syslog-ng/rsyslog/nxlog).

Oder schreift eppes vun Ärem eegenen, awer mir hunn et verworf, souwéi Filebeat. Wann Dir eppes schreift, dann ass et besser eppes nëtzlech fir d'Geschäft ze schreiwen. Fir Logbicher ze liwweren, ass et besser eppes fäerdeg ze huelen.

Dofir ass d'Wiel tatsächlech erofgaang op e Choix tëscht syslog-ng an rsyslog. Ech hunn op rsyslog hänke gelooss einfach well mir scho Klassen fir rsyslog am Puppet haten, an ech hunn keen offensichtlechen Ënnerscheed tëscht hinnen fonnt. Wat ass syslog, wat ass syslog. Jo, e puer Dokumentatioun ass méi schlëmm, e puer besser. Hie weess dës Manéier, an hien mécht et anescht.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

An e bëssen iwwer rsyslog. Als éischt ass et cool well et vill Moduler huet. Et huet eng mënschlech liesbar RainerScript (modern Konfiguratiounssprooch). En fantastesche Bonus ass datt mir d'Behuele vum td-Agent mat senge Standard Tools emuléiere kënnen, an näischt huet fir Uwendungen geännert. Dat ass, mir änneren td-Agent op rsyslog, a beréieren nach net alles anescht. An direkt kréien mir eng Aarbecht Liwwerung. Als nächst ass mmnormalize déi cool Saach iwwer rsyslog. Et erlaabt Iech Logbicher ze analyséieren, awer net mat Grok a Regexp. Et mécht en abstrakte Syntaxbaum. Et parséiert Logbicher op vill déiselwecht Manéier wéi e Compiler de Quellcode parséiert. Dëst erlaabt Iech ganz séier ze schaffen, wéineg CPU iessen, an am Allgemengen ass et just eng ganz cool Saach. Et ginn eng Rëtsch vun anere Bonus. Ech wäert net op si bleiwen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

rsyslog huet vill méi Nodeeler. Si sinn ongeféier d'selwecht wéi Bonus. D'Haaptprobleemer sinn datt Dir fäeg ass et ze kachen, an Dir musst eng Versioun auswielen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Mir hunn decidéiert datt mir Logbicher an engem Unix Socket schreiwen. An net an /dev/log, well do hu mir e Mess vu Systemprotokoller, et gëtt an dëser Pipeline journaléiert. Also loosst eis op e personaliséierte Socket schreiwen. Mir wäerten et zu engem separaten Regelen befestegt. Loosst eis mat näischt amëschen. Alles wäert transparent a verständlech sinn. Also hu mir eigentlech gemaach. De Verzeechnes mat dëse Sockets ass standardiséiert an un all Container weidergeleet. Container kënnen d'Socket gesinn, déi se brauchen, opmaachen a schreiwen.

Firwat net e Fichier? Well jiddereen huet gelies Artikel iwwer Badushechka, déi probéiert d'Datei op den Docker weiderzebréngen, a festgestallt, datt nom Restart vum rsyslog de Dateideskriptor ännert, an den Docker verléiert dës Datei. Hien hält soss eppes oppen, awer net déi selwecht Socket wou se schreiwen. Mir hunn décidéiert datt mir dëse Problem ëmgoen, a gläichzäiteg de Blockéierungsproblem ëmgoen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Rsyslog mécht d'Aktiounen op der Rutsch uginn a schéckt Logbicher op entweder Relais oder Kafka. Kafka follegt déi al Manéier. Rayleigh - Ech hu probéiert pure rsyslog ze benotzen fir Logbicher ze liwweren. Ouni Message Queue, benotzt Standard rsyslog Tools. Prinzipiell funktionnéiert et.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Awer et ginn Nuancen mat wéi se se spéider an dësen Deel stoppt (Logstash / Graylog / ES). Dësen Deel (rsyslog-rsyslog) gëtt tëscht Datenzenter benotzt. Hei ass e kompriméierte tcp Link, deen Iech erlaabt Bandbreedung ze spueren an deementspriechend d'Wahrscheinlechkeet erhéijen datt mir e puer Logbicher vun engem aneren Datenzenter kréien wann de Kanal voll ass. Well mir hunn Indonesien, wou alles schlecht ass. Do läit de konstante Problem.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Mir hu geduecht wéi mir tatsächlech iwwerwaachen, mat wéi enger Wahrscheinlechkeet d'Logbicher déi mir aus der Applikatioun opgeholl hunn dat Enn erreechen? Mir hu beschloss Metriken unzefänken. Rsyslog huet seng eege Statistiken Kollektioun Modul, déi huet eng Zort vun counters. Zum Beispill kann et Iech d'Gréisst vun der Schlaang weisen, oder wéivill Messagen fir esou an esou eng Aktioun erakomm sinn. Dir kënnt schonn eppes vun hinnen huelen. Plus, et huet Mooss counters datt Dir konfiguréieren kann, an et wäert weisen Iech, Zum Beispill, d'Zuel vun Messagen, datt e puer API opgeholl huet. Als nächst hunn ech rsyslog_exporter am Python geschriwwen, a mir hunn alles op Prometheus geschéckt a geplot. Mir wollte wierklech Graylog Metriken, awer bis elo hu mir keng Zäit fir se opzestellen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Wat sinn d'Problemer? De Problem ass opgestan mat der Tatsaach, datt mir erausfonnt hunn (PLËSCHT!) datt eis Live APIs 50k Messagen pro Sekonn schreiwen. Dëst ass nëmmen Live API ouni Inszenéierung. A Graylog weist eis nëmmen 12 dausend Messagen pro Sekonn. An eng raisonnabel Fro ass opgestan, wou sinn d'Iwwerreschter? Vun deem mir ofgeschloss hunn, datt Graylog einfach net eens kann. Mir hunn gekuckt, an tatsächlech, Graylog mat Elasticsearch huet dëse Flow net beherrscht.

Als nächst, aner Entdeckungen déi mir um Wee gemaach hunn.

Schreift zu Socket sinn gespaart. Wéi ass et geschitt? Wann ech rsyslog fir d'Liwwerung benotzt hunn, hu mir iergendwann de Kanal tëscht den Datenzenter gebrach. D'Liwwerung ass op enger Plaz eropgaang, d'Liwwerung ass op enger anerer Plaz eropgaang. All dëst ass erofgaang op eng Maschinn mat APIen déi op d'rsyslog Socket schreiwen. Et war eng Schlaang. Dann ass d'Schlaang fir op d'Unix Socket ze schreiwen opgefëllt, wat par défaut 128 Päck ass. An déi nächst Schreif() an den Applikatiounsblocken. Wa mir d'Bibliothéik gekuckt hunn, déi mir a Go Uwendungen benotzen, gouf et do geschriwwen datt d'Schreiwen op d'Socket am net-blockéierende Modus geschitt. Mir ware sécher datt näischt blockéiert gouf. Well mir gelies hunn Artikel iwwer Badushechkadeen doriwwer geschriwwen huet. Mee et gëtt e Moment. Et war och eng onendlech Loop ronderëm dësen Uruff, an deem et e konstante Versuch gouf fir e Message an d'Socket ze drécken. Mir hunn hien net gemierkt. Ech hu missen d'Bibliothéik ëmschreiwen. Zënterhier huet et e puer Mol geännert, awer elo hu mir Spären an all Subsystemer lassgelooss. Dofir kënnt Dir rsyslog stoppen an näischt wäert falen.

Et ass néideg fir d'Gréisst vun de Schlaangen ze iwwerwaachen, wat hëlleft net op dës Rake ze trëppelen. Als éischt kënne mir iwwerwaachen wann mir ufänken Messagen ze verléieren. Zweetens kënne mir iwwerwaachen datt mir am Fong Problemer mat der Liwwerung hunn.

An en aneren désagréabele Moment - d'Verstäerkung ëm 10 Mol an enger Mikroservicearchitektur ass ganz einfach. Mir hunn net sou vill erakommen Ufroen, awer wéinst der Grafik laanscht déi dës Messagen weider lafen, wéinst den Zougangsprotokoller, erhéijen mir tatsächlech d'Laascht op d'Logbicher ëm ongeféier zéng Mol. Leider hat ech keng Zäit fir déi genau Zuelen ze berechnen, awer Mikroservicer sinn wat se sinn. Dëst muss am Kapp behalen ginn. Et stellt sech eraus datt am Moment de Log Sammlung Subsystem am meeschte gelueden ass zu Lazada.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Wéi léisen ech den Elastesche Sichproblem? Wann Dir séier Logbicher op enger Plaz muss kréien, fir net iwwer all Maschinnen ze lafen an se do ze sammelen, benotzt Dateilagerung. Dëst ass garantéiert ze schaffen. Et gëtt vun all Server gemaach. Dir musst just Disken do hänken a Syslog setzen. Duerno sidd Dir garantéiert datt Dir all Logbicher op enger Plaz hutt. Da wäert et méiglech sinn elastesche Sich, Graylog oder soss eppes ze konfiguréieren. Awer Dir wäert schonn all d'Logbicher hunn, an zousätzlech kënnt Dir se späicheren, souwäit et genuch Disk Arrays gëtt.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Zu der Zäit vu mengem Bericht huet de Schema ugefaang sou ze kucken. Mir hunn praktesch opgehalen an de Fichier ze schreiwen. Elo wäerte mir héchstwahrscheinlech d'Iwwerreschter ausschalten. Op lokalen Maschinnen déi d'API lafen, stoppen mir op Dateien ze schreiwen. Als éischt gëtt et Dateilagerung, wat ganz gutt funktionnéiert. Zweetens, dës Maschinnen lafen dauernd aus Plaz, Dir musst et permanent iwwerwaachen.

Dësen Deel mat Logstash a Graylog, et schwëmmt wierklech. Dofir musst Dir et lass ginn. Dir musst eng wielen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Mir hu beschloss Logstash a Kibana ze falen. Well mir hunn eng Sécherheet Departement. Wat ass d'Verbindung? D'Verbindung ass datt Kibana ouni X-Pack an ouni Schëld erlaabt Iech net Zougangsrechter op d'Logbicher z'ënnerscheeden. Dofir hu si Graylog geholl. Et huet alles. Ech hunn et net gär, awer et funktionnéiert. Mir kaaft nei Hardware, installéiert e frësch Graylog do, an geplënnert all Logbicher mat strikt Formater op eng separat Graylog. Mir hunn de Problem mat verschiddenen Zorte vun de selwechte Felder organisatoresch geléist.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Wat genee ass am neie Graylog abegraff. Mir hunn just alles am Docker geschriwwen. Mir hunn eng Rëtsch Serveren geholl, dräi Kafka Instanzen ausgerullt, 7 Graylog Server Versioun 2.3 (well ech Elasticsearch Versioun 5 wollt). All dëst gouf op Iwwerfäll vun der HDD opgeworf. Mir hunn en Indexéierungsquote vu bis zu 100 Tausend Messagen pro Sekonn gesinn. Mir hunn d'Figur gesinn datt 140 Terabytes vun Daten pro Woch.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

An erëm eng Rake! Mir hunn zwee Verkaf kommen an. Mir sinn iwwer 6 Millioune Posts geplënnert. Mir Graylog hu keng Zäit fir ze kauen. Iergendwéi muss een erëm iwwerliewen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Esou hu mir iwwerlieft. Dobäi e puer méi Serveren an SSDs. Am Moment liewen mir esou. Elo kauen mir schonn 160k Messagen pro Sekonn. Mir hunn d'Limite nach net getraff, also ass et net kloer wéi vill mir realistesch dovunner erauskommen.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Dëst sinn eis Pläng fir d'Zukunft. Vun dësen, wierklech, ass déi wichtegst wahrscheinlech héich Disponibilitéit. Mir hunn et nach net. Verschidden Autoen sinn op déi selwecht Manéier opgestallt, mee bis elo geet alles duerch een Auto. Et ass néideg Zäit ze verbréngen fir e Failover tëscht hinnen opzestellen.

Sammelt Metriken aus Graylog.

Maacht eng Tariflimit fir datt mir eng verréckt API hunn déi eis Bandbreedung net ëmbréngt an alles anescht.

A schliisslech, ënnerschreift eng Aart SLA mat Entwéckler fir datt mir sou vill kënnen déngen. Wann Dir méi schreift, dann sorry.

A schreiwen Dokumentatioun.

Yury Bushmelev "Kaart vun enger Rake am Feld vun der Sammelen an der Liwwerung vun Logbicher" - Transkript vum Bericht

Kuerz, d'Resultater vun allem wat mir erlieft hunn. Éischtens, d'Standarden. Zweetens, Syslog ass Kuch. Drëttens funktionnéiert rsyslog genau sou wéi et op der Rutsch geschriwwe steet. A loosst eis op d'Froen kommen.

Är Froen.

Är Fro: Firwat hu se decidéiert net ze huelen ... (Filebeat?)

Äntwert: Muss op eng Datei schreiwen. Ech wollt wierklech net. Wann Är API Dausende vu Messagen pro Sekonn schreift, och wann Dir eemol d'Stonn rotéiert, ass dëst nach ëmmer keng Optioun. Dir kënnt op Päif schreiwen. Zu deem d'Entwéckler mech gefrot hunn: "Wat geschitt wann de Prozess an deem mir schreiwen fällt"? Ech hu just net fonnt wat ech hinnen ze äntweren, a sot: "Ma, ok, loosst eis dat net maachen."

Är Fro: Firwat schreift Dir net nëmmen Logbicher op HDFS?

ÄntwertA: Dëst ass de nächste Schrëtt. Mir hunn am Ufank driwwer geduecht, awer well et de Moment keng Ressourcen gëtt fir domat ze handelen, hänkt et an eiser laangfristeg Léisung.

Är Fro: E Kolonnformat wier méi gëeegent.

Äntwert: Ech verstinn. Mir sinn "fir" mat zwou Hänn.

Är Fro: Dir schreift op rsyslog. Béid TCP an UDP sinn do verfügbar. Awer wann UDP, wéi garantéiert Dir d'Liwwerung?

ÄntwertA: Et ginn zwee Punkten. Als éischt soen ech jidderengem direkt datt mir d'Liwwerung vu Logbicher net garantéieren. Well wann d'Entwéckler kommen a soen: "Loosst eis ufänken finanziell Donnéeën do ze schreiwen, an Dir wäert et iergendwou fir eis setzen am Fall wou eppes geschitt", äntweren mir hinnen: "Ganz! Loosst d'blockéieren op Schreiwen un der Socket ufänken, a maachen et an Transaktiounen, sou datt Dir garantéiert sinn et an der Socket fir eis an sécherstellen, datt mir et vun der anerer Säit krut. An dee Moment gëtt jiddereen direkt onnéideg. A wann net, wéi eng Froen hu mir dann? Wann Dir wëllt net e schreiwen op de Socket garantéieren, firwat wäerte mir Liwwerung garantéieren? Mir maachen déi bescht Effort. Mir probéieren wierklech sou vill wéi méiglech a sou gutt wéi méiglech ze liwweren, awer mir ginn keng 100% Garantie. Dofir braucht Dir keng finanziell Donnéeën do ze schreiwen. Et gi Transaktiounsdatenbanken fir dëst.

Är Fro: Wann d'API e Message un de Logbicher generéiert an d'Kontroll op Mikroservicer iwwerdréit, hutt Dir de Problem begéint datt Messagen vu verschiddene Mikroservicer an der falscher Uerdnung ukommen? Wéinst deem entsteet Duercherneen.

ÄntwertA: Et ass normal datt se an enger anerer Uerdnung kommen. Dir musst prett sinn fir dëst. Well all Reseau Liwwerung garantéiert net Uerdnung fir Iech, oder Dir musst speziell Ressourcen op dëser verbréngen. Wa mir Dateispeicher huelen, späichert all API Logbicher op seng eege Datei. Éischter zerstéiert rsyslog se do an Verzeichnisser. All API huet seng eege Logbicher do, wou Dir kënnt goen a kucken, an da kënnt Dir se mat der Zäitstempel an dësem Log vergläichen. Wa se an Graylog kucken goen, da ginn se do no Zäitstempel zortéiert. Do wäert alles gutt sinn.

Är Fro: Zäitstempel kann duerch Millisekonnen variéieren.

Äntwert: Den Zäitstempel gëtt vun der API selwer generéiert. Dëst ass tatsächlech de ganze Punkt. Mir hunn NTP. D'API generéiert en Zäitstempel schonn am Message selwer. Et gëtt net vun rsyslog bäigefüügt.

Är Fro: Interaktioun tëscht Datenzenteren ass net ganz kloer. Am Kader vum Datenzenter ass kloer wéi d'Logbicher gesammelt a veraarbecht goufen. Wéi ass d'Interaktioun tëscht Datenzenteren? Oder lieft all Datenzenter säin eegent Liewen?

Äntwert: Bal. Mir hunn all Land an engem Datenzenter. Mir hunn de Moment keng Verbreedung, sou datt ee Land a verschiddenen Rechenzentren plazéiert ass. Dofir ass et net néideg se ze kombinéieren. Bannen an all Zentrum gëtt et e Log Relais. Dëst ass en Rsyslog Server. An Tatsaach, zwee Gestioun Maschinnen. Si sinn op déi selwecht Manéier ageriicht. Mä fir de Moment geet de Verkéier just duerch ee vun hinnen. Si protokolléiert alles aggregéiert. Et huet eng Disk Queue just am Fall. Si dréckt d'Logbicher a schéckt se an den zentrale Rechenzentrum (Singapur), wou se weider am Graylog vergëft ginn. An all Datenzenter huet seng eege Dateilagerung. Am Fall wou mir d'Verbindung verluer hunn, hu mir all d'Logbicher do. Si wäerten do bleiwen. Si ginn do gespäichert.

Är Fro: Kritt Dir Logbicher vun do bei anormalen Situatiounen?

Äntwert: Dir kënnt dohinner goen (op d'Dateispäicherung) a kucken.

Är Fro: Wéi iwwerwaacht Dir datt Dir keng Logbicher verléiert?

Äntwert: Mir verléieren se eigentlech, a mir iwwerwaachen et. D'Iwwerwaachung huet virun engem Mount ugefaang. D'Bibliothéik déi d'Go APIs benotzen huet Metriken. Si kann zielen wéivill Mol si gescheitert ze Socket ze schreiwen. Do gëtt et am Moment eng komplizéiert Heuristik. Do ass e Puffer. Et probéiert e Message vun et zu Socket ze schreiwen. Wann de Puffer iwwerflësseg ass, fänkt se un. An hien zielt wéi vill hien se erofgelooss huet. Wann d'Zähler do iwwerlafen, wësse mer doriwwer. Si kommen elo och op Prometheus, an Dir kënnt d'Grafiken zu Grafana gesinn. Dir kënnt Alarmer astellen. Mee et ass nach net kloer, wien se se schécken.

Är Fro: An elasticsearch späichert Dir Logbicher mat Redundanz. Wéivill Repliken hutt Dir?

Äntwert: Eng Replica.

Är Fro: Ass et just eng Zeil?

Äntwert: Dëst ass de Meeschter an d'Replique. D'Donnéeë ginn an Duplikat gespäichert.

Är Fro: Hutt Dir d'Gréisst vum rsyslog-Puffer iergendwéi ugepasst?

Äntwert: Mir schreiwen Datagramme op e personaliséierten Unix Socket. Dëst setzt eis direkt eng Begrenzung vun 128 Kilobyte op. Méi kënne mir net dra schreiwen. Mir hunn dëst an de Standard geschriwwen. Wien wëll an d'Späichere kommen, si schreiwen 128 Kilobytes. Bibliothéiken, ausserdeem, ofgeschnidden, a setzen e Fändel datt de Message ofgeschnidden ass. Mir hunn e spezielle Feld am Norm vum Message selwer, wat weist ob et während der Opnam ofgeschnidden gouf oder net. Also hu mir d'Méiglechkeet dëse Moment ze verfolgen.

Fro: Schreift Dir gebrach JSON?

Äntwert: Broken JSON gëtt entweder während dem Relais verworf well de Paket ze grouss ass. Oder Graylog gëtt erofgelooss, well et net fäeg ass JSON ze parséieren. Awer et ginn Nuancen hei, déi musse fixéiert ginn, a si si meeschtens un rsyslog gebonnen. Ech hunn do schonn e puer Emissiounen ausgefëllt, un déi nach geschafft musse ginn.

Fro: Firwat Kafka? Hutt Dir RabbitMQ probéiert? Graylog net ënner esou Laascht bäidréit?

Äntwert: Et geet net mat Graylog. An de Graylog hëlt Form un. Et ass wierklech problematesch fir hien. Hien ass eng Saach. An tatsächlech ass et net néideg. Ech schreiwen léiwer vum rsyslog direkt op elasticsearch an kucken dann Kibana. Mä mir mussen de Problem mat de Sécherheetsleit léisen. Dëst ass eng méiglech Variant vun eiser Entwécklung wa mir Graylog erauswerfen a Kibana benotzen. Logstash wäert kee Sënn maachen. Well ech kann dat selwecht mat rsyslog maachen. An et huet e Modul fir op elasticsearch ze schreiwen. Mat Graylog probéieren mir iergendwéi ze liewen. Mir hunn et souguer e bëssen ugepasst. Mee et ass nach Plaz fir Verbesserung.

Iwwer Kafka. Dat ass wéi et historesch geschitt ass. Wéi ech ukomm sinn, war et schonn do, a Logbicher goufe scho geschriwwen. Mir hu just eise Stärekoup opgehuewen an d'Logbicher an et geplënnert. Mir managen hien, mir wëssen wéi hien sech fillt. Wat RabbitMQ ugeet... mir hu Problemer mat RabbitMQ. An RabbitMQ entwéckelt fir eis. Mir hunn et an der Produktioun, an et waren Problemer mat et. Elo, virum Verkaf, géif hie shamaniséiert ginn, an hie géif ufänken normal ze schaffen. Awer virdru war ech net prett et an d'Produktioun ze verëffentlechen. Et gëtt nach ee Punkt. Graylog kann AMQP 0.9 Versioun liesen an rsyslog kann AMQP 1.0 Versioun schreiwen. An et gëtt keng eenzeg Léisung déi souwuel an der Mëtt ka maachen. Et gëtt entweder deen een oder deen aneren. Also fir de Moment nëmmen de Kafka. Mä et ginn och Nuancen. Well omkafka vun der Versioun vun rsyslog datt mir benotzen kann de ganze Message Prellbock verléieren, datt et aus rsyslog scooped. Soulaang wéi mir et ophalen.

Fro: Benotzt Dir Kafka well Dir et hat? Net fir en aneren Zweck benotzt?

Äntwert: Kafka, déi vum Data Science Team benotzt gouf. Dëst ass e komplett separat Projet, iwwer deen ech leider näischt soen kann. Ech weess et net. Si gouf vum Data Science Team geleet. Wann d'Logbicher ugefaang hunn, hu se decidéiert et ze benotzen, fir net hir eegen ze setzen. Elo hu mir Graylog aktualiséiert, a mir hunn d'Kompatibilitéit verluer, well et eng al Versioun vu Kafka gëtt. Mir hu missen eis selwer maachen. Zur selwechter Zäit hu mir dës véier Themen fir all API lassgelooss. Mir hunn eng breet Top fir all live gemaach, eng breet breet Top fir all Inszenéierung a mir schéissen just alles do. Graylog rakes all dëst parallel.

Fro: Firwat brauche mir dëse Schamanismus mat Sockets? Hutt Dir probéiert de syslog Log Driver fir Container ze benotzen.

Äntwert: Deemools, wou mir dës Fro gestallt hunn, hate mir ugespaant Relatioune mam Docker. Et war docker 1.0 oder 0.9. Docker selwer war komesch. Zweetens, wann Dir och Logbicher dran dréckt ... Ech hunn en onverifizéierte Verdacht datt et all d'Logbicher duerch sech selwer passéiert, duerch den Docker Daemon. Wa mir eng API verréckt hunn, da lafen de Rescht vun den APIen an der Tatsaach datt se net stdout a stderr schécken kënnen. Ech weess net wou dat féiert. Ech hunn e Verdacht um Niveau vum Gefill datt et net néideg ass den Docker Syslog Chauffer op dëser Plaz ze benotzen. Eis funktionell Tester Departement huet säin eegene Graylog Cluster mat Logbicher. Si benotzen Docker Log Chauffeuren an alles schéngt do gutt ze sinn. Mee si schreiwen direkt GELF dem Graylog. Am Moment wou mer alles ugefaang hunn, brauche mir et just ze schaffen. Vläicht méi spéit, wann ee kënnt a seet, datt et säit honnert Joer normal funktionnéiert, wäerte mir probéieren.

Fro: Dir liwwert tëscht Datenzenter mat rsyslog. Firwat net op Kafka?

Äntwert: Mir maachen dat, an esou ass et wierklech. Aus zwee Grënn. Wann de Kanal komplett dout ass, da klëmmt all eis Logbicher, och an enger kompriméierter Form, net duerch. A Kafka erlaabt hinnen einfach am Prozess ze verléieren. Op dës Manéier gi mir d'Steche vun dëse Logbicher lass. Mir benotzen just Kafka an dësem Fall direkt. Wa mir e gudde Kanal hunn a se wëllen befreien, da benotze mir hiren rsyslog. Awer tatsächlech kënnt Dir et opstellen sou datt et fällt wat et net duerchkomm ass. Am Moment benotze mir just rsyslog Liwwerung direkt iergendwou, iergendwou Kafka.

Source: will.com

Setzt e Commentaire