Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Vaatame ĂŒle logimise alused Dockeris ja Kuberneteses, seejĂ€rel kĂ€sitleme kahte tööriista, mida saab julgelt kasutada tootmises: Grafana Loki ja EFK (Elasticsearch + Fluent Bit + Kibana) komplekti.

Artikli sisu — vĂ€ljaanne avatud loengust koolis "Slerm". Kui on soov ja eriti kui see on tootmisvajadus, on vĂ”imalik lĂ€bida tĂ€iendav koolitus — registreeruge kursusele Kuberneteses infrastruktuuri jĂ€lgimise ja logimise kohta.

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Logimine Dockeris

Kuberneteses töötavad rakendused podides, kuid madalamal tasemel töötavad nad siiski tavaliselt Dockeris. SeetÔttu tuleb logimine seadistada nii, et koguda logisid konteineritest. Kuna konteinerid kÀivitab Docker, tuleb aru saada, kuidas logimine Dockeris toimib.

Loodan, et iga lugeja teab: rakenduse logid tuleb kirjutada stdout/stderr, mitte konteineri sisse. Logid kogub Docker Daemon, ning see töötab just nende logidega, mis saadetakse stdout/stderr. Lisaks toob logide salvestamine konteineri sisse endaga kaasa probleeme: konteiner paisub kasvava logi tÔttu (kuna konteineris pole tÔenÀoliselt Logrotate'i), ja Docker Daemon ei ole sellest logist teadlik.

Dockeril on mitmeid logide kogumise draivereid vÔi pluginaid. Tasuta versioonis Docker Community Edition (CE) on logidraivereid vÀhem kui kommertsversioonis Docker Enterprise Edition (EE).

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Docker EE-d pole ma praktikas kunagi kasutanud: Southbridge'is pĂŒĂŒame kinni pidada avatud lĂ€htekoodiga lahendustest ning enamikku Docker EE tĂ€iendavaid funktsioone klientidele ei ole vajalik.

Docker CE logidraiverid:

local — logide salvestamine Docker Daemoni sisemisse faili;
json-file — iga konteineri katalooge luuakse json-log;
journald — logide saatmine journald-ile.

Dockeris asuvad logimise seaded failis daemon.json.

VĂ€ljas "log-driver" mÀÀratakse plugin ja vĂ€ljas "log-opts" — selle seadistused. Ülaltoodud nĂ€ites on mÀÀratud plugin "json-file", logi suuruse piirang — "max-size": "10m"; failide arvu piirang (ringluse seaded) — "max-file": "3"; samuti vÀÀrtused, mis logidele lisanduvad.

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

MĂ”ningaid logidraiveri seadistusi saab mÀÀrata kĂ€surea utiliidi kaudu. See on mugav, kui ĂŒhte konteinerit tuleb kĂ€ivitada teise logidraiveriga.

Nii nÀeb logimise skeem Dockeris vÀlja:

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Kuidas skeem töötab: logi draiver, nÀiteks json-file, loob faile. Logikogujad (Rsyslog, Fluentd, Logagent ja teised) koguvad need failid ja edastavad need salvestamiseks Elasticu, Sematexti vÔi muudele salvestuskohtadele.

Kubernetes'e logimise omadused

Lihtsustatult nÀeb logimise skeem Kubernetes'es vÀlja jÀrgmine: on pod, milles töötab konteiner, ja konteiner saadab logid stdout'i/stderr'i. SeejÀrel loob Docker faili ja salvestab logid, mida saab hiljem roteerida.

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Vaatame Kubernetes'e logimise omadusi.

Salvesta logid deployments'ide vahel. See on oluline tingimus logimise Ă”ige seadistamise jaoks. Kui logisid ei salvestata deployments'ide vahel, siis uue rakenduse versiooni vĂ€ljalaskmisel kustutatakse eelnevad logid, samuti pĂ”hjustab konteineri taaskĂ€ivitamine logide kaotust. Kubernetes'il on vĂ”tme sĂ”na —previous, mis vĂ”imaldab vaadata rakenduse logisid enne viimast pod'i taaskĂ€ivitamist, kuid mitte kaugemale.

Koguda logisid kĂ”igilt instantsidelt. Kui mikroteenuseid majutatakse pilves, vastutab sĂŒsteemi ĂŒle Cloud Provider. Kui mikroteenused on enda riistvaral, siis peavad lisaks konteinerite logidele olema kogutud ka sĂŒsteemi logid.

Varem ei olnud mugavaid tööriistu logide kogumiseks nii sĂŒsteemist kui mikroteenustest. Tavaliselt kogus ĂŒks tööriist sĂŒsteemi logisid (nĂ€iteks Rsyslog), teine - logisid Dockerist (nĂ€iteks journal-bit koos Docker'i logi draiveri seadistusega journald'ile). Prooviti kasutada journal-bit’i, et koguda logisid nii konteineritest (Docker'i logi draiveris mĂ€rkida, et logid peavad minema journald'isse) kui ka sĂŒsteemist (CentOS 7-l on juba systemd ja journald). Lahendus on toimiv, kuid mitte ideaalne. Kui logisid on palju, hakkab journal-bit lagima ja sĂ”numid kaovad.

Katsetamine jĂ€tkus - ja leiti teine ​​meetod. CentOS 7-s dubleeritakse peamised sĂŒsteemi logid (messages, audit, secure) var-log'ide kaudu failidena. Dockeris saab samuti seadistada logide salvestamise faile json. Seega saab CentOS 7 ja Docker'i faile koos koguda.

Aja jooksul muutus ELK Stack lahendus populaarseks. See on kombinatsioon mitmest tööriistast: Elasticsearch, Logstash ja Kibana.

Elasticsearch salvestab konteinerite logid, Logstash kogub logisid instantsidelt, Kibana vÔimaldab kokku saada logisid ja koostada nende pÔhjal graafikuid. MÔnda aega kasutati ELK Stack'i aktiivselt, kuid minu arvates jÔuab selle aeg lÔpule. RÀÀgin hiljem, miks.

Lisa metaandmeid. Podid, rakendused, konteinerid vĂ”ivad olla kĂ€ivitatud igal pool. Veelgi enam, ĂŒhel rakendusel vĂ”ib olla mitu instantsi. Logid on salvestatud ĂŒhes formaadis, kuid me peame aru saama, milline replika on tegu, milline Pod seda kirjutab ja millises namespace'is see asub. SeetĂ”ttu peab logidele lisama metainformatsiooni.

Parsi logisid. LĂ”bus on see, et logimis- ja jĂ€relevalvesĂŒsteemi hoolduskulud vĂ”ivad ĂŒletada peamise rakenduse kulud. Kui teid voolab kĂŒmneid ja sadu tuhandeid logisid sekundis, tundub see loogiline, kuid siiski tuleb teada piir. Üks viis selle piiri leidmiseks on logide parsimine.

Reeglina ei ole vajalik koguda ja salvestada kĂ”iki logisid, tuleks salvestada ainult osa — nĂ€iteks logid, mille staatus on 'warning' vĂ”i 'error'. Kui rÀÀkida nginx'i vĂ”i ingress-kontrollerite logidest, siis tuleks salvestada ainult need, mille staatus erineb 200-st. Kuid see pole universaalne soovitus: kui te ehitate mingil viisil analĂŒĂŒsi nginx'i logide pĂ”hjal, siis on ilmselgelt mĂ”istlik neid koguda.

MĂ”tlematult logide filtreerimist ei soovitata, sest filtreeritud andmed vĂ”ivad mitte piisata normaalseks analĂŒĂŒsiks. Teiselt poolt, vĂ”ib olla, et analĂŒĂŒtika tuleks viia lĂ€bi mitte logimise tasemel, vaid mÔÔtmete kogumise tasemel. Siis ei pea salvestama sadu tuhandeid ridu koodiga 200. Üks lĂ€henemisviis on saada teavet liiklusest ja vigadest ingress-kontrollerite mÔÔtmetest.

KokkuvĂ”ttes tuleb siin hoolikalt mĂ”elda: mida te soovite salvestada ja kui kaua, sest muidu tekib olukord, kus logimis-sĂŒsteem röövib ressursse rohkem kui peamine projekt.

Praegu ei ole standardset lahendust logimise jaoks. Erinevalt jĂ€relevalvest, kus on ĂŒks enimlevinud lahendus Prometheus, ei ole logimisel standardit.

KĂ€esolevas loengus vaatame kahte tööriista: ĂŒks populaarne ja teine — ĂŒha populaarsem. Lisaks neile on ka teisi, kuid sellest artiklist me neid ei puuduta.

Arvestades kĂ”iki eelnevalt kĂ€sitletud omadusi, vĂ”ib logimist Kuberneteses nĂŒĂŒd kujutada sellise skeemina:

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

JÀÀb konteineri logi, pööramine, kuid ilmub kogumise agent, mis kogub logid ja saadab need sĂ€ilitamiseks (skeemil — Logging Backend). Agent töötab igas sĂ”lmes ja tavaliselt on see kĂ€ivitatud Kuberneteses.

NĂŒĂŒd vaatame logimise tööriistu.

Grafana Loki

Grafana Loki on hiljuti ilmunud, kuid on juba saanud ĂŒsna tuntuks. Selle eelised: lihtne installatsioon, vĂ€henenud ressursikasutus, ei vaja Elasticsearchi installimist, kuna salvestab andmeid TSDB-sse (aegade seeria andmebaas). Eelmisel artiklil kirjutasin, et sellises andmebaasis salvestab andmeid Prometheus, ja see on ĂŒks paljusid sarnaseid jooni kahe toote vahel. Arendajad isegi vĂ€idavad, et Loki on "Prometheus logimise maailmas."

VĂ€ike kĂ”rvalepĂ”ige TSDB-st neile, kes ei ole lugenud eelmist artiklit: TSDB tĂ€idab suurepĂ€raselt suurte andmemahtude, ajaseeriate salvestamise ĂŒlesande, kuid ei ole mĂ”eldud pikaajaliseks salvestamiseks. Kui mingil pĂ”hjusel peate logisid hoidma rohkem kui kaks nĂ€dalat, on parem neid edastada teise andmebaasi.

Veel ĂŒks Loki eelis on see, et andmete visualiseerimiseks kasutatakse Grafanat. VĂ€ga mugav: Grafanas vaatame monitoorimise andmeid ja seal samas, ĂŒhendades Loki, vaatame logisid. Logide pĂ”hjal saab luua grafiike.

Loki arhitektuur nÀeb vÀlja umbes nii:

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Kasutades DaemonSet-i, paigaldatakse kÔikidesse klastri serveritesse agent - Promtail vÔi Fluent Bit. Agent kogub logisid. Loki vÔtab need ja salvestab oma TSDB-sse. Logidele lisatakse kohe metainvormatsioon, mis on mugav: saab filtreerida Pods'ide, nimede, konteinerite ja isegi silte jÀrgi.

Loki installimise juhend

Loki töötab tuttavas Grafana liideses. Lokil on isegi oma pĂ€ringute keel, nimega LogQL - selle nimi ja sĂŒntaks meenutavad PromQL-i Prometheuses. Loki liideses on pĂ€ringute nĂ”uanded, seega ei pea neid meeles pidama.

Dokumentatsioon LogQL keele jaoks

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid
Loki Grafana liideses

Filtreid kasutades on Lokis vĂ”imalik leida koodid ("400", "404" ja muud); vaadata logisid kogu nodest; filtreerida vĂ€lja kĂ”ik logid, kus on sĂ”na "error". Kui logile vajutada, avaneb kaardike kogu sĂŒndmuse teabega.

Lokis on piisavalt tööriistu, mis vÔimaldavad vajalikud logid vÀlja vÔtta, kuigi ausalt öeldes vÔiks neid tehniliselt olla rohkem. Praegu areneb Loki aktiivselt ja vÔtab populaarsust.

Elastic + Fluent Bit + Kibana (EFK stack)

EFK stack on klassikalisem ja siiski mitte vÀhem populaarne logimise tööriist.

Artiklis mainitud ELK (Elasticsearch + Logstash + Kibana) on vananenud, kuna Logstash on ebaefektiivne ja ressursimahukas. Selle asemel on levinud kergem ja efektiivsem Fluentd, millele on hiljem lisandunud Fluent Bit — veel kergem ja veel efektiivsem logikogumise agent.

Arendajate vĂ€itel on Fluent Bit ĂŒle 100 korra efektiivsem kui Fluentd: "seal, kus Fluentd tarbib 20 MB RAM-i, tarbib Fluent Bit 150 KB" — otsekohene tsitaat dokumentatsioonist. Selle tĂ”ttu on Fluent Bit'i kasutamine sagenenud.

Fluent Bit'il on vÀhem vÔimalusi kui Fluentd'l, kuid ta katab peamised vajadused, seetÔttu kasutame peamiselt Fluent Bit'i.

EFK stack tööreĆŸiim: agent kogub logisid kĂ”igist podidest (tavaliselt on see DaemonSet, mis töötab kĂ”ikidel klastriserveritel) ja saadab need salvestusse (Elasticsearch, PostgreSQL vĂ”i Kafka). Kibana ĂŒhendub salvestusega ja tĂ”mbab sealt kogu vajaliku teabe.

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Kibana esitab teabe mugavas veebirakenduses. Seal on diagrammid, filtrid ja palju muud.

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Logide pÔhjal saab luua terveid juhtpaneele.

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Fluent Bit'i vÔimalused

Kuna Fluent Bit'ist on tavaliselt vÀhem kuulda kui Logstash'ist, vaatame seda veidi lÀhemalt. Fluent Bit'it saab loogiliselt jagada 6 mooduliks, millele saab lisada pluginaid, mis laiendavad Fluent Bit'i funktsioone.

Logimine Kubernetes: kuidas koguda, salvestada, analĂŒĂŒsida ja töödelda logisid

Input moodul kogub logisid failidest, systemd teenustest ja isegi tcp-socket'ist (peab vaid mÀÀrama lĂ”pp-punkti, ja Fluent Bit hakkab sinna liikuma). Neid vĂ”imalusi on piisavalt, et logisid koguda nii sĂŒsteemist kui ka konteineritest.

Tootmis keskkonnas kasutame kÔige sagedamini pluginaid tail (seda saab suunata logifailide kausta) ja systemd (seda saab kÀskida, millistest teenustest logisid koguda).

Parser moodul viib logid ĂŒhise vormingusse. Vaikimisi on Nginx'i logid rida. Plugina abil saab seda rida muuta JSON'iks: mÀÀrata vĂ€ljad ja nende vÀÀrtused. JSON'iga on palju lihtsam töötada kui teksti logiga, kuna on olemas paindlikumad sorteerimisvĂ”imalused.

Filter moodul. Sellel tasemel jÀetakse vÀlja ebaolulised logid. NÀiteks saadetakse sÀilitamiseks logid, millel on vÀÀrtus "warning" vÔi kindlate siltidega. Valitud logid suunatakse puhvri.

Buffer moodul. Fluent Bit'il on kaks tĂŒĂŒpi puhvrit: mĂ€lu puhver ja ketaspuhver. Puhver on ajutine logide hoidla, mis on vajalik vigade vĂ”i tĂ”rgete korral. KĂ”ik tahavad RAM-i pealt kokku hoida, seetĂ”ttu valitakse tavaliselt ketaspuhver. Kuid tuleb arvestada, et enne ketaspuhvri kasutamist laaditakse logid ikkagi esmalt mĂ€lu.

Routing/Output moodul sisaldab logide saatmise reegleid ja aadresse. Nagu juba mainitud, on logid vÔimalik saata Elasticsearchi, PostgreSQLi vÔi nÀiteks Kafka'sse.

Huvitav on see, et logisid on vÔimalik saata Fluent Bit'ist Fluentd'sse. Kuna esimene on kergema kaaluga ja vÀhem funktsionaalne, saab lÀbi selle koguda logisid ja saata need Fluentd'sse, kus neid saab tÀnu tÀiendavatele pluginatele edasi töödelda ja saata salvestitesse.

Kui plaanite kasutada Elasticsearchi


LĂ”petuseks kaks nĂ”uannet neile, kes plaanivad kasutada Elasticsearchi logide salvestamiseks tootmisreĆŸiimis.

  1. Seadistage teavitused kasutades ElastAlert. See programm eristab logide ĂŒldvoost olulisi sĂ”numeid ja saadab neist teateid e-postile vĂ”i muudele kanalitele. Kahjuks on hiljuti toimunud kurvade uudiste avaldamine, et projekt vĂ”ib peagi lĂ”petada oma tegevuse..
  2. Logide pööramine kasutades rakendust Curator vĂ”i pöördudes Elasticsearchi API poole. Elastic teeb praegu tegelikult olulisi samme indeksite elutsĂŒkli haldamiseks ilma kolmandate osapoolte tööriistade kasutamiseta. Üldiselt ei ole mĂ”istlik logisid pikka aega hoida: tĂ”enĂ€oliselt ei ole mingit logi vajalik kahe nĂ€dala pĂ€rast — kui see tĂ”eliselt kriitiline on, siis saab see kahe nĂ€dala jooksul kindlasti töödeldud. ÄÀrmisel juhul saab vanad logid arhiveerida ja saata pikaajalisse sĂ€ilitamisse. Olen kuulnud erilogidest, mida seadus kohustab hoidma kuni 5 aastat. Isiklikult pole ma sellekohasega kokku puutunud, kuid ei seostaks ma sellist info tavaliste logidega, ning vĂ”ib-olla sĂ€ilitaksin neid isegi eraldi.

JĂ€tkub


Autor: Marsel Ibraev, sertifitseeritud Kubernetes administraator, praktiseeriv insener ettevĂ”ttes Southbridge, esineja ja kursuste arendaja SlĂŒrm.

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