Loki – logide kogumine katsetades Prometheuse lĂ€henemist.

Tere, Habra inimesed! Uue kursuse alguse eelĂ”htul „DevOps praktikas ja tööriistades“ oleme teile valmistanud huvitava materjali tĂ”lke.

See artikkel on lĂŒhike sissejuhatus Lokisse. Loki projekt saadab toetust Grafanalt ja on suunatud logide kesksele kogumisele (serveritest vĂ”i konteineritest).

Loki peamine inspiratsiooniallikas oli Prometheus idee rakendada selle lÀhenemisi logide haldamisel:

  • siltide (labels) kasutamine andmete salvestamiseks
  • ja vĂ€ikese ressursitarbimise korraldamine.

Me tuleme veel Prometheuse tööprintsiipide juurde tagasi ja toome mÔned nÀited selle kasutamisest Kubernetes kontekstis.

MÔni sÔna Prometheuse kohta

Et tÀielikult mÔista, kuidas Loki töötab, on oluline astuda samm tagasi ja meenutada Prometheust.

Üks Prometheuse eristavaid omadusi on meetrikate kogumine kogumispunktidest (exporterite kaudu) ja nende salvestamine TSDB-sse (Time Series Data Base, ajasarjade andmebaas), lisades metadatakse siltide kujul.

Miks see vajalik on

Viimastel aastatel on Prometheus saanud de facto standardiks konteinerite ja Kubernetes'i maailmas: selle paigaldamine on vÀga lihtne ning Kubernetes'i klastri puhul on Prometheus'le algselt olemas lÔpp-punkt. Prometheus suudab ka eraldada mÔÔdikud konteinersse paigaldatud rakendustest, sÀilitades samal ajal teatud sildid. SeetÔttu on rakenduste jÀlgimine vÀga kergesti teostatav.

Kahjuks pole logihalduseks siiani olemas „vĂ”tmed kĂ€tte“ lahendust ning peate leidma lahenduse enda jaoks:

  • haldus kĂ”ige pilveteenuses logide tsentraliseerimiseks (AWS, Azure vĂ”i Google)
  • jĂ€lgimisteenus „jĂ€lgimine teenusena“ (monitoring as a service) (nĂ€iteks Datadog)
  • enda logide kogumise teenuse loomine.

Kolmanda variandi puhul olen ma traditsiooniliselt kasutanud Elasticsearch'i, kuigi pole alati olnud sellega rahul (eriti selle raskuse ja konfigureerimise keerukuse tÔttu).

Loki on projekteeritud eesmÀrgiga lihtsustada rakenduse ellu viimist jÀrgmistel pÔhimÔtetel:

  • olema lihtne alguses
  • tarbima vĂ€he ressursse
  • töötama iseseisvalt ilma igasuguse spetsiaalse hoolduseta
  • olema tĂ€ienduseks Prometheus'ele, et aidata vigade uurimisel.

Kuid see lihtsus saavutatakse teatud kompromisside arvelt. Üks neist on sisu indekseerimise puudumine. SeetĂ”ttu ei ole teksti otsing vĂ€ga efektiivne ega sisukas ning ei vĂ”imalda statistikat sisu kohta. Kuna Loki soovib olla grep'i vaste ja tĂ€ienduseks Prometheusele, ei ole see puudus.

Juhtumite uurimine

Et paremini mÔista, miks Loki ei vajagi indekseerimist, naeme tagasi juhtumite uurimise meetodi juurde, mida Loki arendajad kasutasid:

Loki – logide kogumine katsetades Prometheuse lĂ€henemist.
1 Alarmeerimine → 2 Töölaud → 3 Adhoc kĂŒsimus → 4 Logide kogumine → 5 Jaotatud jĂ€lgimine → 6 Parandamine!
(1 Alarmeerimine → 2 Töölaud → 3 Adhoc kĂŒsimus → 4 Logide kogumine → 5 Jaotatud jĂ€lgimine → 6 Parandamine!)

Idee on selles, et saame mingisuguse hÀire (Slacki teade, SMS jne) ja seejÀrel:

  • vaatame Grafana juhtpaneele
  • vaatame teenuste mÔÔdikuid (nĂ€iteks Prometheuses)
  • vaatame logi kirjeid (nĂ€iteks Elasticsearchis)
  • vĂ”ibolla vaatame jaotatud jĂ€lgi (Jaeger, Zipkin jne)
  • ja lĂ”puks lahendame algse probleemi.

Siin, Grafana + Prometheus + Elasticsearch + Zipkin komplekti puhul tuleb kasutada nelja erinevat tööriista. Aja kokkuhoiu huvides oleks hea, kui saaksime kĂ”ik need etapid lĂ€bi viia ĂŒhe tööriista, Grafana, abil. TĂ”siseks tuleb mĂ€rkida, et selline uurimistöö lĂ€henemine on Grafanas rakendatud alates versioonist 6. Seega on vĂ”imalik juurde pÀÀseda Prometheuse andmetele otse Grafanast.

Loki – logide kogumine katsetades Prometheuse lĂ€henemist.
Explorer ekraan on jagatud Prometheuse ja Loki vahel.

Sellel ekraanil saab vaadata Loki logisid, mis on seotud Prometheuse meetritega, kasutades ekraani jagamise kontseptsiooni. Alates versioonist 6.5 vÔimaldab Grafana töödelda jÀlgimise identifikaatoreid (trace id) Loki logikandites, et minna linkide kaudu teie lemmikute jaotatud jÀlgimise tööriistade (Jaeger) juurde.

Loki kohalik test

Lihtsaim viis Loki kohalikuks testimiseks on kasutada docker-compose'i. Docker-compose fail asub Loki hoidlas. Hoidla saamiseks vÔite kasutada jÀrgmisi kÀske: git:

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

SeejÀrel peate minema kausta production:

$ cd production

PĂ€rast seda saab hankida uusimad Docker pildid:

$ docker-compose pull

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

$ docker-compose up

Loki arhitektuur

Siin on vÀike skeem Loki arhitektuurist:

Loki – logide kogumine katsetades Prometheuse lĂ€henemist.
Loki arhitektuuri pÔhimÔtted

Veebiklient kÀivitab rakendused serveris, Promtail kogub logisid ja saadab need Loki'sse, veebiklient saadab samuti metainformatsiooni Loki'sse. Loki kogub kÔik andmed ja edastab need Grafanale.
Loki on ĂŒles seatud. Olemasolevate komponentide vaatamiseks tĂ€itke jĂ€rgmine kĂ€sk:

$ docker ps

Uue Docker'i paigaldamise korral peaks kÀsk tagastama jÀrgmise tulemuse:

IMAGE               PORTS                  NAMES
grafana/promtail:                          production_promtail_1
grafana/grafana: 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 keskse kogumise eest
  • Grafana: tuntud tööriist armatuurlaudade jaoks
  • Loki: andmete keskse kogumise demon

Klassikalise infrastruktuuri korral (nĂ€iteks virtuaalmasinate pĂ”hjal) peab igas masinas olema paigaldatud Promtail agent. Grafana ja Loki vĂ”ivad olla paigaldatud ĂŒhte masinasse.

Paigaldamine Kubernetesesse

Loki komponentide paigaldamine Kubernetesesse hÔlmab jÀrgmist:

  • daemonSet, et paigaldada Promtail agent igas masinas serverite klastris
  • Loki paigaldamine
  • ja viimane — Grafana paigaldamine.

Õnneks on Loki saadaval Helm pakina, mis muudab selle paigaldamise lihtsamaks.

Paigaldamine lÀbi Helm

Helm peaks olema teie sĂŒsteemis juba installitud. Seda saab alla laadida projekti GitHubi hoidlast. See installitakse arhiveerimise teel, mis vastab teie arhitektuurile, ja helm lisatakse $PATH.

MÀrkus: versioon 3.0.0 Helm on hiljuti vÀlja antud. Kuna selles on palju muudatusi, soovitatakse lugejal veidi oodata, enne kui seda kasutama hakatakse..

Allika lisamine Helmi jaoks

Esimene samm on lisada "loki" hoidla jÀrgmise kÀsu abil:

$ 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-biti Loki go pistikut...
loki/promtail   0.13.1 v0.4.0 Vastutab logide kogumise eest ja...

Need paketid omavad jÀrgmisi funktsioone:

  • pakett loki/loki vastab ainult Loki serverile
  • pakett loki/fluent-bit vĂ”imaldab teil paigaldada DaemonSet, kasutades fluent-biti logide kogumiseks, mitte Promtaili
  • pakett loki/promtail sisaldab logifailide kogumise agenti
  • pakett loki/loki-stack, vĂ”imaldab koheselt paigaldada Loki koos Promtailiga.

Loki installimine

Kuberneteses Loki kĂ€ivitamiseks kĂ€ivitage jĂ€rgmine kĂ€sk nimespetsiifilises “monitoring”:

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

Andmete salvestamiseks kettale 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 samuti kÀivitada Grafanat, lisage parameeter --set grafana.enabled=true

Selle kÀsku kÀivitades peaksite saama jÀrgmise vÀljundi:

VIIMASELT PAIGALDATUD: E, 19. nov 2019 15:56:54
NIMETUSRUUM: monitoring
OLEK: PAIGALDATUD
RESSURSID:
==> v1/ClusterRole
NIMI VANUS
loki-promtail-clusterrole 189d
…
MÄRKUSED:
Loki hunnik on paigaldatud teie klastrisse. Lokit saab nüüd lisada andmeallikana Grafanas.
Vaata <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> lisainformatsiooni.

Vaadates podide seisundit nimespetsiifilises “monitoring”, nĂ€eme, et kĂ”ik on kĂ€ivitunud:

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

Tulemus:

NIMI                 VALMIS  SEISUND   UUESTIKÄIVITUSI  VANUS
loki-0               1/1    KĂ€ivitunud  0         147m
loki-promtail-9zjvc  1/1    KĂ€ivitunud  0         3h25m
loki-promtail-f6brf  1/1    KĂ€ivitunud  0         11h
loki-promtail-hdcj7  1/1    KĂ€ivitunud  0         3h23m
loki-promtail-jbqhc  1/1    KĂ€ivitunud  0         11h
loki-promtail-mj642  1/1    KĂ€ivitunud  0         62m
loki-promtail-nm64g  1/1    KĂ€ivitunud  0         24m

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

Ühendamine Grafanaga

Kuberneteses Grafanaga ĂŒhendamiseks peate avama tunnel oma podi juurde. Allpool on kĂ€sk, et avada port 3000 Grafana podile:

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

Teine oluline punkt on administraatori parooli taastamise vajadus Grafanas. Parool hoitakse saladuses loki-grafana vÀljal .data.admin-user base64 formaadis.

Selle taastamiseks tuleb tÀita jÀrgmine kÀsk:

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

Kasutage seda parooli koos vaikeadministratori kontoga (admin).

Loki andmeallika mÀÀramine Grafanas

Esiteks veenduge, et Loki andmeallikas on loodud (Configuration / Datasource).
Siin on nÀidis:

Loki – logide kogumine katsetades Prometheuse lĂ€henemist.
Andmeallika seadistamise nÀidis Loki jaoks

Nupule “Test” vajutades saab kontrollida ĂŒhendust Lokiga.

Teeme pÀringud Lokile

NĂŒĂŒd minge Grafanas jaotisesse “Explore”. Logide vastuvĂ”tmise korral lisab Loki Kubernetesest metainfot. Seega on vĂ”imalik vaadata kindla konteineri logisid.

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

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

Loki – logide kogumine katsetades Prometheuse lĂ€henemist.
PĂ€ringu tulemus Grafanas

Lisamine armatuurlauale

Alates Grafana 6.4-st on vÔimalik logiteavet otse armatuurlaudadele paigutada. PÀrast seda saab kasutaja kiiresti vahetada oma saidi pÀringute arvu ja rakenduse jÀlgede vahel.

Allpool on nÀide armatuurlaudast, mis ellu viib seda interaktsiooni:

Loki – logide kogumine katsetades Prometheuse lĂ€henemist.
Armatuurlaud, kus on Prometheuse mÔÔdikud ja Loki logid

Loki tulevik

Alustasin Loki kasutamist juba mai/juuni kuu jooksul versioonist 0.1. TÀna on vÀlja antud versioon 1, ning isegi 1.1 ja 1.2.

Pean tunnistama, et versioon 0.1 ei olnud piisavalt stabiilne. Kuid 0.3 nĂ€itas juba tegelikke kĂŒpsuse mĂ€rke ja jĂ€rgmised versioonid (0.4, seejĂ€rel 1.0) ainult suurendasid seda muljet.

PÀrast 1.0.0 ei saa enam keegi leida pÔhjendusi, et mitte kasutada seda suurepÀrast tööriista.

Edasised parendused peaksid puudutama mitte niivÔrd Loki-d, kuivÔrd selle integreerimist suurepÀrase Grafana-ga. Tegelikult on Grafana 6.4-s juba hea integratsioon armatuurlaudadega.

Hiljuti vÀlja antud Grafana 6.5 tÀiustab seda integreerimist veelgi, tuvastades automaatselt logide sisu JSON-formaadis.

Allpool on video, kus on toodud lĂŒhike nĂ€ide sellest mehhanismist:

Loki – logide kogumine katsetades Prometheuse lĂ€henemist.
Loki stringide kuvamine Grafana-s

JSON vĂ€ljade, nĂ€iteks, kasutamine on nĂŒĂŒd vĂ”imalik:

  • viidates vĂ€listööriistale
  • logide sisu filtreerimiseks

NÀiteks vÔite klÔpsata traceId-le, et minna Zipkini vÔi Jaegerisse.

Ootame teie kommentaare ning kutsume teid avatud veebinarile, kus arutame, kuidas DevOps tööstus 2019. aastal arenes ning milliseid arengusuundi vÔiks 2020. aastaks kavandada.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster