Tere, Habra inimesed! Uue kursuse alguse eelÔhtul oleme teile valmistanud huvitava materjali tÔlke.
See artikkel on lĂŒhike sissejuhatus Lokisse. Loki projekt ja on suunatud logide kesksele kogumisele (serveritest vĂ”i konteineritest).
Loki peamine inspiratsiooniallikas oli 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:

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.

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.gitSeejÀrel peate minema kausta production:
$ cd productionPĂ€rast seda saab hankida uusimad Docker pildid:
$ docker-compose pullLÔpuks kÀivitatakse Loki konteiner jÀrgmise kÀsuga:
$ docker-compose upLoki arhitektuur
Siin on vÀike skeem Loki arhitektuurist:

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 psUue 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_1NÀ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/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-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 monitoringAndmete salvestamiseks kettale lisage parameeter --set loki.persistence.enabled=true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=trueMÀ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=lokiTulemus:
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 24mKĂ”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:80Teine 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}}'; echoKasutage seda parooli koos vaikeadministratori kontoga (admin).
Loki andmeallika mÀÀramine Grafanas
Esiteks veenduge, et Loki andmeallikas on loodud (Configuration / Datasource).
Siin on nÀidis:

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:

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:

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 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 , kus arutame, kuidas DevOps tööstus 2019. aastal arenes ning milliseid arengusuundi vÔiks 2020. aastaks kavandada.
Allikas: habr.com
