Loki – logide kogumine, kasutades Prometheuse lĂ€henemist

Tere, habroviinid! Uue kursuse kÀivitumise eel «DevOps praktikad ja tööriistad» oleme valmis teid huvitava materjali tÔlkega.

See artikkel on lĂŒhike sissejuhatus Lokisse. Loki projekt on toetatud Grafana ja suunatud logide tsentraliseeritud kogumisele (serveritest vĂ”i konteineritest).

Loki peamine inspiratsiooniallikas oli Prometheus idee rakendada selle lÀhenemisviise logide haldamiseks:

  • siltide (labels) kasutamine andmete salvestamiseks
  • vĂ€he ressursside tarbimist

Me tuleme veel Prometheuse tööpÔhimÔtete juurde tagasi ja toome vÀlja mitmeid nÀiteid selle kasutamisest Kubernetes kontekstis.

MÔned sÔnad Prometheusest

Loki toimimise tÀielikuks mÔistmiseks on oluline astuda samm tagasi ja veidi meenutada Prometheust.

Üks Prometheuse iseloomulikke jooni on mÔÔdikute hankimine kogumispunktidest (eksportijate kaudu) ja nende salvestamine TSDB-sse (ajarealiste andmete baas) koos metakirjelduste lisamisega siltidena.

Miks see on vajalik

Viimasel ajal on Prometheus saanud de facto standardiks konteinerite ja Kubernetes'i maailmas: selle paigaldamine on vÀga lihtne, ning Kubernetes klastris on algselt olemas Prometheuse lÔpp-punkt. Prometheus saab ka hankida mÔÔdikuid konteineris kÀivitatavatest rakendustest, sÀilitades samas teatud sildid. Seega on rakenduste jÀlgimine vÀga lihtsalt teostatav.

Kahjuks pole logide haldamiseks endiselt ĂŒhtset "vĂ”tmed kĂ€tte" lahendust, ning peate leidma lahenduse enda jaoks:

  • hallatav pilveteenus logide tsentraliseerimiseks (AWS, Azure vĂ”i Google)
  • monitooringuteenuse "monitooring teenusena" (nĂ€iteks Datadog)
  • logide kogumise oma teenuse loomine.

Kolmandas variandis olen traditsiooniliselt kasutanud Elasticsearchi, kuigi ma ei ole alati olnud selle ĂŒle rahul (eriti selle keerukuse ja keerulise seadistamise tĂ”ttu).

Loki on kavandatud eesmÀrgiga lihtsustada rakendamise protsessi vastavalt jÀrgmistele pÔhimÔtetele:

  • olla lihtne alustada
  • tarbida vĂ€he ressursse
  • töötada iseseisvalt ilma erilise hoolduse vajaduseta
  • olla tĂ€iendus Prometheusele vigade uurimisel.

Kuid see lihtsus saavutatakse teatud kompromisside arvelt. Üks neist on see, et sisu ei indekseeritakse. SeetĂ”ttu pole teksti otsimine eriti tĂ”hus ega rikast, samuti ei vĂ”imalda see sisu statistikat pidada. Kuid kuna Loki tahab olla grep'i vastand ja tĂ€iendus Prometheusele, siis see ei ole puudus.

Juhtumite uurimine

Et paremini mÔista, miks Loki indeksit ei vajata, tuleme tagasi meetodi juurde, mida Loki arendajad kasutasid juhtumite uurimiseks:

Loki – logide kogumine, kasutades Prometheuse lĂ€henemist
1 Hoiatus → 2 Armatuurlaud → 3 Adhoc pĂ€ring → 4 Logide kogumine → 5 Jaotatud jĂ€lgimine → 6 Parandamine!
(1 Hoiatus → 2 Armatuurlaud → 3 Adhoc pĂ€ring → 4 Logide kogumine → 5 Jaotatud jĂ€lgimine → 6 Parandamine!)

Idee seisneb selles, et saame mingi hoiatuse (Slacki teade, SMS jne) ja pÀrast seda:

  • vaatame Grafana armatuurlaudu
  • vaatame teenuste mÔÔdikuid (nt Prometheuses)
  • vaatame logikirjeid (nt Elasticsearchis)
  • vĂ”ib-olla vaatame jaotatud jĂ€lgimisi (Jaeger, Zipkin jne)
  • ja lĂ”puks lahendame algse probleemi.

Siin, Grafana + Prometheus + Elasticsearch + Zipkin virna korral, tuleb kasutada nelja erinevat tööriista. Aja kokkuhoidmiseks oleks hea, kui kĂ”iki neid etappe saaks teha ĂŒhe tööriistaga: Grafana. Tuleb mĂ€rkida, et selline uurimismeetod on Grafanas kasutusele vĂ”etud alates versioonist 6. Nii et on vĂ”imalik otse Grafanast Prometheuse andmetele juurde pÀÀseda.

Loki – logide kogumine, kasutades Prometheuse lĂ€henemist
Explorer ekraan on jagatud Prometheuse ja Loki vahel

Sellel ekraanil saab vaadata Lokis logisid, mis on seotud Prometheuse mÔÔdikutega, kasutades ekraani jagamise kontseptsiooni. Alates versioonist 6.5 vÔimaldab Grafana logikirjetele Loki puhul jÀlgimisidentifikaatori (trace id) töötlemist, et linkida teie lemmik jaotatud jÀlgimise tööriistade juurde (Jaeger).

Loki kohaliku testi tegemine

Lihtsaim viis Loki kohalikuks testimiseks on kasutada docker-compose'i. Docker-compose fail asub Loki repository's. Repositooriumi saate allalaadida jÀrgmise kÀsu abil git:

$ git clone https://github.com/grafana/loki.git

SeejÀrel peate minema production katalooge:

$ cd production

PÀrast seda saate viimased Docker pildid kÀtte jÀrgmise kÀsuga:

$ docker-compose pull

LÔpuks kÀivitatakse Loki virna jÀrgmise kÀsuga:

$ docker-compose up

Loki arhitektuur

Siin on vÀike diagramm Loki arhitektuurist:

Loki – logide kogumine, kasutades Prometheuse lĂ€henemist
Loki arhitektuuri pÔhimÔtted

Veebiklient kÀivitab rakendusi serveris, Promtail kogub logisid ja saadab need Loki'sse, veebiklient saadab samuti metainfot Loki'sse. Loki kogub kÔik ja edastab Grafanasse.
Loki on kÀivitatud. Olemasolevate komponentide vaatamiseks tÀitke jÀrgmine kÀsk:

$ docker ps

VÀrskelt paigaldatud Docker'i korral peaks kÀsk tagastama jÀrgmise tulemuse:

IMAGE               PORTS                  NAMES
grafana/promtail:                          production_promtail_1
grafana/grafana: m  0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late  80/tcp,0.0.0.0:3100... production_loki_1

NÀeme jÀrgmisi komponente:

  • Promtail: agent, mis vastutab logide tsentraliseerimise eest
  • Grafana: tuntud tööriist juhtpaneelide jaoks
  • Loki: andmete tsentraliseerimise demon

Klassikalises infrastruktuuris (nt virtuaalmasinate pĂ”hjal) peaks igas masinas olema paigaldatud Promtail agent. Grafana ja Loki vĂ”ivad olla paigaldatud ĂŒhte masinasse.

Paigaldamine Kuberneteses

Loki komponentide paigaldamine Kubernetesesse koosneb jÀrgmistest etappidest:

  • daemonSet Promtail agendi paigaldamiseks igas klastrite serveris
  • Loki paigaldamine (Deployment)
  • ja viimasena — Grafana paigaldamine.

Õnneks on Loki saadaval Helm pakina, mis lihtsustab selle paigaldamist.

Paigaldamine Heml kaudu

Heml peaks teil juba olema paigaldatud. Selle saab alla laadida projekti GitHubi repost, paigaldades arhivi, mis vastab teie arhitektuurile, ja lisades helm kausta. $PATH.

MĂ€rkus: Hiljuti ilmus Helm versioon 3.0.0. Kuna seal on palju muutusi, soovitatakse lugejal oodata natuke enne selle kasutamist..

Helmi allika lisamine

Esimene samm on lisada 'loki' reposti jÀrgmise kÀsuga:

$ helm add loki https://grafana.github.io/loki/charts

PĂ€rast seda saab otsida pakette nimega 'loki':

$ helm search loki

Tulemus:

loki/loki       0.17.2 v0.4.0 Loki: nagu Prometheus, aga logide jaoks.
loki/loki-stack 0.19.1 v0.4.0 Loki: nagu Prometheus, aga logide jaoks.
loki/fluent-bit 0.0.2  v0.0.1 Kasutab fluent-bit Loki go pluginit...
loki/promtail   0.13.1 v0.4.0 Vastutab logide kogumise eest...

Need paketid omavad jÀrgmisi funktsioone:

  • pakett loki/loki vastab ainult Loki serverile
  • pakett loki/fluent-bit vĂ”imaldab teil paigaldada DaemonSet, kasutades fluent-bin'i logide kogumiseks asemele Promtail
  • pakett loki/promtail sisaldab logifailide kogumise agenti
  • pakett loki/loki-stackvĂ”imaldab kohe paigaldada Loki koos Promtail'iga.

Loki paigaldamine

Kuberneetes Loki paigaldamiseks kÀivitage jÀrgmine kÀsk nimekirjas 'monitoring':

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

Ketta ketta aega, lisage parameeter --set loki.persistence.enabled=true:

$ helm upgrade --install loki loki/loki-stack 
              --namespace monitoring 
              --set loki.persistence.enabled=true

MÀrkus: kui soovite korraga kÀivitada Grafana, lisage parameeter --set grafana.enabled=true

Selle kÀsu kÀivitamisel peaksite saama jÀrgmise vÀljundi:

VIIMASE KASUTUS: Teis, 19. november 2019, 15:56:54
NIMETUSRUUM: jälgimine
OLEK: KASUTUSSES
RESSURSID:
==> v1/ClusterRole
NIMI VANUS
loki-promtail-clusterrole 189d
…
MÄRKUSED:
Loki kompositsioon on teie klastrisse paigaldatud. Loki saab nüüd lisada andmeallikana Grafanasse.
Vaata <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> täiendavate üksikasjade jaoks.

Vaadates podide olekut nimelia “monitoring”, nĂ€eme, et kĂ”ik on juurutatud:

$ kubectl -n monitoring get pods -l release=loki

Tulemus:

NIMI                   VALMIS STATUS   KORDUSED VANUS
loki-0                 1/1    Jookseb  0         147m
loki-promtail-9zjvc    1/1    Jookseb  0         3h25m
loki-promtail-f6brf    1/1    Jookseb  0         11h
loki-promtail-hdcj7    1/1    Jookseb  0         3h23m
loki-promtail-jbqhc    1/1    Jookseb  0         11h
loki-promtail-mj642    1/1    Jookseb  0         62m
loki-promtail-nm64g    1/1    Jookseb  0         24m

KĂ”ik podid on kĂ€ivitunud. NĂŒĂŒd on aeg teha mĂ”ned testid!

Ühendamine Grafanaga

KĂŒbernese kaudu Grafanaga ĂŒhendamiseks tuleb avada tunnel selle podi juurde. Allpool on kĂ€sk, et avada port 3000 Grafana podi jaoks:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

Teine oluline punkt on Grafana administraatori parooli taastamine. Parool on salajas loki-grafana vÀljal .data.admin-user base64 vormingus.

Selle taastamiseks peate kÀivitama jÀrgmise kÀsu:

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

Kasutage seda parooli koos vaikimisi administraatori kontoga (admin).

Loki andmeallika mÀÀramine Grafanas

KÔigepealt veenduge, et Loki andmeallikas on loodud (Konfiguratsioon / Andmeallikas).
Siin on nÀide:

Loki – logide kogumine, kasutades Prometheuse lĂ€henemist
NĂ€ide Loki andmeallika seadistamisest

Nuppu “Test” vajutades saate kontrollida ĂŒhendust Lokiga.

Teeme pÀringud Lokile

NĂŒĂŒd minge Grafanas jaotisse “Uurimine”. Konteinerite logide vastuvĂ”tmise korral lisab Loki Kubernetesest metainfot. Nii et on vĂ”imalik vaadata kindla konteineri logsid.

NÀiteks konteineri promtail logide valimiseks vÔite kasutada jÀrgmist pÀringut: {container_name = "promtail"}.
Siin Àrge unustage valida Loki andmeallikas.

See pÀring tagastab konteinerite aktiivsuse jÀrgmises vormingus:

Loki – logide kogumine, kasutades Prometheuse lĂ€henemist
PĂ€ringu tulemus Grafanas

Lisamine armatuurlauale

Alates Grafana 6.4-st saab logiteavet otse armatuurlauale asetada. PĂ€rast seda saab kasutaja kiiresti vahetada kĂŒlastuste arvu ja rakenduse jĂ€lgimise vahel.

Allpool on nÀide armatuurlauast, mis rakendab seda suhtlemist:

Loki – logide kogumine, kasutades Prometheuse lĂ€henemist
Prometheuse'i ja Loki logide mÔÔdikute nÀidisdashboards

Loki tulevik

Hakkasin Loki kasutama mais/juunis versioonist 0.1. TÀna on juba vÀlja antud versioon 1, samuti 1.1 ja 1.2.

Pean tunnistama, et versioon 0.1 ei olnud piisavalt stabiilne. Kuid 0.3 nĂ€itas juba tĂ”elisi kĂŒpsuse mĂ€rke ning jĂ€rgmised versioonid (0.4, seejĂ€rel 1.0) seda muljet vaid tugevdasid.

PÀrast 1.0.0 ei ole kellelgi enam Ôigustusi, et mitte kasutada seda suurepÀrast tööriista.

Edasised tÀiustused peaksid keskenduma mitte niivÔrd Lokile, vaid pigem selle integreerimisele suurepÀrase Grafana'ga. Tegelikult on Grafana 6.4-s juba olemas hea integratsioon dashboardidega.

Hiljuti vÀlja antud Grafana 6.5 parandab seda integratsiooni veelgi, automaatselt tuvastades JSON-formaadis logide sisu.

Allpool on videos toodud vÀike nÀide sellest mehhanismist:

Loki – logide kogumine, kasutades Prometheuse lĂ€henemist
Loki stringide kasutamine Grafanas

On vĂ”imalik kasutada ĂŒhte JSON-i vĂ€lja, nĂ€iteks:

  • linkimiseks vĂ€lise tööriistaga
  • logide sisu filtreerimiseks

NÀiteks saate klikida traceId-le, et minna Zipkini vÔi Jaegerisse.

Traditsiooniliselt ootame teie kommentaare ja kutsume teid avatud veebinarile, kus rÀÀgime sellest, kuidas DevOps-tööstus arenes 2019. aastal ja arutame vÔimalikke arenguviise 2020. aastaks.

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