Mga log sa Kubernetes (ug dili lamang) karon: mga gilauman ug reyalidad

Mga log sa Kubernetes (ug dili lamang) karon: mga gilauman ug reyalidad

2019 na, ug wala gihapon miy standard nga solusyon para sa log aggregation sa Kubernetes. Niini nga artikulo, gusto namo, gamit ang mga ehemplo gikan sa tinuod nga praktis, nga ipaambit ang among mga pagpangita, mga problema nga nasugatan ug ang ilang mga solusyon.

Bisan pa, una, maghimo ako usa ka reserbasyon nga ang lainlaing mga kostumer nakasabut sa lahi kaayo nga mga butang pinaagi sa pagkolekta sa mga troso:

  • adunay gusto nga makakita sa seguridad ug audit logs;
  • usa ka tawo - sentralisadong logging sa tibuok imprastraktura;
  • ug alang sa uban, igo na ang pagkolekta lamang sa mga log sa aplikasyon, wala'y labot, pananglitan, mga balanse.

Sa ubos mao ang pagputol sa ubos kung giunsa namo pagpatuman ang lain-laing "mga listahan sa pangandoy" ug unsa nga mga kalisdanan ang among nasugatan.

Teorya: bahin sa mga himan sa pag-log

Background sa mga sangkap sa usa ka sistema sa pag-log

Ang logging dugay na nga naabut, ingon usa ka sangputanan diin ang mga pamaagi sa pagkolekta ug pag-analisar sa mga troso naugmad, nga mao ang among gigamit karon. Balik sa 1950s, gipaila ni Fortran ang usa ka analogue sa standard input/output streams, nga nakatabang sa programmer sa pag-debug sa iyang programa. Kini ang una nga mga log sa kompyuter nga nagpasayon ​​sa kinabuhi alang sa mga programmer niadtong mga panahona. Karon atong makita diha kanila ang unang bahin sa logging system - tinubdan o β€œproducer” sa mga troso.

Ang siyensya sa kompyuter wala mohunong: nagpakita ang mga network sa kompyuter, ang unang mga pungpong... Ang mga komplikadong sistema nga naglangkob sa daghang mga kompyuter nagsugod sa pagtrabaho. Karon ang mga administrador sa sistema napugos sa pagkolekta og mga troso gikan sa daghang mga makina, ug sa mga espesyal nga kaso mahimo nilang idugang ang mga mensahe sa kernel sa OS kung kinahanglan nila nga imbestigahan ang usa ka pagkapakyas sa sistema. Aron ihulagway ang sentralisadong sistema sa pagkolekta sa troso, sa sayong bahin sa 2000 kini gimantala RFC 3164, nga nag-standardize sa remote_syslog. Ingon niini ang pagpakita sa usa ka hinungdanon nga sangkap: tigkolekta sa troso ug ang ilang pagtipig.

Sa pagdugang sa gidaghanon sa mga troso ug sa kaylap nga pagpaila sa mga teknolohiya sa web, ang pangutana mitungha kung unsa ang mga troso nga kinahanglan nga dali nga ipakita sa mga tiggamit. Ang yano nga mga galamiton sa console (awk/sed/grep) gipulihan sa mas abante mga tigtan-aw sa log - ikatulo nga sangkap.

Tungod sa pagtaas sa gidaghanon sa mga troso, lain nga butang ang nahimong klaro: gikinahanglan ang mga troso, apan dili tanan niini. Ug ang lainlaing mga troso nanginahanglan lainlaing lebel sa pagpreserba: ang uban mahimong mawala sa usa ka adlaw, samtang ang uban kinahanglan nga tipigan sulod sa 5 ka tuig. Mao nga, usa ka sangkap alang sa pagsala ug pag-ruta sa mga agos sa datos gidugang sa sistema sa pag-log - tawgon nato kini pagsala.

Ang pagtipig nakahimo usab usa ka dako nga paglukso: gikan sa regular nga mga file hangtod sa mga relational database, ug dayon sa pagtipig nga nakabase sa dokumento (pananglitan, Elasticsearch). Busa ang pagtipig gilain gikan sa kolektor.

Sa katapusan, ang mismong konsepto sa usa ka log milapad ngadto sa usa ka matang sa abstract nga sapa sa mga panghitabo nga gusto natong tipigan alang sa kasaysayan. O hinoon, kung kinahanglan nimo nga maghimo usa ka imbestigasyon o maghimo usa ka analitikal nga taho ...

Ingon usa ka sangputanan, sa usa ka medyo mubo nga yugto sa panahon, ang pagkolekta sa log nahimo nga usa ka hinungdanon nga subsystem, nga mahimo’g matawag nga usa sa mga subsection sa Big Data.

Mga log sa Kubernetes (ug dili lamang) karon: mga gilauman ug reyalidad
Kung kaniadto ang ordinaryo nga mga kopya igo na alang sa usa ka "sistema sa pag-log," karon ang kahimtang nabag-o pag-ayo.

Kubernetes ug mga troso

Sa pag-abut sa Kubernetes sa imprastraktura, ang naglungtad na nga problema sa pagkolekta sa mga troso wala usab makalikay niini. Sa pipila ka mga paagi, kini nahimong mas sakit: ang pagdumala sa plataporma sa imprastraktura dili lamang gipayano, apan komplikado usab sa samang higayon. Daghang mga daan nga serbisyo ang nagsugod sa pagbalhin sa mga microservice. Sa konteksto sa mga troso, kini makita sa nagkadaghang mga tinubdan sa log, ang ilang espesyal nga siklo sa kinabuhi, ug ang panginahanglan sa pagsubay sa mga relasyon sa tanang mga sangkap sa sistema pinaagi sa mga troso...

Sa pagtan-aw sa unahan, mahimo nakong isulti nga karon, sa walay palad, wala’y standardized nga kapilian sa pag-log alang sa Kubernetes nga maayo nga itandi sa tanan nga uban pa. Ang labing popular nga mga laraw sa komunidad mao ang mosunod:

  • adunay nagbuklad sa stack EFK (Elasticsearch, Fluentd, Kibana);
  • adunay nagsulay sa bag-o lang gipagawas Loki o mga gamit Operator sa pag-log;
  • kami (ug tingali dili lamang kami?..) Natagbaw ko sa akong kaugalingon nga pag-uswag - balay nga troso...

Ingon sa usa ka lagda, gigamit namo ang mosunod nga mga bundle sa K8s clusters (alang sa self-hosted nga mga solusyon):

Bisan pa, dili ako magpadayon sa mga panudlo alang sa ilang pag-install ug pag-configure. Hinunoa, ako mag-focus sa ilang mga kakulangan ug mas global nga mga konklusyon mahitungod sa sitwasyon nga adunay mga troso sa kinatibuk-an.

Pagpraktis gamit ang mga troso sa K8s

Mga log sa Kubernetes (ug dili lamang) karon: mga gilauman ug reyalidad

"Araw-adlaw nga mga troso", pila ba kamo didto?..

Ang sentralisadong koleksyon sa mga troso gikan sa usa ka medyo dako nga imprastraktura nanginahanglan daghang mga kapanguhaan, nga igasto sa pagkolekta, pagtipig ug pagproseso sa mga troso. Atol sa operasyon sa lain-laing mga proyekto, nag-atubang kami sa lainlaing mga kinahanglanon ug mga problema sa operasyon nga naggikan niini.

Atong sulayan ang ClickHouse

Atong tan-awon ang usa ka sentralisadong pagtipig sa usa ka proyekto nga adunay usa ka aplikasyon nga nagpatunghag mga troso nga aktibo kaayo: labaw pa sa 5000 nga mga linya matag segundo. Magsugod ta sa pagtrabaho sa iyang mga troso, idugang kini sa ClickHouse.

Sa diha nga gikinahanglan ang maximum realtime, ang 4-core server nga adunay ClickHouse ma-overload na sa disk subsystem:

Mga log sa Kubernetes (ug dili lamang) karon: mga gilauman ug reyalidad

Kini nga matang sa pagkarga tungod sa kamatuoran nga kami naningkamot sa pagsulat sa ClickHouse sa labing madali nga panahon. Ug ang database nag-reaksyon niini nga adunay dugang nga pagkarga sa disk, nga mahimong hinungdan sa mga mosunud nga sayup:

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

Point mao nga Mga lamesa sa MergeTree sa ClickHouse (naglangkob sila og data sa log) adunay ilang kaugalingon nga mga kalisud sa panahon sa pagsulat nga mga operasyon. Ang datos nga gisal-ut ngadto kanila nagmugna og usa ka temporaryo nga partisyon, nga dayon gihiusa sa main table. Ingon usa ka sangputanan, ang pagrekord nahimo nga labi ka gipangayo sa disk, ug kini usab gipailalom sa limitasyon nga among nadawat nga pahibalo bahin sa ibabaw: dili molapas sa 1 nga mga subpartisyon ang mahimong mahiusa sa 300 segundo (sa tinuud, kini 300 nga pagsal-ot kada segundo).

Aron malikayan kini nga pamatasan, kinahanglan magsulat sa ClickHouse sa ingon ka dako nga mga piraso kutob sa mahimo ug dili molapas sa 1 ka higayon matag 2 segundos. Bisan pa, ang pagsulat sa dagkong mga pagbuto nagsugyot nga kinahanglan namon nga dili kaayo magsulat kanunay sa ClickHouse. Kini, sa baylo, mahimong mosangpot sa usa ka buffer overflow ug pagkawala sa mga troso. Ang solusyon mao ang pagdugang sa Fluentd buffer, apan ang konsumo sa panumduman modaghan usab.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ang laing problemadong aspeto sa among solusyon sa ClickHouse nalangkit sa kamatuoran nga ang partitioning sa among kaso (loghouse) gipatuman pinaagi sa external tables nga konektado Paghiusa sa lamesa. Kini modala ngadto sa kamatuoran nga sa diha nga sampling dako nga agwat sa panahon, ang sobra nga RAM gikinahanglan, tungod kay ang metatable iterates sa tanan nga mga partitions - bisan sa mga nga dayag nga walay sulod sa gikinahanglan nga data. Bisan pa, karon kini nga pamaagi mahimong luwas nga ipahayag nga wala na magamit alang sa karon nga mga bersyon sa ClickHouse (c 18.16).

Ingon usa ka sangputanan, kini nahimong tin-aw nga dili tanan nga proyekto adunay igo nga mga kapanguhaan aron makolekta ang mga troso sa tinuud nga oras sa ClickHouse (mas tukma, ang ilang pag-apod-apod dili angay). Dugang pa, kinahanglan nimo nga gamiton baterya, diin kita mobalik sa ulahi. Ang kaso nga gihulagway sa ibabaw tinuod. Ug niadtong panahona wala kami makahimo sa pagtanyag sa usa ka kasaligan ug lig-on nga solusyon nga mohaum sa kustomer ug tugotan kami sa pagkolekta sa mga troso nga adunay gamay nga paglangan...

Unsa ang mahitungod sa Elasticsearch?

Ang Elasticsearch nahibal-an nga magdumala sa bug-at nga mga karga sa trabaho. Atong sulayan kini sa samang proyekto. Karon ang load ingon niini:

Mga log sa Kubernetes (ug dili lamang) karon: mga gilauman ug reyalidad

Ang Elasticsearch nakahimo sa paghilis sa data stream, bisan pa, ang pagsulat sa ingon nga mga volume niini labi nga naggamit sa CPU. Gidesisyonan kini pinaagi sa pag-organisar sa usa ka cluster. Sa teknikal, dili kini usa ka problema, apan kini nahimo nga aron lang maoperahan ang sistema sa pagkolekta sa troso gigamit na namon ang mga 8 nga mga cores ug adunay usa ka dugang nga puno kaayo nga sangkap sa sistema ...

Ubos nga linya: kini nga kapilian mahimong makatarunganon, apan kung ang proyekto dako ug ang pagdumala niini andam nga mogasto sa hinungdanon nga mga kapanguhaan sa usa ka sentralisadong sistema sa pag-log.

Unya mitungha ang natural nga pangutana:

Unsa nga mga troso ang gikinahanglan gayud?

Mga log sa Kubernetes (ug dili lamang) karon: mga gilauman ug reyalidad Atong sulayan nga bag-ohon ang pamaagi mismo: ang mga troso kinahanglan nga dungan nga mahimong impormatibo ug dili tabonan matag usa panghitabo sa sistema.

Ingnon ta nga kita adunay usa ka malampuson nga online store. Unsa nga mga troso ang hinungdanon? Ang pagkolekta sa daghang impormasyon kutob sa mahimo, pananglitan, gikan sa ganghaan sa pagbayad, usa ka maayong ideya. Apan dili tanan nga mga troso gikan sa serbisyo sa paghiwa sa imahe sa katalogo sa produkto hinungdanon alang kanamo: igo ra ang mga sayup ug advanced nga pag-monitor (pananglitan, ang porsyento sa 500 nga mga sayup nga nahimo sa kini nga sangkap).

Busa nakaabot kami sa konklusyon nga Ang sentralisadong logging dili kanunay makatarunganon. Kanunay nga gusto sa kliyente nga kolektahon ang tanan nga mga troso sa usa ka lugar, bisan kung sa tinuud, gikan sa tibuuk nga log, usa ra ka kondisyon nga 5% sa mga mensahe nga hinungdanon alang sa negosyo ang gikinahanglan:

  • Usahay igo na ang pag-configure, ingnon ta, ang gidak-on ra sa container log ug ang tigkolekta sa sayup (pananglitan, Sentry).
  • Ang usa ka pahibalo sa sayup ug usa ka dako nga lokal nga log mismo mahimong igo na aron masusi ang mga insidente.
  • Kami adunay mga proyekto nga gihimo sa eksklusibo nga mga pagsulay ug sistema sa pagkolekta sa sayup. Ang developer wala magkinahanglan og mga troso nga ingon niana - nakita nila ang tanan gikan sa mga pagsubay sa sayup.

Ilustrasyon gikan sa kinabuhi

Ang laing istorya mahimong usa ka maayong panig-ingnan. Nakadawat kami usa ka hangyo gikan sa security team sa usa sa among mga kliyente nga naggamit na sa usa ka komersyal nga solusyon nga naugmad dugay na sa wala pa ang pagpaila sa Kubernetes.

Kinahanglan nga "makighigala" sa sentralisadong sistema sa pagkolekta sa troso nga adunay sensor sa pagkakita sa problema sa korporasyon - QRadar. Kini nga sistema makadawat og mga troso pinaagi sa syslog protocol ug makuha kini gikan sa FTP. Bisan pa, dili dayon posible nga i-integrate kini sa remote_syslog plugin para sa fluentd (ingon nga kini nahimo, wala kami nag-inusara). Ang mga problema sa pag-set up sa QRadar naa sa kilid sa security team sa kliyente.

Ingon nga resulta, ang bahin sa mga log nga kritikal sa negosyo gi-upload sa FTP QRadar, ug ang laing bahin gi-redirect pinaagi sa hilit nga syslog direkta gikan sa mga node. Alang niini misulat pa gani kami simple nga tsart - tingali kini makatabang sa usa ka tawo sa pagsulbad sa usa ka susama nga problema... Salamat sa resulta nga pamaagi, ang kliyente sa iyang kaugalingon nakadawat ug nag-analisar sa kritikal nga mga troso (gamit ang iyang paborito nga mga himan), ug kami nakahimo sa pagpakunhod sa gasto sa logging system, sa pagluwas lamang sa Niaging bulan.

Ang laing pananglitan mao ang nagpaila kung unsa ang dili buhaton. Usa sa among mga kliyente alang sa pagproseso matag usa mga panghitabo gikan sa user, gihimo multiline unstructured nga output impormasyon sa log. Sama sa imong gitag-an, ang ingon nga mga troso dili kaayo kombenyente sa pagbasa ug pagtipig.

Pamantayan para sa mga troso

Ang ingon nga mga pananglitan nagdala sa konklusyon nga dugang sa pagpili sa usa ka sistema sa pagkolekta sa troso, kinahanglan nimo pagdesinyo usab sa mga troso mismo! Unsa ang mga kinahanglanon dinhi?

  • Ang mga log kinahanglan nga naa sa format nga mabasa sa makina (pananglitan, JSON).
  • Ang mga log kinahanglan nga compact ug adunay katakus sa pag-usab sa lebel sa pag-log aron ma-debug ang posible nga mga problema. Sa parehas nga oras, sa mga palibot sa produksiyon kinahanglan nimo nga magpadagan ang mga sistema nga adunay lebel sa pag-log sama pasidaan o Sayop.
  • Ang mga log kinahanglan nga ma-normalize, nga mao, sa usa ka butang nga log, ang tanan nga mga linya kinahanglan adunay parehas nga tipo sa uma.

Ang wala matukod nga mga troso mahimong mosangpot sa mga problema sa pagkarga sa mga troso ngadto sa pagtipig ug sa hingpit nga pagpahunong sa ilang pagproseso. Isip usa ka ilustrasyon, ania ang usa ka pananglitan nga adunay sayup 400, nga daghan ang siguradong nakatagbo sa mga fluentd log:

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

Ang sayup nagpasabut nga nagpadala ka usa ka uma nga ang tipo dili lig-on sa indeks nga adunay andam nga gihimo nga mapa. Ang pinakasimple nga pananglitan mao ang usa ka field sa nginx log nga adunay variable $upstream_status. Mahimo kini nga adunay usa ka numero o usa ka hilo. Pananglitan:

{ "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"}

Gipakita sa mga troso nga ang server 10.100.0.10 mitubag sa usa ka 404 nga sayup ug ang hangyo gipadala ngadto sa laing pagtipig sa sulod. Ingon nga resulta, ang bili sa mga troso nahimong sama niini:

"upstream_response_time": "0.001, 0.007"

Kini nga sitwasyon komon kaayo nga kini angayan nga maglain mga pakisayran sa dokumentasyon.

Komosta ang pagkakasaligan?

Adunay mga panahon nga ang tanan nga mga troso nga wala’y eksepsiyon hinungdanon. Ug uban niini, ang kasagarang mga laraw sa pagkolekta sa troso para sa mga K8 nga gisugyot/gihisgot sa ibabaw adunay mga problema.

Pananglitan, ang fluentd dili makakolekta og mga troso gikan sa mubo nga kinabuhi nga mga sudlanan. Sa usa sa among mga proyekto, ang sudlanan sa paglalin sa database nagpuyo nga wala’y 4 segundos ug dayon gitangtang - sumala sa katugbang nga anotasyon:

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

Tungod niini, ang migration execution log wala maapil sa storage. Makatabang ang politika niini nga kaso. before-hook-creation.

Ang laing pananglitan mao ang Docker log rotation. Ingnon ta nga adunay aplikasyon nga aktibong nagsulat sa mga troso. Ubos sa normal nga mga kondisyon, among gidumala ang pagproseso sa tanan nga mga troso, apan sa diha nga adunay usa ka problema nga makita - pananglitan, sama sa gihulagway sa ibabaw nga adunay dili husto nga format - ang pagproseso mohunong, ug ang Docker nagtuyok sa file. Ang resulta mao nga ang mga log nga kritikal sa negosyo mahimong mawala.

Maoy hinungdan importante ang pagbulag sa mga log stream, pag-embed sa pagpadala sa labing bililhon nga mga direkta sa aplikasyon aron masiguro ang ilang kaluwasan. Dugang pa, dili kinahanglan ang paghimo sa pipila "accumulator" sa mga troso, nga makalahutay sa mubo nga pagtipig nga wala magamit samtang nagtipig sa mga kritikal nga mensahe.

Sa katapusan, dili nato kini kalimtan Importante nga bantayan pag-ayo ang bisan unsang subsystem. Kung dili, dali nga modagan sa usa ka sitwasyon diin ang fluentd anaa sa usa ka estado CrashLoopBackOff ug dili magpadala bisan unsa, ug kini nagsaad sa pagkawala sa hinungdanon nga kasayuran.

kaplag

Niini nga artikulo, wala kami nagtan-aw sa mga solusyon sa SaaS sama sa Datadog. Daghan sa mga problema nga gihulagway dinhi nasulbad na sa usa ka paagi o sa lain sa mga komersyal nga kompanya nga espesyalista sa pagkolekta sa mga troso, apan dili tanan makagamit sa SaaS sa lainlaing mga hinungdan. (ang nag-unang mga gasto ug pagsunod sa 152-FZ).

Ang sentralisadong pagkolekta sa troso sa sinugdan morag yanong buluhaton, apan dili gayod. Importante nga hinumdoman nga:

  • Ang mga kritikal nga sangkap ra ang kinahanglan nga ma-log sa detalye, samtang ang pag-monitor ug pagkolekta sa sayup mahimong ma-configure alang sa ubang mga sistema.
  • Ang mga log sa produksiyon kinahanglan nga huptan nga gamay aron dili makadugang sa wala kinahanglana nga karga.
  • Ang mga log kinahanglan nga mabasa sa makina, ma-normalize, ug adunay estrikto nga pormat.
  • Ang tinuud nga kritikal nga mga troso kinahanglan ipadala sa usa ka lahi nga sapa, nga kinahanglan ibulag gikan sa mga nag-una.
  • Angayan nga ikonsiderar ang usa ka log accumulator, nga makaluwas kanimo gikan sa mga pagbuto sa taas nga load ug maghimo sa load sa storage nga mas uniporme.

Mga log sa Kubernetes (ug dili lamang) karon: mga gilauman ug reyalidad
Kining yano nga mga lagda, kon ipadapat bisan asa, magtugot sa mga sirkito nga gihulagway sa ibabaw nga mogana - bisan pa nga wala silay importanteng mga sangkap (ang baterya). Kung dili nimo sundon ang ingon nga mga prinsipyo, ang buluhaton dali nga magdala kanimo ug sa imprastraktura sa lain nga puno kaayo (ug sa samang higayon dili epektibo) nga bahin sa sistema.

PS

Basaha usab sa among blog:

Source: www.habr.com

Idugang sa usa ka comment