Tere, habroviinid! Uue kursuse kÀivitumise eel oleme valmis teid huvitava materjali tÔlkega.
See artikkel on lĂŒhike sissejuhatus Lokisse. Loki projekt ja suunatud logide tsentraliseeritud kogumisele (serveritest vĂ”i konteineritest).
Loki peamine inspiratsiooniallikas oli 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:

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.

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.gitSeejÀrel peate minema production katalooge:
$ cd productionPÀrast seda saate viimased Docker pildid kÀtte jÀrgmise kÀsuga:
$ docker-compose pullLÔpuks kÀivitatakse Loki virna jÀrgmise kÀsuga:
$ docker-compose upLoki arhitektuur
Siin on vÀike diagramm Loki arhitektuurist:

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 psVÀ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_1NÀ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/chartsPĂ€rast seda saab otsida pakette nimega 'loki':
$ helm search lokiTulemus:
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 monitoringKetta ketta aega, lisage parameeter --set loki.persistence.enabled=true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=trueMÀ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=lokiTulemus:
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 24mKĂ”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:80Teine 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}}'; echoKasutage 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:

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:

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:

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 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 , kus rÀÀgime sellest, kuidas DevOps-tööstus arenes 2019. aastal ja arutame vÔimalikke arenguviise 2020. aastaks.
Allikas: habr.com
