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.
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);
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 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:
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:
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?
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:
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:
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.
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).