ŽurnÄli ir svarÄ«ga sistÄmas daļa, kas ļauj saprast, ka tÄ darbojas (vai nedarbojas), kÄ paredzÄts. Mikropakalpojumu arhitektÅ«ras apstÄkļos darbs ar baļķiem kļūst par atseviŔķu speciÄlÄs olimpiÄdes disciplÄ«nu. Ir daudz problÄmu, kas jÄrisina:
- kÄ rakstÄ«t žurnÄlus no lietojumprogrammas;
- kur rakstÄ«t žurnÄlus;
- kÄ nogÄdÄt baļķus uzglabÄÅ”anai un apstrÄdei;
- kÄ apstrÄdÄt un uzglabÄt žurnÄlus.
Å obrÄ«d populÄro konteinerizÄcijas tehnoloÄ£iju izmantoÅ”ana problÄmu risinÄÅ”anas iespÄju jomÄ liek grÄbeklim virsÅ« smiltis.
TieÅ”i par to ir Jurija BuÅ”meļeva ziÅojuma "GrÄbekļa karte baļķu savÄkÅ”anas un piegÄdes jomÄ" atÅ”ifrÄjums.
Kam tas interesÄ, lÅ«dzu zem kaÄ·a.
Mani sauc Jurijs BuÅ”meļevs. Es strÄdÄju Lazada. Å odien es runÄÅ”u par to, kÄ mÄs veidojÄm savus baļķus, kÄ mÄs tos savÄcÄm un ko mÄs tur rakstÄm.
No kurienes mÄs esam? Kas mÄs esam? Lazada ir vadoÅ”ais tieÅ”saistes mazumtirgotÄjs seÅ”Äs DienvidaustrumÄzijas valstÄ«s. Visas Ŕīs valstis ir sadalÄ«tas pa datu centriem. Tagad kopÄ ir 1 datu centri. KÄpÄc tas ir svarÄ«gi? Jo daži lÄmumi bija tÄpÄc, ka starp centriem ir ļoti vÄja saikne. Mums ir mikropakalpojumu arhitektÅ«ra. Es biju pÄrsteigts, atklÄjot, ka mums jau ir 4 mikropakalpojumi. Kad sÄku uzdevumu ar žurnÄliem, to bija tikai 80. TurklÄt ir diezgan liels PHP mantojuma gabals, ar kuru arÄ« man ir jÄsadzÄ«vo un jÄsamierinÄs. Tas viss mums Å”obrÄ«d rada vairÄk nekÄ 20 miljonus ziÅojumu minÅ«tÄ visai sistÄmai. TÄlÄk es parÄdÄ«Å”u, kÄ mÄs cenÅ”amies ar to sadzÄ«vot un kÄpÄc tas tÄ ir.
Ar Å”iem 6 miljoniem ziÅojumu kaut kÄ ir jÄsadzÄ«vo. Ko mums ar viÅiem darÄ«t? NepiecieÅ”ami 6 miljoni ziÅojumu:
- sūtīt no lietotnes
- pieÅemt piegÄdei
- piegÄdÄt analÄ«zei un uzglabÄÅ”anai.
- analizÄt
- kaut kÄ uzglabÄt.
Kad bija trÄ«s miljoni ziÅojumu, man bija apmÄram tÄds pats izskats. Jo sÄkÄm ar dažiem santÄ«miem. Skaidrs, ka tur ir rakstÄ«ti pieteikumu žurnÄli. PiemÄram, nevarÄja izveidot savienojumu ar datu bÄzi, varÄja izveidot savienojumu ar datu bÄzi, bet nevarÄja kaut ko nolasÄ«t. Bet papildus tam katrs mÅ«su mikropakalpojums raksta arÄ« piekļuves žurnÄlu. Katrs pieprasÄ«jums, kas pienÄk mikropakalpojumÄ, iekrÄ«t žurnÄlÄ. KÄpÄc mÄs to darÄm? IzstrÄdÄtÄji vÄlas, lai tie varÄtu izsekot. KatrÄ piekļuves žurnÄlÄ ir izsekoÅ”anas lauks, saskaÅÄ ar kuru Ä«paÅ”s interfeiss pÄc tam atrit visu Ä·Ädi un skaisti parÄda izsekoÅ”anu. IzsekoÅ”ana parÄda, kÄ tika izpildÄ«ts pieprasÄ«jums, un tas palÄ«dz mÅ«su izstrÄdÄtÄjiem ÄtrÄk tikt galÄ ar nezinÄmiem atkritumiem.
KÄ ar to sadzÄ«vot? Tagad es Ä«si aprakstÄ«Å”u opciju lauku - kÄ Å”Ä« problÄma kopumÄ tiek atrisinÄta. KÄ atrisinÄt baļķu savÄkÅ”anas, pÄrvietoÅ”anas un uzglabÄÅ”anas problÄmu.
KÄ rakstÄ«t no pieteikuma? Ir skaidrs, ka ir dažÄdi veidi. Jo Ä«paÅ”i ir labÄkÄ prakse, kÄ mums stÄsta modes biedri. Ir divu veidu vecÄ skola, kÄ teica vectÄvi. Ir arÄ« citi veidi.
Ar baļķu vÄkÅ”anu situÄcija ir aptuveni tÄda pati. Lai atrisinÄtu Å”o konkrÄto daļu, nav tik daudz iespÄju. ViÅu ir vairÄk, bet vÄl nav tik daudz.
TaÄu ar piegÄdi un turpmÄko analÄ«zi variÄciju skaits sÄk eksplodÄt. Tagad neaprakstÄ«Å”u katru variantu. Es domÄju, ka galvenÄs iespÄjas ir labi zinÄmas visiem, kam Ŕī tÄma interesÄja.
Es jums parÄdÄ«Å”u, kÄ mums tas izdevÄs LazadÄ un kÄ tas viss sÄkÄs.
Pirms gada atbraucu uz Lazadu un mani nosÅ«tÄ«ja uz baļķu projektu. Tur bija Å”Ädi. Lietojumprogrammas žurnÄls tika rakstÄ«ts uz stdout un stderr. Viss tika darÄ«ts modernÄ veidÄ. Bet tad izstrÄdÄtÄji to izmeta no standarta straumÄm, un tad infrastruktÅ«ras speciÄlisti to kaut kÄ izdomÄs. Starp infrastruktÅ«ras speciÄlistiem un izstrÄdÄtÄjiem ir arÄ« izdevÄji, kuri teica: "u... nu, vienkÄrÅ”i iesaiÅosim tos failÄ ar Äaulu, un viss." Un tÄ kÄ tas viss ir konteinerÄ, viÅi to iesaiÅoja tieÅ”i paÅ”Ä konteinerÄ, kartÄja iekÅ”Ä esoÅ”o direktoriju un ievietoja to. Es domÄju, ka visiem ir diezgan skaidrs, kas notika.
PaskatÄ«simies mazliet tÄlÄk. KÄ mÄs piegÄdÄjÄm Å”os baļķus. KÄds izvÄlÄjÄs td-agent, kas faktiski ir fluentd, bet ne gluži brÄ«vi. Es joprojÄm nesaprotu Å”o divu projektu attiecÄ«bas, bet Ŕķiet, ka tie ir par vienu un to paÅ”u. Un Å”is fluentd, kas rakstÄ«ts Ruby valodÄ, lasÄ«ja žurnÄlfailus, parsÄja tos JSON, izmantojot kaut kÄdas regulÄras izteiksmes. Tad viÅi tika nosÅ«tÄ«ti uz Kafku. TurklÄt KafkÄ mums bija 4 atseviŔķas tÄmas katrai API. KÄpÄc 4? Jo ir tieÅ”raide, ir iestudÄjums un tÄpÄc, ka ir stdout un stderr. IzstrÄdÄtÄji tos ražo, un infrastruktÅ«ras darbiniekiem tie jÄizveido KafkÄ. TurklÄt Kafku kontrolÄja cita nodaļa. TÄpÄc vajadzÄja izveidot biļeti, lai viÅi tur izveidoja 4 tÄmas katrai api. Visi par to aizmirsa. KopumÄ tÄ bija miskaste un atkritumi.
Ko mÄs ar to darÄ«jÄm tÄlÄk? MÄs to nosÅ«tÄ«jÄm kafkai. TÄlÄk no Kafkas puse baļķu aizlidoja uz LogstaÅ”u. Otra puse no baļķiem tika dalÄ«ta. Daži lidoja uz vienu Greylog, daži uz citu Graylog. RezultÄtÄ tas viss ieplÅ«da vienÄ Elasticsearch klasterÄ«. Tas ir, viss Å”is haoss galu galÄ iekrita tur. Jums tas nav jÄdara!
TÄ tas izskatÄs, skatoties no augÅ”as. Jums tas nav jÄdara! Å eit problemÄtiskÄs vietas uzreiz tiek atzÄ«mÄtas ar cipariem. PatiesÄ«bÄ viÅu ir vairÄk, bet 6 ir patieÅ”Äm problemÄtiskas, ar kurÄm kaut kas jÄdara. Par tiem tagad pastÄstÄ«Å”u atseviŔķi.
Å eit (1,2,3) mÄs rakstÄm failus un attiecÄ«gi Å”eit ir trÄ«s grÄbekļi uzreiz.
Pirmais (1) ir tas, ka mums tie kaut kur jÄuzraksta. Ne vienmÄr ir vÄlams nodroÅ”inÄt API iespÄju rakstÄ«t tieÅ”i failÄ. Ir vÄlams, lai API bÅ«tu izolÄts konteinerÄ, un vÄl labÄk, lai tas bÅ«tu tikai lasÄms. Esmu sistÄmas administrators, tÄpÄc man ir nedaudz alternatÄ«vs skatÄ«jums uz Ŕīm lietÄm.
Otrais punkts (2,3.) ir tÄds, ka API saÅem daudz pieprasÄ«jumu. API failÄ ieraksta daudz datu. Faili pieaug. Mums tie ir jÄpagriež. Jo citÄdi tur nevarÄs saglabÄt nevienu disku. To pagrieÅ”ana ir slikta, jo tie tiek novirzÄ«ti caur Äaulu uz direktoriju. MÄs to nekÄdi nevaram pagriezt. JÅ«s nevarat likt lietojumprogrammai atkÄrtoti atvÄrt rokturus. Jo izstrÄdÄtÄji uz tevi skatÄ«sies kÄ uz muļķi: āKÄdi deskriptori? MÄs parasti rakstÄm uz stdout. Ietvariem tika veikta kopÄÅ”ana par logrotate, kas tikai izveido faila kopiju un atdala oriÄ£inÄlu. AttiecÄ«gi starp Å”iem kopÄÅ”anas procesiem diska vieta parasti izbeidzas.
(4) Mums bija dažÄdi formÄti dažÄdÄs API. Tie bija nedaudz atŔķirÄ«gi, bet regexp bija jÄraksta savÄdÄk. TÄ kÄ to visu vadÄ«ja Lelle, bija liels bars klaÅ”u ar saviem tarakÄniem. TurklÄt td aÄ£ents lielÄko daļu laika varÄja Äst atmiÅu, bÅ«t stulbs, viÅÅ” varÄja vienkÄrÅ”i izlikties, ka strÄdÄ, un neko nedarÄ«t. ÄrÄji nevarÄja saprast, ka viÅÅ” neko nedara. LabÄkajÄ gadÄ«jumÄ viÅÅ” nokritÄ«s, un vÄlÄk kÄds viÅu pacels. PrecÄ«zÄk, ielidos trauksme, un kÄds ies un pacels to ar rokÄm.
(6) Un visvairÄk atkritumu un atkritumu - tas bija elasticsearch. Jo tÄ bija veca versija. Jo mums tajÄ laikÄ nebija veltÄ«tu meistaru. Mums bija neviendabÄ«gi baļķi, kuru lauki varÄja pÄrklÄties. Ar vienÄdiem lauku nosaukumiem var rakstÄ«t dažÄdus dažÄdu lietojumprogrammu žurnÄlus, bet tajÄ paÅ”Ä laikÄ iekÅ”pusÄ var bÅ«t dažÄdi dati. Tas ir, viens žurnÄls nÄk ar veselu skaitli laukÄ, piemÄram, lÄ«menÄ«. Citam žurnÄlam ir pievienota virkne lÄ«meÅa laukÄ. Ja nav statiskÄs kartÄÅ”anas, izrÄdÄs tik brÄ«niŔķīga lieta. Ja pÄc indeksa pagrieÅ”anas elasticsearch pirmais ieradÄs ziÅojums ar virkni, tad mÄs dzÄ«vojam normÄli. Un, ja pirmais tika saÅemts ar Integer, tad visi nÄkamie ziÅojumi, kas tika saÅemti ar virkni, tiek vienkÄrÅ”i izmesti. TÄ kÄ lauka veids neatbilst.
MÄs sÄkÄm uzdot Å”os jautÄjumus. NolÄmÄm vainÄ«gos nemeklÄt.
Bet kaut kas ir jÄdara! AcÄ«mredzami ir tas, ka mums ir jÄizveido standarti. Mums jau bija daži standarti. Dažus atvedÄm nedaudz vÄlÄk. Par laimi, tajÄ laikÄ jau tika apstiprinÄts viens žurnÄla formÄts visÄm API. Tas ir ierakstÄ«ts tieÅ”i pakalpojumu mijiedarbÄ«bas standartos. AttiecÄ«gi tiem, kas vÄlas saÅemt žurnÄlus, tie jÄraksta Å”ÄdÄ formÄtÄ. Ja kÄds neraksta žurnÄlus Å”ÄdÄ formÄtÄ, tad mÄs neko negarantÄjam.
TurklÄt es vÄlÄtos vienotu standartu baļķu reÄ£istrÄÅ”anas, piegÄdes un savÄkÅ”anas metodÄm. PatiesÄ«bÄ, kur tos rakstÄ«t un kÄ tos piegÄdÄt. IdeÄla situÄcija ir tad, ja projekti izmanto vienu un to paÅ”u bibliotÄku. Ir atseviŔķa reÄ£istrÄÅ”anas bibliotÄka Go, ir atseviŔķa bibliotÄka PHP. Ikvienam, kas mums ir, visiem tie ir jÄizmanto. Å obrÄ«d es teiktu, ka mums tas izdodas par 80 procentiem. Bet daži turpina Äst kaktusus.
Un tur (slaidÄ) āSLA baļķu piegÄdeiā tik tikko sÄk parÄdÄ«ties. TÄ vÄl nav, bet mÄs pie tÄ strÄdÄjam. Jo tas ir ļoti Ärti, ja infra saka, ka, ja tu rakstÄ«si tÄdÄ un tÄdÄ formÄtÄ uz tÄdu un tÄdu vietu un ne vairÄk kÄ N ziÅas sekundÄ, tad mÄs to visticamÄk tur nogÄdÄsim. Tas noÅem daudzas galvassÄpes. Ja ir SLA, tad tas ir vienkÄrÅ”i lieliski!
KÄ mÄs sÄkÄm risinÄt problÄmu? Galvenais grÄbeklis bija ar td-agent. Nebija skaidrs, kur nonÄk mÅ«su baļķi. Vai tie tiek piegÄdÄti? Vai viÅi iet? Kur viÅi vispÄr ir? TÄpÄc tika nolemts aizstÄt td-agent ar pirmo vienumu. Å eit es Ä«sumÄ izklÄstÄ«ju iespÄjas, ar ko to aizstÄt.
Fluentd. PirmkÄrt, es saskÄros ar viÅu iepriekÅ”ÄjÄ darbÄ, un viÅÅ” arÄ« periodiski tur krita. OtrkÄrt, tas ir tas pats, tikai profilÄ.
filebeat. KÄ tas mums bija labs? Fakts, ka viÅÅ” ir Go, un mums ir liela pieredze Go. AttiecÄ«gi, ja kas, mÄs to varÄtu kaut kÄ pievienot sev. TÄpÄc mÄs to neÅÄmÄm. Lai pat nebÅ«tu kÄrdinÄjuma sÄkt to pÄrrakstÄ«t sev.
AcÄ«mredzams risinÄjums sysadminam ir visu veidu syslogs Å”ÄdÄ daudzumÄ (syslog-ng/rsyslog/nxlog).
Vai arÄ« uzrakstiet kaut ko savu, bet mÄs to atmetÄm, tÄpat kÄ filebeat. Ja kaut ko raksti, tad labÄk uzrakstÄ«t ko noderÄ«gu biznesam. Lai piegÄdÄtu baļķus, labÄk Åemt kaut ko gatavu.
TÄpÄc izvÄle faktiski bija izvÄle starp syslog-ng un rsyslog. Es sliecos uz rsyslog vienkÄrÅ”i tÄpÄc, ka mums jau bija rsyslog nodarbÄ«bas programmÄ Puppet, un es neatradu starp tÄm acÄ«mredzamu atŔķirÄ«bu. Kas ir syslog, kas ir syslog. JÄ, daži dokumenti ir sliktÄki, daži labÄki. ViÅÅ” to zina, un viÅÅ” to dara savÄdÄk.
Un nedaudz par rsyslog. PirmkÄrt, tas ir forÅ”i, jo tajÄ ir daudz moduļu. Tam ir cilvÄkiem lasÄma RainerScript (mÅ«sdienu konfigurÄcijas valoda). Lielisks bonuss ir tas, ka mÄs varÄtu lÄ«dzinÄties td-agent darbÄ«bai ar tÄ standarta rÄ«kiem, un lietojumprogrammÄm nekas nav mainÄ«jies. Tas nozÄ«mÄ, ka mÄs mainÄm td-agent uz rsyslog un vÄl nepieskaramies visam pÄrÄjam. Un nekavÄjoties saÅemam darba piegÄdi. NÄkamais, mmnormalize ir forÅ”ais rsyslog. Tas ļauj parsÄt žurnÄlus, bet ne ar Grok un regexp. Tas veido abstraktu sintakses koku. Tas parsÄ Å¾urnÄlus tÄdÄ paÅ”Ä veidÄ, kÄ kompilators parsÄ avota kodu. Tas ļauj strÄdÄt ļoti Ätri, Äst maz CPU, un kopumÄ tÄ ir ļoti forÅ”a lieta. Ir virkne citu bonusu. Es pie tiem nekavÄÅ”os.
rsyslog ir daudz vairÄk trÅ«kumu. Tie ir aptuveni tÄdi paÅ”i kÄ prÄmijas. GalvenÄs problÄmas ir tÄdas, ka jums ir jÄspÄj to pagatavot, un jums ir jÄizvÄlas versija.
NolÄmÄm, ka žurnÄlus rakstÄ«sim unix ligzdÄ. Un ne mapÄ /dev/log, jo tur mums ir sistÄmas žurnÄlu haoss, Å”ajÄ konveijerÄ ir žurnÄls. TÄtad rakstÄ«sim uz pielÄgotu ligzdu. MÄs to pievienosim atseviŔķam noteikumu kopumam. Nejaucam neko. Viss bÅ«s caurspÄ«dÄ«gs un saprotams. TÄ mÄs patiesÄ«bÄ darÄ«jÄm. Direktorija ar Ŕīm ligzdÄm ir standartizÄta un pÄrsÅ«tÄ«ta uz visiem konteineriem. Konteineri var redzÄt vajadzÄ«go ligzdu, atvÄrt un rakstÄ«t uz to.
KÄpÄc ne failu? Jo visi ir lasÄ«juÅ”i
Rsyslog veic slaidÄ norÄdÄ«tÄs darbÄ«bas un nosÅ«ta žurnÄlus uz releju vai Kafka. Kafka iet pa veco ceļu. Rayleigh - es mÄÄ£inÄju izmantot tÄ«ru rsyslog, lai piegÄdÄtu žurnÄlus. Bez ziÅojumu rindas, izmantojot standarta rsyslog rÄ«kus. BÅ«tÄ«bÄ tas darbojas.
TaÄu ir nianses, kÄ tÄs vÄlÄk ievietot Å”ajÄ daÄ¼Ä (Logstash/Graylog/ES). Å Ä« daļa (rsyslog-rsyslog) tiek izmantota starp datu centriem. Å eit ir saspiesta tcp saite, kas ļauj ietaupÄ«t joslas platumu un attiecÄ«gi kaut kÄ palielinÄt varbÅ«tÄ«bu, ka mÄs saÅemsim dažus žurnÄlus no cita datu centra, kad kanÄls bÅ«s pilns. Jo mums ir IndonÄzija, kur viss ir slikti. LÅ«k, kur slÄpjas pastÄvÄ«gÄ problÄma.
MÄs domÄjÄm par to, kÄ mÄs faktiski uzraugÄm, ar kÄdu varbÅ«tÄ«bu no lietojumprogrammas ierakstÄ«tie žurnÄli sasniedz Å”o mÄrÄ·i? MÄs nolÄmÄm sÄkt metriku. Rsyslog ir savs statistikas vÄkÅ”anas modulis, kurÄ ir sava veida skaitÄ«tÄji. PiemÄram, tas var parÄdÄ«t rindas lielumu vai to, cik ziÅojumu ir saÅemts Å”ÄdÄ un tÄdÄ darbÄ«bÄ. No viÅiem jau var kaut ko paÅemt. TurklÄt tam ir pielÄgoti skaitÄ«tÄji, kurus varat konfigurÄt, un tas parÄdÄ«s, piemÄram, dažu API reÄ£istrÄto ziÅojumu skaitu. TÄlÄk es PythonÄ uzrakstÄ«ju rsyslog_exporter, un mÄs to visu nosÅ«tÄ«jÄm Prometheus un izveidojÄm grafikus. MÄs ļoti vÄlÄjÄmies Graylog metriku, taÄu lÄ«dz Å”im mums nav bijis laika to iestatÄ«t.
KÄdas ir problÄmas? ProblÄma radÄs ar faktu, ka mÄs uzzinÄjÄm (pÄkÅ”Åi!), ka mÅ«su Live API raksta 50 12 ziÅojumu sekundÄ. Tas ir tikai tieÅ”raides API bez inscenÄÅ”anas. Un Graylog mums parÄda tikai XNUMX tÅ«kstoÅ”us ziÅojumu sekundÄ. Un radÄs pamatots jautÄjums, kur paliek paliekas? No kÄ mÄs secinÄjÄm, ka Greylog vienkÄrÅ”i netiek galÄ. MÄs paskatÄ«jÄmies, un patieÅ”Äm, Greylog ar Elasticsearch nepÄrvalda Å”o plÅ«smu.
TÄlÄk, citi atklÄjumi, ko esam veikuÅ”i ceļÄ.
RakstÄ«Å”ana kontaktligzdÄ ir bloÄ·Äta. KÄ tas notika? Kad piegÄdei izmantoju rsyslog, kÄdÄ brÄ«dÄ« mÄs pÄrrÄvÄm kanÄlu starp datu centriem. PiegÄde pacÄlÄs vienÄ vietÄ, piegÄde pacÄlÄs citÄ vietÄ. Tas viss ir nonÄcis maŔīnÄ ar API, kas raksta uz rsyslog ligzdu. Tur bija rinda. Tad aizpildÄ«jÄs rinda rakstÄ«Å”anai uz unix ligzdu, kas pÄc noklusÄjuma ir 128 paketes. Un nÄkamais rakstiet () lietojumprogrammu blokos. Kad apskatÄ«jÄm bibliotÄku, kuru lietojam Go lietojumprogrammÄs, tur bija rakstÄ«ts, ka rakstÄ«Å”ana uz ligzdu notiek nebloÄ·ÄÅ”anas režīmÄ. MÄs bijÄm pÄrliecinÄti, ka nekas nav bloÄ·Äts. Jo mÄs esam lasÄ«juÅ”i
Ir jÄuzrauga rindu lielums, kas palÄ«dz neuzkÄpt uz Ŕī grÄbekļa. PirmkÄrt, mÄs varam pÄrraudzÄ«t, kad sÄkam zaudÄt ziÅojumus. OtrkÄrt, mÄs varam uzraudzÄ«t, ka mums pamatÄ ir problÄmas ar piegÄdi.
Un vÄl viens nepatÄ«kams moments - pastiprinÄÅ”ana par 10 reizÄm mikropakalpojumu arhitektÅ«rÄ ir ļoti vienkÄrÅ”a. Mums nav tik daudz ienÄkoÅ”o pieprasÄ«jumu, taÄu diagrammas dÄļ, kurÄ Å”ie ziÅojumi tiek rÄdÄ«ti tÄlÄk, piekļuves žurnÄlu dÄļ mÄs faktiski palielinÄm žurnÄlu slodzi apmÄram desmit reizes. DiemžÄl man nebija laika aprÄÄ·inÄt precÄ«zus skaitļus, bet mikropakalpojumi ir tÄdi, kÄdi tie ir. Tas ir jÄpatur prÄtÄ. IzrÄdÄs, Å”obrÄ«d LazadÄ visvairÄk noslogota baļķu savÄkÅ”anas apakÅ”sistÄma.
KÄ atrisinÄt elastÄ«gÄs meklÄÅ”anas problÄmu? Ja jums ir nepiecieÅ”ams Ätri iegÅ«t žurnÄlus vienuviet, lai nedarbotos visÄs iekÄrtÄs un neapkopotu tos tur, izmantojiet failu krÄtuvi. Tas garantÄti darbosies. Tas tiek darÄ«ts no jebkura servera. Jums vienkÄrÅ”i jÄpielÄ«mÄ diski un jÄievieto syslog. PÄc tam jÅ«s garantÄjat, ka visi baļķi bÅ«s vienuviet. Tad bÅ«s iespÄjams lÄnÄm konfigurÄt elasticsearch, graylog vai ko citu. Bet jums jau bÅ«s visi žurnÄli, un turklÄt jÅ«s varat tos uzglabÄt, ja vien ir pietiekami daudz disku masÄ«vu.
Mana ziÅojuma laikÄ shÄma sÄka izskatÄ«ties Å”Ädi. MÄs praktiski pÄrtraucÄm rakstÄ«t failÄ. Tagad, visticamÄk, mÄs izslÄgsim paliekas. VietÄjÄs iekÄrtÄs, kurÄs darbojas API, mÄs pÄrtrauksim rakstÄ«t failos. PirmkÄrt, ir failu krÄtuve, kas darbojas ļoti labi. OtrkÄrt, Å”ajÄs maŔīnÄs pastÄvÄ«gi pietrÅ«kst vietas, jums tas pastÄvÄ«gi jÄuzrauga.
Å Ä« daļa ar Logstash un Graylog patieÅ”Äm paceļas. TÄpÄc jums ir jÄatbrÄ«vojas no tÄ. Jums ir jÄizvÄlas viens.
MÄs nolÄmÄm nomest Logstash un Kibana. Jo mums ir droŔības nodaļa. KÄds ir savienojums? SaistÄ«ba ir tÄda, ka Kibana bez X-Pack un bez vairoga neļauj jums atŔķirt piekļuves tiesÄ«bas žurnÄliem. TÄpÄc viÅi paÅÄma Greylog. Tam ir viss. Man tas nepatÄ«k, bet tas darbojas. MÄs iegÄdÄjÄmies jaunu aparatÅ«ru, instalÄjÄm tur jaunu Graylog un pÄrvietojÄm visus žurnÄlus ar stingriem formÄtiem uz atseviŔķu Graylog. Esam organizatoriski atrisinÄjuÅ”i problÄmu ar dažÄda veida vienÄdÄm jomÄm.
Kas Ä«sti ir iekļauts jaunajÄ Graylog. MÄs vienkÄrÅ”i visu ierakstÄ«jÄm dokÄ. MÄs paÅÄmÄm virkni serveru, izlaidÄm trÄ«s Kafka gadÄ«jumus, 7 Graylog serveru versiju 2.3 (jo es gribÄju Elasticsearch versiju 5). Tas viss tika izvirzÄ«ts reidos no HDD. MÄs redzÄjÄm indeksÄÅ”anas Ätrumu lÄ«dz 100 tÅ«kstoÅ”iem ziÅojumu sekundÄ. MÄs redzÄjÄm skaitli, ka 140 terabaiti datu nedÄļÄ.
Un atkal grÄbeklis! Mums ir divas izpÄrdoÅ”anas. MÄs esam pÄrcÄluÅ”i vairÄk nekÄ 6 miljonus ziÅu. Mums, Greylogam, nav laika koŔļÄt. Kaut kÄ atkal ir jÄizdzÄ«vo.
TÄ mÄs izdzÄ«vojÄm. Pievienoti vÄl daži serveri un SSD. Å obrÄ«d dzÄ«vojam Å”Ädi. Tagad mÄs jau koŔļÄjam 160 XNUMX ziÅojumu sekundÄ. MÄs vÄl neesam sasnieguÅ”i robežu, tÄpÄc nav skaidrs, cik daudz mÄs reÄli varam no tÄ iegÅ«t.
TÄdi ir mÅ«su nÄkotnes plÄni. No tiem patieÅ”Äm vissvarÄ«gÄkÄ, iespÄjams, ir augsta pieejamÄ«ba. Mums tÄ vÄl nav. VairÄkas maŔīnas ir uzstÄdÄ«tas vienÄdi, bet pagaidÄm viss iet caur vienu maŔīnu. Ir nepiecieÅ”ams pavadÄ«t laiku, lai starp tÄm iestatÄ«tu kļūmjpÄrlÄci.
Apkopojiet metriku no Graylog.
Iestatiet Ätruma ierobežojumu, lai mums bÅ«tu viena traka API, kas neiznÄ«cina joslas platumu un visu pÄrÄjo.
Un visbeidzot parakstiet kaut kÄdu SLA ar izstrÄdÄtÄjiem, lai mÄs varÄtu tik daudz apkalpot. Ja raksti vairÄk, tad atvainojos.
Un rakstÄ«t dokumentÄciju.
ÄŖsumÄ par visu, ko esam piedzÄ«vojuÅ”i, rezultÄti. PirmkÄrt, standarti. OtrkÄrt, syslog ir kÅ«ka. TreÅ”kÄrt, rsyslog darbojas tieÅ”i tÄ, kÄ rakstÄ«ts uz slaida. Un Ä·ersimies pie jautÄjumiem.
jautÄjumi.
jautÄjums: KÄpÄc viÅi nolÄma neÅemt ... (filebeat?)
atbilde: jÄraksta failÄ. Es tieÅ”Äm negribÄju. Ja jÅ«su API raksta tÅ«kstoÅ”iem ziÅojumu sekundÄ, pat ja jÅ«s to pagriežat reizi stundÄ, tas joprojÄm nav risinÄjums. JÅ«s varat rakstÄ«t caurulÄ. Uz ko izstrÄdÄtÄji man jautÄja: āKas notiks, ja process, kurÄ mÄs rakstÄm, nokristosā? Es vienkÄrÅ”i neatradu, ko viÅiem atbildÄt, un teicu: "Nu, labi, nedarÄ«sim tÄ."
jautÄjums: KÄpÄc jÅ«s vienkÄrÅ”i nerakstÄt žurnÄlus HDFS?
atbildeA: Å is ir nÄkamais solis. MÄs par to domÄjÄm paÅ”Ä sÄkumÄ, bet, tÄ kÄ Å”obrÄ«d nav resursu, lai ar to nodarbotos, tas paliek mÅ«su ilgtermiÅa risinÄjumÄ.
jautÄjums: piemÄrotÄks bÅ«tu kolonnas formÄts.
atbilde: Es saprotu. MÄs esam "par" ar abÄm rokÄm.
jautÄjums: JÅ«s rakstÄt uz rsyslog. Tur ir pieejami gan TCP, gan UDP. Bet ja UDP, tad kÄ jÅ«s garantÄjat piegÄdi?
atbildeA: Ir divi punkti. PirmkÄrt, es uzreiz visiem saku, ka mÄs negarantÄjam baļķu piegÄdi. Jo, kad atnÄk izstrÄdÄtÄji un saka: āSÄksim tur rakstÄ«t finanÅ”u datus, un jÅ«s tos kaut kur noliksit mums, ja kaut kas notiksā, mÄs viÅiem atbildam: āLieliski! SÄksim bloÄ·Ät rakstÄ«Å”anu ligzdÄ, un darÄ«sim to darÄ«jumos, lai jÅ«s garantÄti to ieliktu ligzdÄ mÅ«su vietÄ un pÄrliecinÄtos, ka mÄs to saÅÄmÄm no otras puses. Un Å”ajÄ brÄ«dÄ« visi uzreiz kļūst nevajadzÄ«gi. Un ja nÄ, tad kÄdi jautÄjumi mums ir? Ja nevÄlaties garantÄt rakstÄ«Å”anu kontaktligzdÄ, tad kÄpÄc mÄs garantÄjam piegÄdi? MÄs darÄm visu iespÄjamo. MÄs patieÅ”Äm cenÅ”amies piegÄdÄt pÄc iespÄjas vairÄk un pÄc iespÄjas labÄk, taÄu nedodam 100% garantiju. TÄpÄc tur nav jÄraksta finanÅ”u dati. Å im nolÅ«kam ir darÄ«jumu datu bÄzes.
jautÄjums: Kad API Ä£enerÄ kÄdu ziÅojumu žurnÄlam un nodod kontroli uz mikropakalpojumiem, vai esat saskÄries ar problÄmu, ka ziÅojumi no dažÄdiem mikropakalpojumiem tiek saÅemti nepareizÄ secÄ«bÄ? SakarÄ ar to rodas apjukums.
atbildeA: Tas ir normÄli, ka tie nÄk citÄ secÄ«bÄ. Tam ir jÄbÅ«t gatavam. TÄ kÄ jebkura tÄ«kla piegÄde negarantÄ jums pasÅ«tÄ«jumu, vai arÄ« jums ir jÄtÄrÄ Ä«paÅ”i resursi. Ja mÄs Åemam failu krÄtuves, tad katra API saglabÄ Å¾urnÄlus savÄ failÄ. DrÄ«zÄk rsyslog sadala tos tur esoÅ”ajos direktorijos. Katrai API ir savi žurnÄli, kuros varat doties un apskatÄ«ties, un pÄc tam varat tos salÄ«dzinÄt, izmantojot Ŕī žurnÄla laikspiedolu. Ja viÅi iet meklÄt Graylog, tad tur tie tiks sakÄrtoti pÄc laika zÄ«moga. Tur viss bÅ«s labi.
jautÄjums: laikspiedols var atŔķirties pa milisekundÄm.
atbilde: laikspiedolu Ä£enerÄ pati API. PatiesÄ«bÄ Å”Ä« ir visa bÅ«tÄ«ba. Mums ir NTP. API Ä£enerÄ laikspiedolu jau paÅ”Ä ziÅojumÄ. To nepievieno rsyslog.
jautÄjums: MijiedarbÄ«ba starp datu centriem nav ļoti skaidra. Datu centra ietvaros ir skaidrs, kÄ tika vÄkti un apstrÄdÄti žurnÄli. KÄ notiek mijiedarbÄ«ba starp datu centriem? Vai arÄ« katrs datu centrs dzÄ«vo savu dzÄ«vi?
atbilde: GandrÄ«z. Katra valsts atrodas vienÄ datu centrÄ. Mums paÅ”laik nav izkliedes, lai viena valsts bÅ«tu izvietota dažÄdos datu centros. TÄpÄc nav nepiecieÅ”ams tos apvienot. Katra centra iekÅ”pusÄ ir baļķu relejs. Å is ir Rsyslog serveris. PatiesÄ«bÄ divas vadÄ«bas maŔīnas. Tie ir iestatÄ«ti tÄdÄ paÅ”Ä veidÄ. TaÄu pagaidÄm satiksme iet tikai caur vienu no tÄm. ViÅa reÄ£istrÄ visu apkopojumus. Tam katram gadÄ«jumam ir diska rinda. ViÅa nospiež žurnÄlus un nosÅ«ta uz centrÄlo datu centru (SingapÅ«ra), kur tÄlÄk tie jau tiek saindÄti GreylogÄ. Un katram datu centram ir sava failu krÄtuve. GadÄ«jumÄ, ja mÄs zaudÄjam savienojumu, mums ir visi žurnÄli. ViÅi tur paliks. Tur tie tiks glabÄti.
jautÄjums: Vai neparastÄs situÄcijÄs no turienes saÅemat baļķus?
atbilde: varat doties tur (uz failu krÄtuvi) un apskatÄ«ties.
jautÄjums: KÄ uzraugÄt, lai žurnÄli nepazaudÄtu?
atbilde: MÄs tos faktiski zaudÄjam, un mÄs to uzraugÄm. Monitorings sÄkÄs pirms mÄneÅ”a. BibliotÄkai, ko izmanto Go API, ir metrika. ViÅa var saskaitÄ«t, cik reizes viÅai neizdevÄs rakstÄ«t uz ligzdu. Å obrÄ«d tur ir viltÄ«ga heiristika. Tur ir buferis. Tas mÄÄ£ina uzrakstÄ«t ziÅojumu no tÄ uz ligzdu. Ja buferis pÄrplÅ«st, tas sÄk tos nomest. Un viÅÅ” saskaita, cik viÅÅ” tos nometa. Ja skaitÄ«tÄji tur sÄks plÅ«st pÄri, mÄs par to uzzinÄsim. ViÅi tagad nÄk arÄ« uz Prometheus, un jÅ«s varat redzÄt grafikus Grafana. Varat iestatÄ«t brÄ«dinÄjumus. TaÄu pagaidÄm nav skaidrs, kam tÄs sÅ«tÄ«t.
jautÄjums: programmÄ elasticsearch jÅ«s glabÄjat žurnÄlus ar dublÄÅ”anos. Cik repliku jums ir?
atbilde: Viena kopija.
jautÄjums: Vai tÄ ir tikai viena rinda?
atbilde: Å is ir galvenais un kopija. Dati tiek glabÄti divos eksemplÄros.
jautÄjums: Vai jÅ«s kaut kÄ mainÄ«jÄt rsyslog bufera lielumu?
atbilde: MÄs rakstÄm datagrammas uz pielÄgotu unix ligzdu. Tas mums nekavÄjoties uzliek 128 kilobaitu ierobežojumu. MÄs nevaram tajÄ rakstÄ«t vairÄk. MÄs to esam ierakstÄ«juÅ”i standartÄ. Kas vÄlas iekļūt krÄtuvÄ, viÅi raksta 128 kilobaitus. BibliotÄkas turklÄt nogriež un uzliek karogu, ka ziÅa ir nogriezta. PaÅ”Ä ziÅojuma standartÄ mums ir Ä«paÅ”s lauks, kas parÄda, vai ierakstÄ«Å”anas laikÄ tas tika nogriezts vai nÄ. TÄtad mums ir iespÄja izsekot Å”im brÄ«dim.
JautÄjums: Vai jÅ«s rakstÄt bojÄtu JSON?
atbilde: BojÄts JSON tiks izmests pÄrraides laikÄ, jo pakete ir pÄrÄk liela. Vai arÄ« Graylog tiks atmests, jo tas nevarÄs parsÄt JSON. Bet Å”eit ir nianses, kas ir jÄlabo, un tÄs galvenokÄrt ir saistÄ«tas ar rsyslog. Tur jau esmu aizpildÄ«jis dažus numurus, pie kuriem vÄl jÄpiestrÄdÄ.
JautÄjums: KÄpÄc Kafka? Vai esat izmÄÄ£inÄjis RabbitMQ? Pie tÄdÄm slodzÄm pelÄklogs nesanÄk?
atbilde: Ar Graylog tas neizdodas. Un Greylog iegÅ«st formu. ViÅam tas tieÅ”Äm ir problemÄtiski. ViÅÅ” ir sava veida lieta. Un patiesÄ«bÄ tas nav vajadzÄ«gs. Es labÄk rakstÄ«Å”u no rsyslog tieÅ”i uz elasticsearch un tad skatos Kibana. Bet mums ir jÄrisina jautÄjums ar apsargiem. Tas ir iespÄjamais mÅ«su attÄ«stÄ«bas variants, kad mÄs izmetam Graylog un lietojam Kibana. Logstash nebÅ«s jÄgas. Jo es varu darÄ«t to paÅ”u ar rsyslog. Un tam ir modulis, lai rakstÄ«tu elasticsearch. Ar Greylog mÄs cenÅ”amies kaut kÄ sadzÄ«vot. MÄs to pat nedaudz pielabojÄm. TaÄu vÄl ir kur uzlaboties.
Par Kafku. TÄ tas notika vÄsturiski. Kad es ierados, tas jau bija tur, un tai jau tika rakstÄ«ti žurnÄli. MÄs tikko paaugstinÄjÄm savu kopu un pÄrvietojÄm tajÄ baļķus. MÄs viÅu pÄrvaldÄm, zinÄm, kÄ viÅÅ” jÅ«tas. Kas attiecas uz RabbitMQ... mums ir problÄmas ar RabbitMQ. Un RabbitMQ mums attÄ«stÄs. Mums tas ir ražoÅ”anÄ, un ar to bija problÄmas. Tagad, pirms pÄrdoÅ”anas, viÅÅ” tika Å”amanizÄts, un viÅÅ” sÄks normÄli strÄdÄt. Bet pirms tam es nebiju gatavs to laist ražoÅ”anÄ. Ir vÄl viens punkts. Graylog var lasÄ«t AMQP 0.9 versiju un rsyslog var rakstÄ«t AMQP 1.0 versiju. Un nav neviena risinÄjuma, kas varÄtu veikt abus pa vidu. Ir vai nu viens, vai otrs. TÄtad pagaidÄm tikai Kafka. Bet ir arÄ« nianses. TÄ kÄ mÅ«su izmantotÄs rsyslog versijas omkafka var pazaudÄt visu ziÅojumu buferi, ko tas izÅÄma no rsyslog. KamÄr mÄs to pacietÄ«sim.
JautÄjums: Vai jÅ«s lietojat Kafku, jo jums tÄ bija? Vai neizmantojat kÄdam citam mÄrÄ·im?
atbilde: Kafka, ko izmantoja datu zinÄtnes komanda. Tas ir pilnÄ«gi atseviŔķs projekts, par kuru diemžÄl neko nevaru pateikt. ES nezinu. ViÅu vadÄ«ja Data Science komanda. Kad sÄkÄs baļķi, nolÄma to izmantot, lai neliktu savu. Tagad esam atjauninÄjuÅ”i Graylog, un esam zaudÄjuÅ”i savietojamÄ«bu, jo ir veca Kafka versija. Mums bija jÄtaisa savÄjie. TajÄ paÅ”Ä laikÄ mÄs atbrÄ«vojÄmies no Ŕīm ÄetrÄm tÄmÄm katrai API. MÄs izveidojÄm vienu platu augÅ”daļu visiem tieÅ”raidÄm, vienu platu platu augÅ”daļu visiem iestudÄjumiem, un mÄs tur visu vienkÄrÅ”i nofilmÄjam. Graylog grÄbj to visu paralÄli.
JautÄjums: KÄpÄc mums vajag Å”o Å”amanismu ar rozetÄm? Vai esat mÄÄ£inÄjis konteineriem izmantot syslog žurnÄla draiveri.
atbilde: LaikÄ, kad uzdevÄm Å”o jautÄjumu, mums bija saspringtas attiecÄ«bas ar dokeri. Tas bija docker 1.0 vai 0.9. Pats Dokers bija dÄ«vains. OtrkÄrt, ja tu tajÄ iegrÅ«dÄ«s arÄ« baļķus... Man ir nepÄrbaudÄ«tas aizdomas, ka tas visus baļķus izlaiž caur sevi, caur dokera dÄmonu. Ja mums ir viens API, kas kļūst traks, tad pÄrÄjÄs API saskarsies ar faktu, ka tÄs nevar nosÅ«tÄ«t stdout un stderr. Es nezinu, kur tas novedÄ«s. Man ir aizdomas sajÅ«tas lÄ«menÄ«, ka Å”ajÄ vietÄ nav nepiecieÅ”ams izmantot docker syslog draiveri. MÅ«su funkcionÄlÄs testÄÅ”anas nodaļai ir savs Graylog klasteris ar baļķiem. ViÅi izmanto docker log draiverus, un Ŕķiet, ka tur viss ir kÄrtÄ«bÄ. Bet viÅi uzreiz raksta GELF uz Greylog. BrÄ«dÄ«, kad mÄs to visu sÄkÄm, mums vajadzÄja, lai tas vienkÄrÅ”i darbojas. VarbÅ«t vÄlÄk, kad kÄds atnÄks un teiks, ka jau simts gadus strÄdÄ normÄli, mÄÄ£inÄsim.
JautÄjums: JÅ«s piegÄdÄjat starp datu centriem, izmantojot rsyslog. KÄpÄc ne uz Kafku?
atbilde: MÄs to darÄm, un tÄ tas patiesÄ«bÄ ir. Divu iemeslu dÄļ. Ja kanÄls ir pilnÄ«gi miris, tad visi mÅ«su baļķi, pat saspiestÄ veidÄ, netiks cauri tam. Un kafka ļauj viÅiem vienkÄrÅ”i zaudÄt Å”ajÄ procesÄ. TÄdÄ veidÄ mÄs atbrÄ«vojamies no Å”o baļķu pielipÅ”anas. MÄs Å”ajÄ gadÄ«jumÄ tieÅ”i izmantojam Kafku. Ja mums ir labs kanÄls un vÄlamies to atbrÄ«vot, tad izmantojam viÅu rsyslog. Bet patiesÄ«bÄ jÅ«s varat to iestatÄ«t tÄ, lai tas atmestu to, kas nav ticis cauri. PaÅ”laik mÄs tikai izmantojam rsyslog piegÄdi tieÅ”i kaut kur, kaut kur Kafka.
Avots: www.habr.com