AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Kjo është një histori se si ne përdorim kontejnerët në ambientin produktiv, veçanërisht nën Kubernetes. Artikulli është dedikuar mbledhjes së metrike dhe logeve nga kontejnerët, si dhe ndërtimit të imazheve.

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Ne jemi nga kompania fintech Exness, e cila zhvillon shërbime për tregtimin online dhe produkte fintech për B2B dhe B2C. Në R&D tonin ka shumë ekipe të ndryshme, me mbi 100 punonjës në departamentin e zhvillimit.

Ne paraqesim ekipin që është përgjegjës për platformën për mbledhjen dhe ekzekutimin e kodit nga zhvilluesit tanë. Me konkretisht, ne jemi përgjegjës për mbledhjen, ruajtjen dhe ofrimin e metrikeve, logeve dhe ngjarjeve nga aplikacionet. Aktualisht operojmë me përafërsisht tri mijë kontejnerë Docker në ambientin produktiv, mbështesim depo big data me kapacitet prej 50 TB dhe ofrojmë zgjidhje arkitektonike që ndërtohen rreth infrastrukturës tonë: Kubernetes, Rancher dhe ofrues të ndryshëm të cloud-it publik. 

Motivimi ynë

ÇfarĂ« po digjet? Askush nuk mund ta pĂ«rgjigjet. Ku Ă«shtĂ« qendra? E kuptojmĂ« me vĂ«shtirĂ«si. Kur ka filluar tĂ« digjet? Mund tĂ« zbulohet, por jo menjĂ«herĂ«. 

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Pse disa kontejnerë ndalen, ndërsa të tjerë bien? Cili kontejner e shkaktoi atë? Sepse nga jashtë, kontejnerët duken të njëjtë, por brenda secili ka Neo-n e vet.

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Zhvilluesit tanë janë djem të aftë. Ata bëjnë shërbime të mira që sjellin fitim për kompaninë. Por ndodhin gabime, kur kontejnerët me aplikacione shkojnë në mënyrë kaotike. Një kontejner konsumon shumë CPU, një tjetër rrjetin, një i tretë operacionet e hyrjes dhe daljes, ndërsa një i katërt gjithashtu nuk dihet se çfarë bën me soketët. Të gjithë këta e dërgojnë broçkullën, dhe anija po fundoset. 

Agjentët

Për të kuptuar çfarë po ndodh brenda, ne vendosëm të instalojmë agjentët direkt në kontejnerë.

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Këta agjentë janë programe mbikëqyrëse, që mbajnë kontejnerët në gjendje të tillë që të mos shkatërrojnë njëri-tjettrin. Agjentët janë standardizuar, dhe kjo lejon standardizimin e qasjes për mirëmbajtjen e kontejnerëve. 

Në rastin tonë, agjentët duhet të ofrojnë loge në një format standard, të etiketuar dhe me throttling. Po ashtu, ata duhet të na ofrojnë metrika standardizuar, të zgjerueshme nga ana e aplikacioneve biznesore.

Nën agjentët gjithashtu nënkuptohen utilitetet për operacion dhe mirëmbajtje, që janë të afta të funksionojnë në sisteme të ndryshme orkestrimi, duke mbështetur imazhe të ndryshme (Debian, Alpine, Centos etj.).

Së fundi, agjentët duhet të mbështesin një CI/CD të thjeshtë, që përfshin skedarë Docker. Në të kundërt, anija do të shembet, sepse kontejnerët do të fillojnë të dërgohen nëpër "binarë" të shtrembër.

Procesi i ndërtimit dhe struktura e imazhit të synuar

PĂ«r tĂ« pasur gjithçka tĂ« standardizuar dhe menaxhueshme, Ă«shtĂ« e nevojshme tĂ« ndiqet njĂ« proces standard ndĂ«rtimi. Prandaj, ne vendosĂ«m tĂ« ndĂ«rtojmĂ« kontejnerĂ« me kontejnerĂ« — njĂ« recursivitet i tillĂ«.

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Këtu kontejnerët paraqiten si kontura të plota. Po ashtu vendosëm të futim në to distribucione, për të mos e bërë "jetën si një mollë". Pse e bëmë këtë, do ta tregojmë më poshtë.
 
Si rezultat, kemi krijuar njĂ« mjet ndĂ«rtimi — njĂ« kontejner tĂ« versionit tĂ« caktuar, i cili lidhet me versione tĂ« caktuara distribucionesh dhe me versione tĂ« caktuara skenesh.

Si e aplikojmë atë? Ne kemi Docker Hub, ku ndodhet kontejneri. Ne e pasqyrojmë atë brenda sistemit tonë, për të eliminuar varësitë e jashtme. Kemi krijuar një kontejner të markuar me ngjyrë të verdhë. Ne krijojmë një template për të instaluar në kontejner të gjitha distribucionet dhe skenat e nevojshme për ne. Pas kësaj, ne ndërtojmë imazhin gati për t'u përdorur: zhvilluesit e vendosin brenda kodin dhe varësitë e tyre specifike. 

ÇfarĂ« Ă«shtĂ« e mirĂ« nĂ« kĂ«tĂ« qasje? 

  • SĂ« pari, kontrolli i plotĂ« i versioneve tĂ« mjeteve tĂ« ndĂ«rtimit – kontejneri i ndĂ«rtimit, versionet e skripteve dhe distribucioneve. 
  • SĂ« dyti, ne arritĂ«m standardizimin: krijojmĂ« modele nĂ« njĂ« mĂ«nyrĂ« tĂ« njĂ«jtĂ«, imazhe ndĂ«rmjetĂ«se dhe gati pĂ«r t'u pĂ«rdorur. 
  • SĂ« treti, kontejnerĂ«t na ofrojnĂ« portabilitet. Sot ne pĂ«rdorim Gitlab, dhe nesĂ«r do tĂ« kalojmĂ« nĂ« TeamCity ose Jenkins dhe do tĂ« jemi nĂ« gjendje tĂ« ekzekutojmĂ« po ashtu kontejnerĂ«t tanĂ«. 
  • SĂ« katĂ«rti, minimizimi i varĂ«sive. Nuk e kemi vendosur rastĂ«sisht distribucionet nĂ« kontejner, sepse kjo lejon qĂ« tĂ« mos i shkarkojmĂ« ato çdo herĂ« nga Interneti. 
  • SĂ« pesti, Ă«shtĂ« rritur shpejtĂ«sia e ndĂ«rtimit – pranimi i kopjeve lokale tĂ« imazheve na lejon tĂ« mos harxhojmĂ« kohĂ« nĂ« shkarkim, pasi e kemi njĂ« imazh lokal. 

Me fjalë të tjera, ne arritëm një proces ndërtimi të kontrollueshëm dhe fleksibël. Ne përdorim mjete të njëjta për të ndërtuar çdo kontejner me versionim të plotë. 

Si funksionon procedura jonë e ndërtimit

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Grumbullimi aktivizohet me njĂ« komandĂ«, procesi kryhet nĂ« imazh (i shĂ«nuar me tĂ« kuqe). Zhvilluesi ka njĂ« skedĂ« Docker (e shĂ«nuar me tĂ« verdhĂ«), ne e renditim atĂ« duke zĂ«vendĂ«suar variablat me vlera. NdĂ«rkohĂ«, shtojmĂ« header dhe footer — kĂ«to janĂ« agjentĂ«t tanĂ«. 

Header-in e shton distribucionet nga imazhet përkatëse. Ndërsa footer-i vendos brenda shërbimet tona, konfiguron nisjen e ngarkesës punuese, regjistrimin dhe agjentët e tjerë, zëvendëson entrypoint etj. 

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Ne menduam për një kohë të gjatë nëse duhet të vendosim një supervizor. Në fund të fundit, vendosëm se na nevojitet. Zgjodhëm S6. Supervizori ofron menaxhimin e kontejnerit: lejon lidhjen me të në rast të rënies së procesit kryesor dhe ofron menaxhim manual të kontejnerit pa e ri-krijuar atë. Loget dhe metrikat janë procese që ekzekutohen brenda kontejnerit. Edhe ato duhet të kontrollohen në një farë mënyre, dhe ne e bëjmë këtë përmes supervizorit. Së fundi, S6 merr përsipër kryerjen e punëve të shtëpisë, përpunimin e sinjaleve dhe detyra të tjera.

Pasi aplikojmë sisteme të ndryshme orkestrimi, pas grumbullimit dhe aktivizimit, kontejneri duhet të kuptojë se në cilin mjedis ndodhet dhe të veprojë sipas situatës. Për shembull:
Kjo na lejon të grumbullojmë një imazh dhe ta aktivizojmë atë në sisteme të ndryshme orkestrimi, dhe ai do të aktivizohet duke marrë parasysh specifikat e këtij sistemi orkestrimi.

 AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Për të njëjtin kontejner, ne marrim struktura të ndryshme procesi në Docker dhe Kubernetes:

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Ngarkesa ekzekutohet nĂ«n supervizorin S6. Vini re collector dhe events — kĂ«to janĂ« agjentĂ«t tanĂ« qĂ« pĂ«rgjigjen pĂ«r logĂ«t dhe metrikat. NĂ« Kubernetes ata nuk ekzistojnĂ«, ndĂ«rsa nĂ« Docker po. Pse? 

NĂ«se shohim specifikimin e 'pod'-it (kĂ«tu e tutje – Kubernetes pod), do tĂ« shohim se kontejneri events ekzekutohet nĂ« podin ku ndodhet njĂ« kontejner tjetĂ«r collector, qĂ« kryen funksionin e mbledhjes sĂ« metrikave dhe logĂ«ve. Ne mund tĂ« shfrytĂ«zojmĂ« mundĂ«sitĂ« e Kubernetes: aktivizimin e kontejnerĂ«ve nĂ« njĂ« pod, nĂ« njĂ« hapĂ«sirĂ« procesi dhe/ose rrjeti tĂ« njĂ«jtĂ«. NĂ« thelb, tĂ« implementojmĂ« agjentĂ«t tanĂ« dhe tĂ« realizojmĂ« disa funksione. Dhe nĂ«se ky kontejner aktivizohet nĂ« Docker, ai do tĂ« marrĂ« tĂ« njĂ«jtat mundĂ«si, domethĂ«nĂ« do tĂ« jetĂ« nĂ« gjendje tĂ« dĂ«rgojĂ« logĂ« dhe metrika, pasi agjentĂ«t do tĂ« aktivizohen brenda. 

Metrikat dhe logët

Dërgimi i metrikave dhe logëve është një detyrë e komplikuar. Zgjidhja e saj lidhet me disa aspekte.
Infrastruktura krijohet për të përmbushur ngarkesën e dobishme, jo për shpërndarjen masive të logëve. Pra, ky proces duhet të kryhet me kërkesa minimale për burimet e kontejnerëve. Ne përpiqemi të ndihmojmë zhvilluesit tanë: "Merrni një kontejner nga Docker Hub, hapeni, dhe ne do të mund të dërgojmë logët." 

Aspekti i dytĂ« — kufizimi i vĂ«llimit tĂ« logĂ«ve. NĂ«se disa kontejnerĂ« pĂ«rjetojnĂ« njĂ« shpĂ«rthim tĂ« vĂ«llimit tĂ« logĂ«ve (njĂ« aplikacion nĂ« cikĂ«l tregon stack-trace), rritet ngarkesa mbi CPU, lidhjet dhe sistemin e pĂ«rpunimit tĂ« logĂ«ve, dhe kjo ndikon nĂ« funksionimin e hostit nĂ« pĂ«rgjithĂ«si dhe tĂ« kontejnerĂ«ve tĂ« tjerĂ« nĂ« host, ndonjĂ«herĂ« duke çuar nĂ« "rĂ«nien" e hostit. 

Aspekti i tretĂ« — Ă«shtĂ« e nevojshme tĂ« mbĂ«shteten sa mĂ« shumĂ« metodika tĂ« mbledhjes sĂ« metrikave nga kutia. Nga leximi i skedarĂ«ve dhe pyetja e pikĂ«s sĂ« fundit Prometheus deri te pĂ«rdorimi i protokolleve specifike tĂ« aplikacioneve.

Dhe aspekti i fundit — Ă«shtĂ« e nevojshme tĂ« minimizohet konsumimi i burimeve.

Ne zgjodhëm një zgjidhje open-source në Go të quajtur Telegraf. Ky është një konktor universal që mbështet më shumë se 140 lloje të kanalizimeve të hyjshëm (input plugins) dhe 30 lloje të kanalizimeve të dalëse (output plugins). Ne e kemi përmirësuar dhe tani do t'ju tregojmë se si e përdorim atë në shembullin e Kubernetes. 

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Supozoni se zhvilluesi shpërndan ngarkesën dhe Kubernetes merr një kërkesë për të krijuar një pod. Në këtë moment për çdo pod krijohet automatikisht një kontejner i quajtur Collector (ne përdorim mutation webhook). Collector është agjenti ynë. Në fillim, ky kontejner e konfiguroni veten për të punuar me Prometheus dhe sistemin e mbledhjes së logëve.

  • PĂ«r kĂ«tĂ«, ai pĂ«rdor anotimet e pod-it, dhe nĂ« varĂ«si tĂ« pĂ«rmbajtjes sĂ« saj, krijon, le tĂ« themi, njĂ« pikĂ« fundit tĂ« Prometheus; 
  • NĂ« bazĂ« tĂ« specifikacioneve tĂ« pod-it dhe parametrave specifikĂ« tĂ« kontejnerĂ«ve, vendos se si tĂ« dĂ«rgojĂ« logĂ«t.

Ne mbledhim logët përmes Docker API: zhvilluesit mjafton t'i vendosin ato në stdout ose stderr, dhe pastaj Collector do të merret me to. Logët mblidhen në grupe me disa vonesa, për të parandaluar mbingarkesën e mundshme të hostit. 

Metrikat mblidhen sipas instancave tĂ« ngarkesĂ«s sĂ« punĂ«s (proceseve) nĂ« kontejnerĂ«. Gjithçka shĂ«nohet me etiketa: namespace, pod dhe kĂ«shtu me radhĂ«, dhe pastaj konvertohet nĂ« formatin Prometheus – dhe bĂ«het e disponueshme pĂ«r mbledhje (pĂ«rveç logĂ«ve). Po ashtu, logĂ«t, metrikat dhe ngjarjet ne i dĂ«rgojmĂ« nĂ« Kafka dhe mĂ« pas:

  • LogĂ«t janĂ« tĂ« disponueshme nĂ« Graylog (pĂ«r analizĂ« vizuale);
  • LogĂ«t, metrikat, dhe ngjarjet dĂ«rgohen nĂ« Clickhouse pĂ«r ruajtje afatgjatĂ«.

Po ashtu punon gjithçka në AWS, vetëm se ne zëvendësojmë Graylog me Kafka me Cloudwatch. Dërgojmë logët atje, dhe gjithçka bëhet shumë e convenient: menjëherë kuptohet, për cilin klaster dhe kontejner i takojnë. E njëjta gjë vlen edhe për Google Stackdriver. Kjo do të thotë se skema jonë punon si on-premise me Kafka, ashtu edhe në cloud. 

Nëse nuk kemi Kubernetes me pod-e, skema bëhet pak më e komplikuar, por punon sipas të njëjtave principe.

AOL publikoi sistemin e indeksimit të trafikut në rrjet Moloch 2.3

Brenda kontejnerit ekzekutohen procese të njëjta, të orkestruara me S6. Të njëjtat procese janë të ngarkuara brenda një kontejneri.

NĂ« fund

Krijuam një zgjidhje të plotë për ndërtimin dhe ekzekutimin e imazheve në prodhim, me mundësi për mbledhjen dhe dërgimin e logëve dhe metrikave:

  • Kemi zhvilluar njĂ« qasje tĂ« standardizuar pĂ«r ndĂ«rtimin e imazheve, mbi tĂ« cilĂ«n kemi zhvilluar CI-shabllonet;
  • AgjentĂ«t pĂ«r mbledhjen e tĂ« dhĂ«nave janĂ« zgjerime tona Telegraf. I kemi testuar mirĂ« nĂ« prodhim;
  • PĂ«rdorim webhook tĂ« mutation pĂ«r implementimin e kontejnerĂ«ve me agjentĂ« nĂ« pod-e; 
  • Jemi integruar nĂ« ekosistemin Kubernetes/Rancher;
  • Mund tĂ« ekzekutojmĂ« kontejnerĂ« tĂ« njĂ«jtĂ« nĂ« sisteme tĂ« ndryshme orkestrimi dhe tĂ« marrim rezultatin qĂ« presim;
  • Krijuam njĂ« konfigurim tĂ« plotĂ« dinamik pĂ«r menaxhimin e kontejnerĂ«ve. 

Bashkëautor: Ilya Prudnikov

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster