Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Logid on olulised sĂŒsteemi osad, mis aitavad mĂ”ista, kas see töötab (vĂ”i ei tööta) nagu oodatud. Mikroteenuste arhitektuuri tingimustes logide haldamine muutub eraldi distsipliiniks. Tuleb lahendada mitmed kĂŒsimused:

  • kuidas kirjutada logisid rakendusest;
  • kuhu logisid kirjutada;
  • kuidas edastada logisid sĂ€ilitamiseks ja töötlemiseks;
  • kuidas logisid töödelda ja sĂ€ilitada.

TĂ€napĂ€evaste konteineritehnoloogiate kasutamine lisab ĂŒlesande lahendamiseks juurde uusi takistusi.

Just sellest rÀÀgib Yuri Bushmelevi ettekande "Logide kogumise ja edastamise takistuste kaart" sisu.

MĂ€ngi videot

Kellele see huvi pakub, palun lugege edasi.

Minu nimi on Yuri Bushmelev. Töösklen Lazadas. TÀna rÀÀgin sellest, kuidas me oma logisid koostame, kuidas me neid kogume ja mida me nende sisse kirjutame.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Kust me tuleme? Kes me oleme? Lazada on nr 1 veebipood kuues Kagu-Aasia riigis. KĂ”ik need riigid on jaotatud meie andmekeskuste vahel. Praegu on meil kokku 4 andmekeskust. Miks see oluline on? Sest mĂ”ned lahendused sĂ”ltusid sellest, et andmekeskuste vahel on vĂ€ga nĂ”rk side. Meil on mikroteenuste arhitektuur. Olin ĂŒllatunud, et meil on juba 80 mikroteenust. Kui ma logide ĂŒlesande ette vĂ”tsin, oli neid vaid 20. Pluss on meil ka ĂŒsna suur tĂŒkk PHP pĂ€rand, millega on samuti keeruline elada. KĂ”ik see genereerib meile hetkel ĂŒle 6 miljoni sĂ”numi minutis kogu sĂŒsteemis. Edasi nĂ€itan, kuidas me sellega toime tuleme ja miks see nii on.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Selle 6 miljoni sÔnumiga tuleb kuidagi elada. Mida me peame nendega tegema? 6 miljonit sÔnumit, mille peame:

  • rakendusest edastama
  • vastu vĂ”tma
  • analĂŒĂŒsimiseks ja sĂ€ilitamiseks edastama.
  • analĂŒĂŒsida
  • mingil viisil sĂ€ilitama.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Kui kolm miljonit sĂ”numit ilmus, oli mul umbes sama nĂ€gu. Sest alustasime mingitest sendidest. On selge, et sinna kirjutatakse rakenduse logisid. NĂ€iteks, ei saanud andmebaasile ĂŒhendust, sain andmebaasile ĂŒhendust, kuid ei suutnud midagi lugeda. Kuid peale selle kirjutab iga meie mikroteenus ka access-logi. Iga pĂ€ring, mis mikroteenusele saabub, salvestatakse logis. Miks me seda teeme? Arendajad soovivad omada jĂ€lgimisvĂ”imet. Igas access-logis on olemas field traceid, mille abil eriline liides loob kĂ”igi seotud tegevuste ahela ja ilusasti kuvab jĂ€lgimist. JĂ€lgimine nĂ€itab, kuidas pĂ€ring kulges, ja see aitab meie arendajatel kiiremini tegeleda igasuguste mÀÀratlemata probleemidega.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Kuidas sellega elada? Praegu rÀÀgin lĂŒhidalt vĂ”imalustest — kuidas ĂŒldse seda probleemi lahendatakse. Kuidas lahendada logide kogumise, edastamise ja salvestamise ĂŒlesanne.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Kuidas rakendusest kirjutada? Selge, et on erinevaid viise. EelkĂ”ige on olemas parim praktika, nagu ĂŒtlevad moodne seltskond. On olemas ka vana kool kahes variandis, nagu vanad emad rÀÀkisid. On ka teisi viise.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Logide kogumisega on suhteliselt sama olukord. Selle konkreetse osa lahendamise variante ei ole nii palju. Need on juba rohkem, kuid ikka mitte nii palju.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Kuid kohaletoimetamise ja sellele jĂ€rgnevate analĂŒĂŒsidega — variatsioonide arv hakkab plahvatama. Ma ei hakka praegu iga varianti kirjeldama. Arvan, et peamised variantid on tuttavad kĂ”igile, kes on teemaga huvitatud.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Ma nÀitan, kuidas me seda Lazadas tegime ja kuidas see kÔik algas.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Aasta tagasi tulin Lazasse ja mind suunati logide projekti. Seal oli umbes nii. Rakenduse logi kirjutati stdout-i ja stderr-i. KĂ”ik tehti moodsalt. Kuid siis arendajad viskasid selle standardvoogudest vĂ€lja ja infrastruktuuri spetsialistid peavad sellega kuidagi toime tulema. Infrastruktuuri spetsialistide ja arendajate vahel on veel vĂ€ljaandjad, kes ĂŒtlesid: "eee
 noh, okei, paneme need lihtsalt shelliga faili, ja kĂ”ik". Ja kuna kĂ”ik see on konteineris, siis pakiti see otse konteineris, kaardistati sisse kataloog ja pandi see sinna. Arvan, et kĂ”igile on enam-vĂ€hem selge, mida sellest vĂ€lja tuli.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Vaadates pisut kaugemale, kuidas me neid logisid edastasime. Keegi valis td-agent'i, mis on tegelikult fluentd, kuid mitte pÀris fluentd. Ma ei saanud kunagi aru nende kahe projekti suhetest, kuid nad tundusid rÀÀvatavat samast asjast. See fluentd, kirjutatud Ruby keeles, luges logifailid, parseeris need JSON-iks mingite regulaaravaldiste jÀrgi. Siis edastas need Kafka'sse. Ja Kafka-s oli iga API jaoks 4 erinevat teemat. Miks 4? Sest on live, on staging, ja kuna on stdout ja stderr. Arendajad genereerivad neid, kuid infrastruktuuri inimesed peavad need Kafka-s looma. Veelgi enam, Kafka'd kontrollis teine osakond. Seega tuli pilet luua, et nad loovad iga API jaoks 4 teemat. KÔik unustasid selle. KokkuvÔttes oli verevaht ja segadus.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Mida me edasi selle kĂ”ikimisega tegime? Me edastasime selle Kafka'sse. Edasi lĂ€ks pool logidest Logstash'i. Teine pool jagunes. Osa lĂ€ks ĂŒhte Graylog'i, osa – teise Graylog'i. LĂ”ppkokkuvĂ”ttes jĂ”udis see kĂ”ik ĂŒhte Elasticsearch'i klastrisse. See tĂ€hendab, et kogu see segadus lĂ”puks langes sinna. Nii ei peaks tegema!

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Nii see vĂ€lja nĂ€eb, kui vaadata kaugelt ĂŒlevalt. Nii ei tohiks teha! Siin on numbritega kohe tĂ€histatud probleemsed kohad. Neid on tegelikult rohkem, kuid 6 on tĂ”eliselt probleemsed, millega peab midagi ette vĂ”tma. Nendest rÀÀgin nĂŒĂŒd eraldi.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Siin (1,2,3) kirjutatakse meil failid ja vastavalt on siin kohe kolm takistust.

Esiteks (1) — me peame need kuhugi kirjutama. Ei oleks hea anda API-le vĂ”imalust otse faili kirjutada. Soovitav oleks, et API oleks konteineris isoleeritud, ja veel parem – et see oleks read-only. Ma olen sĂŒsteemihaldur, seega on mul natuke alternatiivne vaade nendele asjadele.

Teine punkt (2,3) - me saame palju pÀringuid API-sse. API kirjutab palju andmeid faili. Failid kasvavad. Me peame neid roteerima. Sest muidu ei jÀtku diskiruumi. Roteerimine on halb, sest need on shell'i kaudu katalooge suunatud. Me ei saa seda kuidagi roteerida. Rakendusele ei saa öelda, et see avaks descriptor'id uuesti. Sest arendajad vaatavad su nagu lollile: "Millised descriptor'id? Me kirjutame ju stdout'i". Infrastruktuuri inimesed tegid logrotate'is copytruncate, mis teeb lihtsalt faili koopia ja kÀrbib originaali. Seega, nende kopeerimisprotsesside vahel on tavaliselt diskiruumi puudus.

(4) Meil oli erinevaid formaate erinevates API-des. Need erinesid veidi, kuid regexp'e tuli kirjutada erinevaid. Kuna kogu see asi oli hallatav Puppet'i kaudu, siis seal oli suur hulk klasse oma probleemidega. Peale selle suutis td-agent suure osa ajast mĂ€lu sĂŒĂŒa, olla aeglane, ta vĂ”is lihtsalt nĂ€ida, et töötab, ja mitte midagi teha. VĂ€ljastpoolt oli vĂ”imatu mĂ”ista, et ta ei tee midagi. Parimal juhul ta kukub kokku ja keegi tĂ”stab ta hiljem uuesti ĂŒles. TĂ€psemalt, tuleb alert ja keegi lĂ€heb kĂ€sitsi selle uuesti töösse.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

(6) Ja kĂ”ige hullem oli elasticsearch. Sest see oli vana versioon. Meil polnud sel hetkel eraldi master'e. Meil olid heterogeensed logid, millel vĂ€ljad vĂ”isid kattuda. Erinevad logid erinevatest rakendustest vĂ”isid kirjutada sama vĂ€lja nimedega, kuid andmed sees vĂ”isid olla erinevad. NĂ€iteks ĂŒks logi tuleb Integer'iga vĂ€ljas, nĂ€iteks level. Teine logi tuleb String'iga vĂ€ljas level. Ilma staatilise mappimise puudumisel tekib selline suurepĂ€rane olukord. Kui pĂ€rast indeksite roteerimist elasticsearch'i saab esimene sĂ”num String'iga, siis elame normaalselt. Aga kui esimesena tuleb Integer, siis kĂ”ik jĂ€rgnevad sĂ”numid, mis tulevad String'iga, lihtsalt jĂ€etakse kĂ”rvale. Sest vĂ€lja tĂŒĂŒp ei ĂŒhti.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Me hakkasime endale neid kĂŒsimusi esitama. Otsustasime, et ei hakka sĂŒĂŒdlasi otsima.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Aga midagi on tĂ”esti vaja teha! Ilmselge on see, et peame kehtestama standardid. MĂ”ned standardid olid meil juba olemas. MĂ”ned kehtestasime pisut hiljem. Õnneks olime selleks ajaks juba kinnitanud kĂ”igi API-de jaoks ĂŒhtse logide formaadi. See on kirjas teenuste koostööstandardites. JĂ€relikult peavad need, kes soovivad logisid saada, kirjutama need just sellesse formaati. Kui keegi ei kirjuta logisid sellel kujul, siis me ei suuda midagi garanteerida.

Edasi, sooviks kehtestada ĂŒhtse standardi logide kirjutamise, saatmise ja kogumise viiside jaoks. Nimelt, kuhu need kirjutada ja millega neid saata. Ideaalne olukord oleks see, kui projektides kasutatakse ĂŒht ja sama teeki. Meil on eraldi loggingi teek Go jaoks ja eraldi teek PHP jaoks. KĂ”ik, kes meil on, peavad neid kasutama. Praeguseks vĂ”iks öelda, et meil see Ă”nnestub umbes 80%. Kuid mĂ”ned jĂ€tkavad kaktuste söömist.

Ja seal (slaidil) hakkab vaevu selguma "SLA logide saatmiseks". Seda veel ei ole, kuid me töötame selle kallal. Sest see on vĂ€ga mugav, kui infrastruktuur ĂŒtleb, et kui kirjutate sellises formaadis sellisesse kohta ja mitte enam kui N sĂ”numit sekundis, siis me toimetame need tĂ”enĂ€osusega, et see jĂ”uab sinna. See vabastab palju peavalu. Kui SLA on, siis on see lihtsalt suurepĂ€rane!

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Kuidas me probleemi lahendama hakkasime? Peamine takistus oli td-agent. Ei olnud selge, kuhu meie logid jÀÀvad. Kas neid toimetatakse? Kas neid kogutakse? Kus nad ĂŒldse on? SeetĂ”ttu otsustasime esimese asjana td-agenti asendada. LĂŒhidalt olen siin ĂŒles tĂ€hendanud, mille vastu see asendada.

Fluentd. Esiteks olen ma sellega varasemal töökohal kokku puutunud ja sealgi kukkus see vahepeal kokku. Teiseks on see sama, ainult suunatud.

Filebeat. Miks see meie jaoks mugav oli? Sest see on kirjutatud Go keeles ja meil on Go osas suur ekspertiis. Seega, kui on vajadus, saame seda enda vajadustele kohandada. SeetĂ”ttu me seda ei valinud. Et isegi ei tekiks kiusatust seda enda jaoks ĂŒmber kirjutama hakata.

Ilmselge lahendus sĂŒsteemiadministraatori jaoks on igasugused sisselogid sellises koguses (syslog-ng/rsyslog/nxlog).

VÔi kirjutada midagi enda, kuid selle me kÔrvale jÀtsime, samuti ka filebeat'i. Kui midagi kirjutada, siis on parem kirjutada midagi kasulikku Àri jaoks. Logide edastamiseks on parem vÔtta midagi valmis.

SeetĂ”ttu on valik tegelikult piiratud syslog-ng ja rsyslog vahel. Kaldusin rsyslogi poole, lihtsalt seetĂ”ttu, et meil oli Puppetis juba rsyslogi jaoks klassid, ja ma ei leidnud nende vahel ilmset erinevust. Seal on syslog ja siin on syslog. Jah, kellelgi on dokumentatsioon halvem, kellelgi parem. Üks oskab nii, aga teine — teisiti.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Veidi rsyslogist. Esiteks on see Ă€ge, sest tal on palju mooduleid. Tal on arusaadav RainerScript (kaasaegne konfigureerimiskeel). SuurepĂ€rane boonus on see, et me saime seda formaalselt simuleerida td-agent'i kĂ€itumist, ja rakendustes ei muutunud midagi. See tĂ€hendab, et me vahetame td-agent'i rsyslog'i vastu, ja kĂ”ik muud asjad jÀÀvad samaks. Ja kohe saame töötava kohaletoimetamise. Edasi, mmnormalize — see on fantastiline asi rsyslogis. See vĂ”imaldab logisid analĂŒĂŒsida, kuid mitte Grok'i ja regexp'i abil. See loob abstraktse sĂŒntaksipuude. See analĂŒĂŒsib logisid umbes nagu kompilaator analĂŒĂŒsib allikaid. See vĂ”imaldab töötada vĂ€ga kiiresti, tarvitama vĂ€he CPU-d ja on tĂ”eliselt Ă€ge asi. Seal on palju muid boonuseid. Ma ei hakka neist rÀÀkima.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Rsyslogil on ka palju puudusi. Need on umbes samad, mis boonused. Peamised probleemid — tuleb osata seda ette valmistada ja tuleb valida Ă”ige versioon.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Otsustasime, et kirjutame logid unix-soketisse. Esiteks mitte /dev/log, kuna seal on meil segadus sĂŒsteemilogidest, seal on journald selles pipeline'is. SeetĂ”ttu kirjutame kohandatud soketisse. Me ĂŒhendame selle eraldi reeglikogumiga. Mitte midagi segada. KĂ”ik on lĂ€bipaistev ja arusaadav. Nii me tegelikult tegime. Kataloog nendega soketitega on standardiseeritud ja edastatakse kĂ”ikidesse konteineritesse. Konteinerid saavad nĂ€ha neile vajalikku soket, avada ja sinna kirjutada.

Miks mitte fail? Kuna kĂ”ik lugesid artiklit Badushka'st, mis ĂŒritas edastada faili dockerisse, ja avastas, et pĂ€rast rsyslogi taaskĂ€ivitamist muutub failide descriptor, ja docker kaotab selle faili. Ta hoiab lahti midagi muud, kuid enam mitte seda soket, kuhu kirjutatakse. Otsustasime, et saame selle probleemi ringiga ĂŒmber minna, ja samal ajal vĂ€ltida lukustamise probleemi.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Rsyslog teeb slaidil nĂ€idatud toimingud ja saadab logid kas relĂ©esse vĂ”i Kafka'sse. Kafka vastab vanale meetodile. RelĂ© — ĂŒritasin kasutada puhtalt rsyslogi logide kohaletoimetamiseks. Ilma sĂ”numijĂ€rjekorrata, tavaliste rsyslogi vahenditega. Üldiselt see töötab.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Kuid on nĂŒansse selle osas, kuidas neid hiljem sellesse ossa (Logstash/Graylog/ES) paigutada. See osa (rsyslog-rsyslog) kasutatakse andakeskuste vahel. Siin on kompressitud tcp link, mis vĂ”imaldab sÀÀsta ribalaiust ja seega suurendada tĂ”enĂ€osust, et saame mĂ”ningaid logisid teiselt andakeskuselt olukordades, kus kanal on ummistunud. Kuna meil on Indoneesia, kus kĂ”ik on halvasti. Seal on see pidev probleem.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

MÔtlesime, kuidas me saame jÀlgida, kui tÔenÀoliselt jÔuavad logid, mida oleme rakendusest salvestanud, teise otsa? Otsustasime luua metrikad. Rsyslogil on oma statistika kogumise moodul, kus on mÔned loendurid. NÀiteks vÔib see nÀidata Teile jÀrjekorra suurust vÔi palju sÔnumeid on tulnud mingisse tegevusse. Nendest saab midagi vÔtta. Pluss, sellel on kohandatavad loendurid, mida saab seadistada, ja see nÀitab nÀiteks, kui palju sÔnumeid on salvestanud mingi API. Edasi, kirjutasin rsyslog_exporter'i Pythonis ja saatsime kÔik Prometheusesse ja koostasime graafikud. Graylogi metrikad oleksid olnud vÀga soovitavad, kuid seni pole me neid seadistanud.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Milliste probleemidega kokku puutusime? Probleemid tekkisid seetĂ”ttu, et avastasime (ÄKKI!), et meie Live API saadab 50k sĂ”numit sekundis. See on ainult Live API, ilma stagingita. Ja Graylog nĂ€itab meile ainult 12 tuhat sĂ”numit sekundis. Ja tekkis mĂ”istlik kĂŒsimus, kus siis ĂŒlejÀÀnud on? Sellest tĂ”stsime jĂ€relduse, et Graylog lihtsalt ei suuda hakkama. Vaatasime ja tĂ”epoolest, Graylog Elasticsearchiga ei suutnud seda voogu taluda.

Edasi, teised avastused, mille tegime protsessi kÀigus.

Socket'i kirjutamine on blokeeritud. Kuidas see juhtus? Kui ma kasutasin rsyslogit kohaletoimetamiseks, siis mingil hetkel kukkus meil kanal andakeskuste vahel kokku. Ühes kohas seisis kohaletoimetamine, teises kohas seisis kohaletoimetamine. KĂ”ik see jĂ”udis masinani koos API'ga, mis kirjutavad rsyslog socket'isse. Seal tĂ€itis jĂ€rjekord. Siis tĂ€itus jĂ€rjekord Unix socket'i kirjutamiseks, mis on vaikimisi 128 paketti. Ja jĂ€rgmine write() rakenduses blokeerub. Kui me vaatasime Go rakendustes kasutatavat teeki, oli seal öeldud, et socket'isse kirjutamine toimub mitteblokeerivas reĆŸiimis. Olime kindlad, et midagi ei blokeeru. Sest me lugesime. artiklit Badushka'st, mis sellest kirjutati. Aga on ĂŒks moment. Selle kutsumise ĂŒmber oli lĂ”putu tsĂŒkkel, milles pidevalt ettevĂ”teti proovida sĂ”numit soketi panna. Seda me ei mĂ€rganud. Ainus lahendus oli raamatukogu ĂŒmber kirjutamine. Sel ajal on see paar korda muutunud, kuid nĂŒĂŒd oleme eemaldanud kĂ”ik lukud kĂ”ikides alamĂŒsteemides. SeetĂ”ttu saab rsyslogi peatada ja midagi ei juhtu.

On vaja jĂ€lgida jĂ€rjekordade suurust, mis aitab vĂ€ltida nende lĂ”ksude sisse astumist. Esiteks, saame jĂ€lgida, millal hakkame sĂ”numeid kaotama. Teiseks, saame jĂ€lgida, et meil on ĂŒldiselt probleemid kohaletoimetamisega.

Ja veel ĂŒks ebameeldiv moment — amplifikatsioon 10 korda mikroteenuste arhitektuuris — see on vĂ€ga lihtne. Meil ei ole palju sissetulevaid pĂ€ringuid, kuid nende sĂ”numite edasiviimise tĂ”ttu graafikus, access-logide tĂ”ttu, tĂ”stame me logide koormust tegelikult umbes kĂŒmme korda. Kahjuks ei jĂ”udnud ma tĂ€psed numbrid vĂ€lja arvutada, kuid mikroteenused — need ongi sellised. Seda tuleb silmas pidada. Tundub, et hetkel on logide kogumise alamĂŒsteem Lazadas kĂ”ige koormatud.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Kuidas lahendada elasticsearchi probleem? Kui on vaja kiiresti saada logid ĂŒhte kohta, et mitte joosta kĂ”ikide masinate vahel ja neid sealt kokku koguda, kasutage failide salvestust. See töötab garanteeritult. Seda saab teha mistahes serverist. Tuleb lihtsalt sinna kettaid paigutada ja syslog paigaldada. PĂ€rast seda on teil ĂŒhes kohas kĂ”ik logid olemas. Edasi saab juba rahulikult seadistada elasticsearchi, graylogi, midagi muud. Kuid teil on juba kĂ”ik logid ja lisaks saate neid hoida nii kaua, kui ketta mahtudest piisab.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Minu ettekande hetkel nÀgi skeem vÀlja selline. Faili ei kirjutanud me praktiliselt enam. Praegu toimetame tÔenÀoliselt viimased osad vÀlja. Kohalikud masinad, millel API-d kÀivitatakse, enam failidesse ei kirjuta. Esiteks, on olemas failide salvestus, mis töötab vÀga hÀsti. Teiseks, nendel masinatel lÔpeb pidevalt ruum, seda tuleb pidevalt jÀlgida.

See osa Logstashi ja Graylogi kohta tĂ”epoolest hĂ€irib. SeetĂ”ttu tuleb sellest vabaneda. Tuleb valida midagi ĂŒhte.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Oleme otsustanud loobuda Logstashist ja Kibanast. Kaheks, et meil on turbedo. Mis seos on? Seos on selles, et Kibana ilma X-Packi ja Shieldita ei vĂ”imalda pÀÀs Ă”igusi logidele. SeetĂ”ttu valisime Graylogi. Seal on kĂ”ik olemas. Ta mulle ei meeldi, aga ta töötab. Ostisime uut riistvara, installisime sinna vĂ€rske Graylogi ja tĂ”stsime kĂ”ik logid rangete formaatidega eraldi Graylogi. Me lahendasime sama tĂŒĂŒpi vĂ€ljade korralduse probleemi.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Mis siis uude Graylogi kuulub? Kirjutasime kÔik Dockerisse. VÔtsime palju servereid, paigaldasime kolm Kafka instantsi, 7 serverit Graylog versiooniga 2.3 (sest tahtsime Elasticsearch versiooni 5). KÔik see tÔsteti HDD RAID-ide peale. NÀgime indekseerimise kiirusena kuni 100 tuhat sÔnumit sekundis. NÀgime numbrit, et 140 terabaiti andmeid nÀdalas.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Ja jĂ€lle komistus! Meil on tulekul kaks mĂŒĂŒki. Meie suurus on ĂŒle 6 miljoni sĂ”numi. Graylog ei suuda enam töötada. Peame kuidagi ellu jÀÀma.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

JÔudsime ellu nii. Lisame veel paar serverit ja SSD-d. Hetkel elame sellisel moel. Praegu suudame juba töödelda 160 tuhat sÔnumit sekundis. Me pole veel latti tabanud, seega pole selge, kui palju me sellest tegelikult vÀlja saame.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

Sellised on meie tulevikuplaanid. Neist on tĂ”enĂ€oliselt kĂ”ige olulisem kĂ”rge saadavus. Meil seda veel pole. Mitmed masinad on seadistatud sama moodi, aga kĂ”ik lĂ€heb ĂŒhe masina kaudu. Peame kulutama aega, et seadistada vahepealset varundust nende vahel.

Koguda mÔÔdikud Graylogist.

KĂ€ivitada kiiruspiirang, et ĂŒks hull API meilt ribalaiust ja kĂ”ike muud ei tapaks.

Ja lÔpuks, kirjutada mÔni SLA arendajatega, et saame teenindada nii palju. Kui saadate rohkem, siis vabandust.

Ja kirjutada dokumentatsioon.

Juri Bushmelev „Rake Map on Log Collection and Delivery Field“ – aruande tĂ”lgendus

KokkuvĂ”ttes, mida me oleme kogenud. Esiteks, standardid. Teiseks, syslog - kook. Kolmandaks, rsyslog töötab just nii, nagu slaidil öeldud. Ja liigume kĂŒsimustele ĂŒle.

KĂŒsimused.

KĂŒsimus: Miks siis ikkagi ei otsustanud vĂ”tta... (filebeat?)

Vastus: Tuleb kirjutada faili. VĂ€ga ei tahtnud. Kui sul on API, mis kirjutab tuhandeid sĂ”numeid sekundis, siis isegi kui sa kord tunni jooksul keerad, pole see ikkagi variant. Sa saad kirjutada torusse. Mida arendajad mulle kĂŒsisid: "Ja mis juhtub, kui protsess, kuhu me kirjutame, kukub?" Ma lihtsalt ei leidnud, mida vastata, ja ĂŒtlesin: "Noh, okei, Ă€rme tee siis nii."

KĂŒsimus: Miks te ei kirjuta logisid lihtsalt HDFS-i?

Vastus: See on jĂ€rgmine etapp. Me oleme selle ĂŒle mĂ”elnud alguses, aga kuna praegu pole ressursse sellega tegeleda, jÀÀb see meie pikaajalisse lahendusse.

KĂŒsimus: Veergude formaat oleks sobivam.

Vastus: Ma saan kÔigest aru. Me oleme selle poolt mÔlema kÀega.

KĂŒsimus: Te kirjutate rsyslog-i. Seal saab kasutada nii TCP-d kui ka UDP-d. Aga kui kasutate UDP-d, siis kuidas te garanteerite kohaletoimetamise?

Vastus: On kaks momenti. Esiteks, ma ĂŒtlen kohe kĂ”igile, et me ei garanteeri logide kohaletoimetamist. Sest kui arendajad tulevad ja ĂŒtlevad: „Aga Ă€kki hakkame sinna kirjutama finantsandmeid ja teie hoiustate need kuskile, juhuks kui midagi juhtub”, siis me vastame neile „SuurepĂ€rane! Laske teil alustada soketisse kirjutamise blokkeerimist ja teha seda tehingutes, et me tagaksime, et te panete meile need soketti ja veenduge, et me saime need sealt.” Ja selle hetkel ei ole kellelgi enam soovi seda teha. Kui ei ole soovi, siis millised on meie kĂŒsimused? Kui te ei taha garanteerida kirjutamist soketti, siis miks peaksime meie garantii andma kohaletoimetamiseks? Me teeme parima pingutuse. Me tĂ”esti pĂŒĂŒame kohaletoimetada nii palju ja nii hĂ€sti kui vĂ”imalik, kuid me ei anna 100% garantiisid. SeetĂ”ttu Ă€rge kirjutage sinna finantsandmeid. Selle jaoks on andmebaasid tehingutega.

KĂŒsimus: Kui API genereerib mĂ”ne teate logis ja edastab juhtimise mikroteenustele, siis kas te ei ole kokku puutunud probleemiga, et erinevatelt mikroteenustelt saavate teadete jĂ€rjekord on vale? Selle tĂ”ttu tekib segadus.

Vastus: On normaalne, et nad tulevad erinevas jĂ€rjekorras. Sellega tuleb valmis olla. Sest ĂŒkski vĂ”rgu kohaletoimetamine ei garanteeri jĂ€rjekorda vĂ”i tuleb sellele spetsiaalselt ressursse kulutada. Kui vĂ”tta failihoiustused, siis iga API salvestab logid oma faili. Tegelikult jagab rsyslog need kataloogidesse. Igal API-l on seal oma logid, kuhu saab minna ja vaadata, ja siis timestampi pĂ”hjal saab neid omavahel seostada. Kui nad otsivad Graylog-st, siis seal nad sorteeritakse timestampi jĂ€rgi. Seal on kĂ”ik hĂ€sti.

KĂŒsimus: Timestamp vĂ”ib erineda millisekundite kaupa.

Vastus: Timestamp genereerib ise API. Selles ongi kogu asi. Meil on NTP. API genereerib timestampi juba ise sÔnumis. Seda ei lisa rsyslog.

KĂŒsimus: Ei ole vĂ€ga selge, kuidas and keskkonnad omavahel suhtlevad. Andmekeskuse sees on selge, kuidas logisid koguti ja töödeldi. Kuidas toimub suhtlemine andmekeskuste vahel? Kas iga andmekeskus elab oma elu?

Vastus: Peaaegu. Igal riigil on oma andmekeskus. Meil ei ole praegu jaotust, et sama riik oleks erinevates andmekeskustes. SeetĂ”ttu ei pea neid ĂŒhendama. Igas keskuses on Log Relay. See on Rsyslog server. Tegelikult on kaks haldustööd masinat. Need on ĂŒhetaoliselt seadistatud. Kuid hetkel lĂ€heb liiklus lĂ€bi ainult ĂŒhe neist. See kogub kĂ”iki logisid. Sellel on ketta jĂ€rjekord igaks juhuks. See tihendab logisid ja saadab need keskmisse andmekeskusesse (Singapur), kus need saadetakse edasi Graylogi. Ja igas andmekeskuses on oma failide salvestus. Juhul, kui ĂŒhendus kaob, on meil kĂ”ik logid seal. Need jÀÀvad sinna. Need salvestatakse.

KĂŒsimus: Kas sa saad sealt ekstreemsetes olukordades logisid?

Vastus: Saab minna sinna (failide salvestusse) ja vaadata.

KĂŒsimus: Kuidas te jĂ€lgite, et te ei kaota logisid?

Vastus: Me tegelikult kaotame neid ja me jÀlgime seda. JÀlgimist alustati kuu aega tagasi. Raamatukogus, mida kasutab Go API, on mÔÔdikud. See oskab lugeda, mitu korda ta ei saanud socketisse kirjutada. Seal on hetkel nutikas heuristika. Seal on puhver. See proovib kirjutada sellest sÔnumit socketisse. Kui puhver tÀitub, hakkab see neid loobuma. Ja loendab, kui palju ta on loobunud. Kui loendurid hakkavad tÀituma, saame sellest teada. Need saadetakse ka Prometheusesse, ja Grafanas saab vaadata graafikuid. Saate seadistada teateid. Kuid hetkel ei ole selge, kellele need saata.

KĂŒsimus: Kas Elasticsearchis hoiate logisid koos varundamisega? Kui palju teil on koopiaid?

Vastus: Üks koopiate.

KĂŒsimus: See on ainult ĂŒks koopia?

Vastus: See on master ja koopia. Andmed on hoitud kahes eksemplaris.

KĂŒsimus: Oled sa kuidagi Rsyslogi puhvri suurust seadistanud?

Vastus: Me kirjutame andmegramme kohandatud unix socketisse. See seab meile kohe piiranguks 128 kilobaiti. Me ei saa sinna rohkem kirjutada. Oleme selle standardisse kirja pannud. Kes tahab salvestustesse jÔuda, need kirjutavad 128 kilobaiti. Raamatukogud kÀrbivad, ja panevad lipu, et sÔnum on kÀrbitud. Meie sÔnumi standardis on eriline vÀli, mis nÀitab, kas see on kirjutamise kÀigus kÀrbitud vÔi mitte. Seega on meil vÔimalik jÀlgida ka seda hetke.

KĂŒsimus: Kas kirjutate vigaseid JSON-e?

Vastus: Vigane JSON jĂ€etakse kĂ”rvale kas relay ajal, sest pakett on liiga suur. VĂ”i viskab Graylog selle kĂ”rvale, sest ei suuda JSON-i parsida. Kuid siin on nĂŒansse, mida tuleb fikseerida, ja need on enamikul juhtudel seotud rsyslog-iga. Olen juba esitanud seal mitu probleemi, millega tuleb veel töötada.

KĂŒsimus: Miks Kafka? Kas olete proovinud RabbitMQ-d? Kas Graylog ei toimi selliste koormuste juures?

Vastus: Meie jaoks ei toimi Graylog. Aga Graylog meie jaoks toimib. Sellega on tĂ”eliselt probleeme. See on ĂŒsna eriline asi. Ja tegelikult pole seda vaja. Eelistaksin kirjutada rsyslogist otse Elasticsearchi ja vaadata siis Kibana't. Kuid peame sedalaadi kĂŒsimuse turvaekspertidega klaarima. See on vĂ”imalik variant meie arenguks, kui viskame Graylogi vĂ€lja ja kasutame Kibana't. Logstash'i kasutamine pole mĂ”tet. Sest ma saan sama asja teha rsyslogiga. Ja sellel on moodul Elasticsearchi kirjutamiseks. Graylogiga proovime kuidagi edasi elada. Oleme seda isegi natuke optimeerinud. Kuid seal on veel ruumi paranemiseks.

Kafkast. Ajalooliselt on see nii vĂ€lja kujunenud. Kui ma tulin, oli see juba olemas ja logisid kirjutati sinna juba. Me lihtsalt tĂ”ime oma klastrisse ja kolisime sinna logid. Me haldame seda, me teame, kuidas tal lĂ€heb. RabbitMQ kohta... meil ei lĂ€he RabbitMQ hĂ€sti. Aga RabbitMQ meile sobib. Meil on see tootmises ja seal on olnud probleeme. Praegu me uuendasime seda enne kampaaniat ja see hakkas normaalselt tööle. Aga enne seda ma ei olnud valmis seda tootmisesse laskma. On veel ĂŒks moment. Graylog oskab lugeda AMQP 0.9 versiooni, kuid rsyslog oskab kirjutada AMQP 1.0 versiooni. Ja ei ole ĂŒhtegi lahendust, mis oskaks mĂ”lemat. On kas ĂŒks vĂ”i teine. Seega sellel hetkel ainult Kafka. Aga seal on ka omad nĂŒansid. Kuna omkafka selle rsyslog versiooni puhul, mida me kasutame, vĂ”ib kaotada kogu sĂ”numite puhvri, mille ta rsyslogist vĂ€lja vĂ”ttis. Seni oleme sellega leppinud.

KĂŒsimus: Kas te kasutate Kafkat, kuna see oli teil olemas? Kas seda kasutatakse veel millegi muu jaoks?

Vastus: Kafkat, mis meil oli, kasutab Data Science'i meeskond. See on tĂ€iesti eraldi projekt, millest ma, kahjuks, midagi rohkem ei tea. Ta oli Data Science'i meeskonna halduses. Kui logid sĂŒsteemi toodi, otsustati seda kasutada, et mitte installida veel ĂŒhte. NĂŒĂŒd, kui me oleme Graylogi uuendanud, kaotasime ĂŒhilduvuse, kuna seal on vana Kafka versioon. Me pidime oma looma. Samuti saime lahti nendest neljast teema kohta iga API kohta. Me tegime ĂŒhe laia teema kĂ”igi live'i jaoks, ĂŒhe laia teema kĂ”igi stagingute jaoks ja lihtsalt saame sinna kĂ”ik logid. Graylog korjab kĂ”ike paralleelselt.

KĂŒsimus: Miks on vajalik see soketiga tegelemine? Kas olete proovinud kasutada konteineritele log-draiverit syslog.

Vastus: Kui me selle kĂŒsimusega tegelema hakkasime, olid meie suhted Dockeriga pingelised. Tookord oli see Docker 1.0 vĂ”i 0.9. Docker ise oli kummaline. Teiseks, kui veel logisid ka sinna panna... Mul on kontrollimatu kahtlus, et ta laseb kĂ”ik logid end lĂ€bi, lĂ€bi Docker daemon'i. Kui meil ĂŒks API nĂ€ssu lĂ€heb, siis teised API-d jÀÀvad kinni, kuna nad ei saa saata stdout ja stderr-i. Ma ei tea, kuhu see viib. Tunne ĂŒtleb, et ei ole vaja syslog-draiverit Dockeris sellistes olukordades kasutada. Meie funktsionaalse testimise osakonnal on oma vĂ€ike Graylog klaster logide jaoks. Nad kasutavad Docker'i log-draivereid ja seal tundub isegi kĂ”ik toimivat hĂ€sti. Kuid nad kirjutavad GELF-i kohe Graylogi. Tookord, kui me kĂ”ike seda korraldasime, vajasime, et see lihtsalt töötaks. VĂ”ib-olla hiljem, kui keegi ĂŒtleb, et see on sada aastat kenasti töötanud, siis proovime uuesti.

KĂŒsimus: Te teete andmekeskuste vahel kohaletoimetamist rsyslogi kaudu. Miks mitte Kafka kaudu?

Vastus: Me teeme tegelikult nii ĂŒht kui teist. Kahes pĂ”hjusest. Kui kanal on tĂ€ielikult purustatud, siis ei pÀÀse meie logid isegi kokku surutud kujul sellest lĂ€bi. Kafka vĂ”imaldab neid protsessis lihtsalt kaotada. Selle meetodi abil vabaneme logide kinni jÀÀmisest. Kui kasutame lihtsalt Kafka-d otse. Kui meie kanal on hea ja soovime seda vabastada, siis kasutame rsyslogi. Aga tegelikult vĂ”ib selle seadistada nii, et ta ise viskab Ă€ra, mis ei pÀÀse lĂ€bi. Praeguseks kasutame mĂ”nes kohas otse rsyslogi kohaletoimetamist, mĂ”nes Kafka-d.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster