Zkuk fil-Kubernetes (u mhux biss) illum: aspettattivi u realtà

Zkuk fil-Kubernetes (u mhux biss) illum: aspettattivi u realtà

Wasal l-2019, u għad m'għandniex soluzzjoni standard għall-aggregazzjoni ta' log f'Kubernetes. F'dan l-artikolu, nixtiequ, bl-użu ta' eżempji minn prattika reali, naqsmu t-tfittxijiet tagħna, il-problemi li niltaqgħu magħhom u s-soluzzjonijiet tagħhom.

Madankollu, l-ewwel, ser nagħmel riżerva li klijenti differenti jifhmu affarijiet differenti ħafna billi niġbru zkuk:

  • xi ħadd irid jara logs tas-sigurtà u tal-awditjar;
  • xi ħadd - logging ċentralizzat tal-infrastruttura kollha;
  • u għal xi wħud, huwa biżżejjed li jiġbru biss zkuk tal-applikazzjoni, esklużi, pereżempju, balancers.

Hawn taħt hawn il-qatgħa hawn taħt dwar kif implimentajna diversi "listi ta' xewqat" u liema diffikultajiet iltqajna.

Teorija: dwar għodod tal-qtugħ

Sfond dwar il-komponenti ta 'sistema ta' qtugħ

Il-qtugħ tas-siġar imxiet triq twila, u b'riżultat ta 'dan ġew żviluppati metodoloġiji għall-ġbir u l-analiżi ta' zkuk, li huwa dak li nużaw illum. Lura fis-snin 1950, Fortran introduċa analogu ta 'flussi ta' input/output standard, li għen lill-programmatur jiddebaggja l-programm tiegħu. Dawn kienu l-ewwel logs tal-kompjuter li għamlu l-ħajja aktar faċli għall-programmaturi ta’ dawk iż-żminijiet. Illum naraw fihom l-ewwel komponent tas-sistema tal-qtugħ - sors jew “produttur” taz-zkuk.

Ix-xjenza tal-kompjuter ma baqgħetx wieqfa: dehru netwerks tal-kompjuter, l-ewwel raggruppamenti... Sistemi kumplessi li jikkonsistu f'diversi kompjuters bdew jaħdmu. Issa l-amministraturi tas-sistema kienu sfurzati jiġbru zkuk minn diversi magni, u f'każijiet speċjali setgħu jżidu messaġġi tal-kernel tal-OS f'każ li kellhom bżonn jinvestigaw falliment tas-sistema. Biex tiddeskrivi sistemi ċentralizzati ta 'ġbir ta' zkuk, fil-bidu tas-snin 2000 ġiet ippubblikata RFC 3164, li standardizzat remote_syslog. Hekk deher komponent importanti ieħor: kollettur taz-zkuk u l-ħażna tagħhom.

Biż-żieda fil-volum ta 'zkuk u l-introduzzjoni mifruxa ta' teknoloġiji tal-web, qamet il-mistoqsija dwar liema zkuk jeħtieġ li jintwerew b'mod konvenjenti lill-utenti. Għodod sempliċi tal-console (awk/sed/grep) ġew sostitwiti minn oħrajn aktar avvanzati telespettaturi log - it-tielet komponent.

Minħabba ż-żieda fil-volum ta 'zkuk, xi ħaġa oħra dehret ċara: zkuk huma meħtieġa, iżda mhux kollha kemm huma. U zkuk differenti jeħtieġu livelli differenti ta 'preservazzjoni: xi wħud jistgħu jintilfu f'ġurnata, filwaqt li oħrajn jeħtieġ li jinħażnu għal 5 snin. Allura, komponent għall-iffiltrar u r-rotta tad-data ġie miżjud mas-sistema tal-qtugħ - ejja nsejħulha filtru.

Il-ħażna għamlet ukoll qabża kbira: minn fajls regolari għal databases relazzjonali, u mbagħad għal ħażna orjentata lejn id-dokumenti (per eżempju, Elasticsearch). Allura l-ħażna kienet separata mill-kollettur.

Fl-aħħar mill-aħħar, il-kunċett stess ta 'ġurnal kiber għal tip ta' fluss astratt ta 'avvenimenti li rridu nippreservaw għall-istorja. Jew aħjar, f'każ li jkollok bżonn tagħmel investigazzjoni jew tfassal rapport analitiku...

Bħala riżultat, f'perjodu ta 'żmien relattivament qasir, il-ġbir ta' zkuk żviluppa f'subsistema importanti, li bi dritt tista' tissejjaħ waħda mis-subsezzjonijiet fil-Big Data.

Zkuk fil-Kubernetes (u mhux biss) illum: aspettattivi u realtà
Jekk darba kien hemm stampi ordinarji jistgħu jkunu biżżejjed għal "sistema ta 'qtugħ," issa s-sitwazzjoni nbidlet ħafna.

Kubernetes u zkuk

Meta Kubernetes wasal għall-infrastruttura, il-problema diġà eżistenti tal-ġbir ta 'zkuk lanqas ma qabżitha. F'ċerti modi, sar saħansitra aktar uġigħ: il-ġestjoni tal-pjattaforma tal-infrastruttura ma kinitx biss simplifikata, iżda wkoll ikkumplikata fl-istess ħin. Ħafna servizzi qodma bdew jemigraw lejn mikroservizzi. Fil-kuntest taz-zkuk, dan huwa rifless fin-numru dejjem jikber ta 'sorsi ta' zkuk, iċ-ċiklu tal-ħajja speċjali tagħhom, u l-ħtieġa li jiġu segwiti r-relazzjonijiet tal-komponenti kollha tas-sistema permezz ta 'zkuk...

Inħares 'il quddiem, nista' niddikjara li issa, sfortunatament, m'hemm l-ebda għażla ta 'logging standardizzata għal Kubernetes li tqabbel b'mod favorevoli mal-oħrajn kollha. L-iskemi l-aktar popolari fil-komunità huma kif ġej:

  • xi ħadd unrolls il-munzell EFK (Elasticsearch, Fluentd, Kibana);
  • xi ħadd qed jipprova l-rilaxxati reċentement loki jew użi Operatur tal-qtugħ tas-siġar;
  • magħna (u forsi mhux ahna biss?..) Jiena fil-biċċa l-kbira sodisfatt bl-iżvilupp tiegħi stess - dar taz-zkuk...

Bħala regola, nużaw il-qatet li ġejjin fi clusters K8s (għal soluzzjonijiet self-hosted):

Madankollu, mhux se nitkellem fuq l-istruzzjonijiet għall-installazzjoni u l-konfigurazzjoni tagħhom. Minflok, ser niffoka fuq in-nuqqasijiet tagħhom u konklużjonijiet aktar globali dwar is-sitwazzjoni maz-zkuk b'mod ġenerali.

Prattika bi zkuk fil-K8s

Zkuk fil-Kubernetes (u mhux biss) illum: aspettattivi u realtà

“Zkuk ta’ kuljum”, kemm intom hemm?...

Il-ġbir ċentralizzat ta 'zkuk minn infrastruttura pjuttost kbira jeħtieġ riżorsi konsiderevoli, li se jintefqu fuq il-ġbir, il-ħażna u l-ipproċessar ta' zkuk. Matul it-tħaddim ta 'diversi proġetti, konna ffaċċjati b'diversi rekwiżiti u problemi operattivi li joħorġu minnhom.

Ejja nippruvaw ClickHouse

Ejja nħarsu lejn ħażna ċentralizzata fuq proġett b'applikazzjoni li tiġġenera zkuk b'mod pjuttost attiv: aktar minn 5000 linja kull sekonda. Ejja nibdew naħdmu biż-zkuk tiegħu, u nżiduhom ma' ClickHouse.

Hekk kif ikun meħtieġ ħin reali massimu, is-server b'4-core b'ClickHouse diġà jkun mgħobbi żżejjed fuq is-subsistema tad-diska:

Zkuk fil-Kubernetes (u mhux biss) illum: aspettattivi u realtà

Dan it-tip ta’ tagħbija huwa dovut għall-fatt li qed nippruvaw niktbu fi ClickHouse kemm jista’ jkun malajr. U d-database tirreaġixxi għal dan b'żieda fit-tagħbija tad-disk, li tista 'tikkawża l-iżbalji li ġejjin:

DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts

Fatt huwa li MergeTree tabelli fi ClickHouse (fihom data log) għandhom id-diffikultajiet tagħhom stess waqt l-operazzjonijiet ta 'kitba. Id-dejta mdaħħla fihom tiġġenera partizzjoni temporanja, li mbagħad tiġi magħquda mat-tabella prinċipali. Bħala riżultat, ir-reġistrazzjoni tirriżulta li hija impenjattiva ħafna fuq id-diska, u hija wkoll soġġetta għal-limitazzjoni li rċevejna avviż dwar hawn fuq: mhux aktar minn 1 subpartizzjoni jistgħu jingħaqdu f'sekonda 300 (fil-fatt, dan huwa 300 inserzjoni kull sekonda).

Biex tevita din l-imġieba, għandha tikteb lil ClickHouse f'biċċiet kbar kemm jista' jkun u mhux aktar minn darba kull 1 ​​sekondi. Madankollu, il-kitba f'fqigħ kbar tissuġġerixxi li għandna niktbu inqas ta' spiss fi ClickHouse. Dan, imbagħad, jista 'jwassal għal overflow buffer u telf ta' zkuk. Is-soluzzjoni hija li żżid il-buffer Fluentd, iżda mbagħad jiżdied ukoll il-konsum tal-memorja.

Innota: Aspett ieħor problematiku tas-soluzzjoni tagħna ma 'ClickHouse kien relatat mal-fatt li l-qsim fil-każ tagħna (loghouse) huwa implimentat permezz ta' tabelli esterni konnessi Merge tabella. Dan iwassal għall-fatt li meta jittieħdu kampjuni ta 'intervalli ta' ħin kbar, hija meħtieġa RAM eċċessiva, peress li l-metatable itenni permezz tal-ħitan kollha - anke dawk li ovvjament ma fihomx id-dejta meħtieġa. Madankollu, issa dan l-approċċ jista’ jiġi ddikjarat b’mod sikur skadut għall-verżjonijiet attwali ta’ ClickHouse (c 18.16).

Bħala riżultat, jidher ċar li mhux kull proġett għandu biżżejjed riżorsi biex jiġbor zkuk f'ħin reali fi ClickHouse (b'mod aktar preċiż, id-distribuzzjoni tagħhom mhux se tkun xierqa). Barra minn hekk, ser ikollok bżonn tuża akkumulatur, li għaliha se nirritornaw aktar tard. Il-każ deskritt hawn fuq huwa reali. U dak iż-żmien, ma konniex kapaċi noffru soluzzjoni affidabbli u stabbli li tkun taqbel mal-klijent u tippermettilna niġbru zkuk b'dewmien minimu...

Xi ngħidu dwar Elasticsearch?

Elasticsearch huwa magħruf li jimmaniġġja piżijiet ta' xogħol tqal. Ejja nippruvawha fl-istess proġett. Issa t-tagħbija tidher bħal din:

Zkuk fil-Kubernetes (u mhux biss) illum: aspettattivi u realtà

Elasticsearch kien kapaċi jiddiġerixxi l-fluss tad-dejta, madankollu, il-kitba ta 'tali volumi lilha tutilizza ħafna s-CPU. Dan jiġi deċiż billi jiġi organizzat raggruppament. Teknikament, din mhix problema, iżda jirriżulta li sempliċement biex inħaddmu s-sistema tal-ġbir taz-zkuk diġà nużaw madwar 8 cores u għandna komponent addizzjonali mgħobbi ħafna fis-sistema...

Bottom line: din l-għażla tista 'tiġi ġġustifikata, iżda biss jekk il-proġett huwa kbir u l-ġestjoni tiegħu tkun lesta li tonfoq riżorsi sinifikanti fuq sistema ċentralizzata ta' qtugħ.

Imbagħad tqum mistoqsija naturali:

Liema zkuk huma verament meħtieġa?

Zkuk fil-Kubernetes (u mhux biss) illum: aspettattivi u realtà Ejja nippruvaw nibdlu l-approċċ innifsu: zkuk għandhom fl-istess ħin ikunu informattivi u mhux ikopru kull avveniment fis-sistema.

Ejja ngħidu li għandna ħanut online ta 'suċċess. Liema zkuk huma importanti? Il-ġbir ta 'informazzjoni kemm jista' jkun, pereżempju, minn portal ta 'ħlas, hija idea kbira. Iżda mhux ir-zkuk kollha mis-servizz tat-tqattigħ tal-immaġni fil-katalgu tal-prodott huma kritiċi għalina: żbalji u monitoraġġ avvanzat biss huma biżżejjed (per eżempju, il-perċentwal ta 'żbalji 500 li jiġġenera dan il-komponent).

Allura wasalna għall-konklużjoni li il-qtugħ ċentralizzat mhux dejjem ikun iġġustifikat. Ħafna drabi l-klijent irid jiġbor ir-zkuk kollha f'post wieħed, għalkemm fil-fatt, mir-reġistru kollu, huma meħtieġa biss 5% kondizzjonali tal-messaġġi li huma kritiċi għan-negozju:

  • Xi drabi huwa biżżejjed li jiġi kkonfigurat, ngħidu aħna, biss id-daqs tal-ġurnal tal-kontenitur u l-kollettur tal-iżbalji (per eżempju, Sentry).
  • Notifika ta' żball u reġistru lokali kbir innifsu ħafna drabi jistgħu jkunu biżżejjed biex jinvestigaw l-inċidenti.
  • Kellna proġetti li għamlu b'mod esklussiv testijiet funzjonali u sistemi ta 'ġbir ta' żbalji. L-iżviluppatur ma kellux bżonn zkuk bħala tali - raw kollox minn traċċi ta 'żball.

Illustrazzjoni mill-ħajja

Storja oħra tista’ sservi bħala eżempju tajjeb. Irċevejna talba mit-tim tas-sigurtà ta’ wieħed mill-klijenti tagħna li diġà kien qed juża soluzzjoni kummerċjali li ġiet żviluppata ħafna qabel l-introduzzjoni ta’ Kubernetes.

Kien meħtieġ li "tagħmel ħbieb" tas-sistema ċentralizzata ta 'ġbir ta' zkuk bis-sensor ta 'skoperta ta' problemi korporattivi - QRadar. Din is-sistema tista' tirċievi zkuk permezz tal-protokoll syslog u tirkuprahom mill-FTP. Madankollu, ma kienx immedjatament possibbli li tiġi integrata mal-plugin remote_syslog għal fluentd (kif irriżulta, m’aħniex waħedna). Problemi fit-twaqqif tal-QRadar irriżultaw li kienu fuq in-naħa tat-tim tas-sigurtà tal-klijent.

Bħala riżultat, parti mir-zkuk kritiċi għan-negozju ttellgħet fuq FTP QRadar, u l-parti l-oħra ġiet ridiretta permezz ta 'syslog remot direttament min-nodi. Għal dan anke ktibna chart sempliċi - forsi se jgħin lil xi ħadd isolvi problema simili... Grazzi għall-iskema li tirriżulta, il-klijent innifsu rċieva u analizza zkuk kritiċi (bl-użu tal-għodod favoriti tiegħu), u stajna nnaqqsu l-ispiża tas-sistema tal-qtugħ, billi niffrankaw biss il- ix-xahar li għadda.

Eżempju ieħor huwa pjuttost indikattiv ta 'x'm'għandekx tagħmel. Wieħed mill-klijenti tagħna għall-ipproċessar ta 'kull wieħed avvenimenti li ġejjin mill-utent, magħmula multiline output mhux strutturat informazzjoni fil-log. Kif tista' taħsbu, zkuk bħal dawn kienu estremament inkonvenjenti kemm biex jinqraw kif ukoll biex jinħażnu.

Kriterji għal zkuk

Eżempji bħal dawn iwasslu għall-konklużjoni li minbarra li tagħżel sistema ta 'ġbir ta' zkuk, għandek bżonn jiddisinjaw ukoll ir-zkuk huma stess! X'inhuma r-rekwiżiti hawn?

  • Iz-zkuk iridu jkunu f'format li jinqara mill-magna (per eżempju, JSON).
  • Iz-zkuk għandhom ikunu kompatti u bil-kapaċità li jibdlu l-grad tal-qtugħ sabiex jiġu debug problemi possibbli. Fl-istess ħin, f'ambjenti ta 'produzzjoni għandek tmexxi sistemi b'livell ta' qtugħ bħal twissija jew żball.
  • Iz-zkuk għandhom ikunu normalizzati, jiġifieri, f'oġġett ta 'log, il-linji kollha għandu jkollhom l-istess tip ta' qasam.

Zkuk mhux strutturati jistgħu jwasslu għal problemi bit-tagħbija taz-zkuk fil-ħażna u waqfien sħiħ fl-ipproċessar tagħhom. Bħala illustrazzjoni, hawn eżempju bi żball 400, li ħafna żgur li ltaqgħu magħhom fi zkuk fluwenti:

2019-10-29 13:10:43 +0000 [warn]: dump an error event: error_class=Fluent::Plugin::ElasticsearchErrorHandler::ElasticsearchError error="400 - Rejected by Elasticsearch"

L-iżball ifisser li qed tibgħat qasam li t-tip tiegħu huwa instabbli għall-indiċi b'mapping lest. L-aktar eżempju sempliċi huwa qasam fil-log nginx b'varjabbli $upstream_status. Jista' jkun fih jew numru jew string. Pereżempju:

{ "ip": "1.2.3.4", "http_user": "-", "request_id": "17ee8a579e833b5ab9843a0aca10b941", "time": "29/Oct/2019:16:18:57 +0300", "method": "GET", "uri": "/staffs/265.png", "protocol": "HTTP/1.1", "status": "200", "body_size": "906", "referrer": "https://example.com/staff", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36", "request_time": "0.001", "cache_status": "-", "upstream_response_time": "0.001, 0.007", "upstream_addr": "127.0.0.1:9000", "upstream_status": "200", "upstream_response_length": "906", "location": "staff"}
{ "ip": "1.2.3.4", "http_user": "-", "request_id": "47fe42807f2a7d8d5467511d7d553a1b", "time": "29/Oct/2019:16:18:57 +0300", "method": "GET", "uri": "/staff", "protocol": "HTTP/1.1", "status": "200", "body_size": "2984", "referrer": "-", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36", "request_time": "0.010", "cache_status": "-", "upstream_response_time": "0.001, 0.007", "upstream_addr": "10.100.0.10:9000, 10.100.0.11:9000", "upstream_status": "404, 200", "upstream_response_length": "0, 2984", "location": "staff"}

Ir-reġistri juru li s-server 10.100.0.10 wieġeb bi żball 404 u t-talba ntbagħtet lil ħażna ta' kontenut ieħor. Bħala riżultat, il-valur fir-zkuk sar bħal dan:

"upstream_response_time": "0.001, 0.007"

Din is-sitwazzjoni hija tant komuni li anke jistħoqqilha separata referenzi fid-dokumentazzjoni.

Xi ngħidu dwar l-affidabbiltà?

Hemm drabi meta zkuk kollha mingħajr eċċezzjoni huma vitali. U b'dan, l-iskemi tipiċi ta 'ġbir ta' zkuk għal K8s proposti/diskussi hawn fuq għandhom problemi.

Pereżempju, fluentd ma jistax jiġbor zkuk minn kontenituri ta' ħajja qasira. F'wieħed mill-proġetti tagħna, il-kontenitur tal-migrazzjoni tad-database għex għal inqas minn 4 sekondi u mbagħad tħassar - skont l-annotazzjoni korrispondenti:

"helm.sh/hook-delete-policy": hook-succeeded

Minħabba dan, ir-reġistru tal-eżekuzzjoni tal-migrazzjoni ma kienx inkluż fil-ħażna. Il-politika tista’ tgħin f’dan il-każ. before-hook-creation.

Eżempju ieħor huwa r-rotazzjoni tal-log Docker. Ejja ngħidu li hemm applikazzjoni li tikteb b'mod attiv fiz-zkuk. Taħt kundizzjonijiet normali, jirnexxielna nipproċessaw ir-zkuk kollha, iżda hekk kif tidher problema - pereżempju, kif deskritt hawn fuq b'format mhux korrett - l-ipproċessar jieqaf, u Docker idawwar il-fajl. Ir-riżultat huwa li zkuk kritiċi għan-negozju jistgħu jintilfu.

Dan hu għaliex huwa importanti li tissepara l-flussi ta 'log, inkorporazzjoni tibgħat l-aktar siewja direttament fl-applikazzjoni biex jiżguraw is-sigurtà tagħhom. Barra minn hekk, ma jkunx superfluwu li jinħolqu xi wħud “akkumulatur” ta’ zkuk, li jista 'jgħix għal indisponibbiltà ta' ħażna qasira filwaqt li jiffranka messaġġi kritiċi.

Fl-aħħarnett, ma rridux ninsew dan Huwa importanti li timmonitorja kwalunkwe sottosistema kif suppost. Inkella, huwa faċli li tidħol f'sitwazzjoni li fiha fluentd ikun fi stat CrashLoopBackOff u ma jibgħat xejn, u dan iwiegħed it-telf ta 'informazzjoni importanti.

Sejbiet

F'dan l-artikolu, aħna mhux qed inħarsu lejn soluzzjonijiet SaaS bħal Datadog. Ħafna mill-problemi deskritti hawn diġà ġew solvuti b’xi mod jew ieħor minn kumpaniji kummerċjali li jispeċjalizzaw fil-ġbir ta’ zkuk, iżda mhux kulħadd jista’ juża SaaS għal diversi raġunijiet (dawk ewlenin huma l-ispiża u l-konformità ma '152-FZ).

Il-ġbir ċentralizzat ta' zkuk għall-ewwel jidher qisu biċċa xogħol sempliċi, iżda mhu xejn. Huwa importanti li tiftakar li:

  • Il-komponenti kritiċi biss jeħtieġ li jiġu illoggjati fid-dettall, filwaqt li l-monitoraġġ u l-ġbir ta 'żbalji jistgħu jiġu kkonfigurati għal sistemi oħra.
  • Zkuk fil-produzzjoni għandhom jinżammu minimi sabiex ma tiżdiedx tagħbija bla bżonn.
  • Iz-zkuk iridu jinqraw mill-magna, ikunu normalizzati, u jkollhom format strett.
  • Zkuk tassew kritiċi għandhom jintbagħtu fi fluss separat, li għandu jkun separat minn dawk ewlenin.
  • Ta 'min jikkunsidra akkumulatur ta' log, li jista 'jiffranka minn tifqigħ ta' tagħbija għolja u jagħmel it-tagħbija fuq il-ħażna aktar uniformi.

Zkuk fil-Kubernetes (u mhux biss) illum: aspettattivi u realtà
Dawn ir-regoli sempliċi, jekk jiġu applikati kullimkien, jippermettu li ċ-ċirkwiti deskritti hawn fuq jaħdmu - anki jekk huma neqsin komponenti importanti (il-batterija). Jekk ma taderixxix ma 'tali prinċipji, il-kompitu faċilment iwassal lilek u lill-infrastruttura għal komponent ieħor tas-sistema mgħobbi ħafna (u fl-istess ħin ineffettiv).

PS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment