Sveikinu, chabrovskiečiai! Naujos registracijos į kursus pradžios išvakarėse
Šis straipsnis yra trumpas Loki įvadas. Projektas Loki
Pagrindinis Loki įkvėpimas buvo
- naudojant etiketes duomenims saugoti
- sunaudoja nedaug išteklių
Grįšime prie „Prometheus“ veikimo ir pateiksime keletą jo naudojimo „Kubernetes“ kontekste pavyzdžių.
Keletas žodžių apie Prometėją
Norint visiškai suprasti, kaip veikia Loki, svarbu žengti žingsnį atgal ir šiek tiek prisiminti apie Prometėją.
Vienas iš išskirtinių Prometheus bruožų yra metrikos ištraukimas iš surinkimo taškų (per eksportuotojus) ir saugojimas TSDB (laiko eilučių duomenų bazėje), pridedant metaduomenis etikečių pavidalu.
Kodėl jums to reikia
Neseniai „Prometheus“ tapo de facto standartu konteinerių ir „Kubernetes“ pasaulyje: jo diegimas yra labai paprastas, o „Kubernetes“ klasteris yra su įprastu „Prometheus“ galutiniu tašku. „Prometheus“ taip pat gali išgauti metriką iš konteineryje įdiegtų programų, saugodama konkrečias etiketes. Todėl programų stebėjimą įgyvendinti labai paprasta.
Deja, vis dar nėra „iki rakto“ žurnalo valdymo sprendimo, todėl sprendimą turite rasti patys:
- valdoma debesies paslauga, skirta centralizuoti žurnalus (AWS, Azure arba Google)
- stebėjimo paslauga „stebėjimas kaip paslauga“ (pavyzdžiui, Datadog)
- sukurti savo žurnalų surinkimo paslaugą.
Trečiajam variantui tradiciškai naudojau Elasticsearch, nepaisant to, kad ne visada buvau juo patenkintas (ypač dėl sunkumo ir konfigūracijos sudėtingumo).
„Loki“ buvo sukurta siekiant supaprastinti įgyvendinimą pagal šiuos principus:
- būti paprasta pradėti
- sunaudoja nedaug išteklių
- dirbti savarankiškai, be jokios specialios priežiūros
- tarnauja kaip „Prometheus“ priedas, padedantis tirti klaidas
Tačiau šis paprastumas atsiranda tam tikrų kompromisų sąskaita. Vienas iš jų – neindeksuoti turinio. Todėl teksto paieška nėra labai efektyvi ar turtinga ir neleidžia gauti statistikos apie teksto turinį. Bet kadangi Loki nori būti grep atitikmuo ir Prometėjo papildymas, tai nėra trūkumas.
Incidento tyrimas
Norėdami geriau suprasti, kodėl Loki nereikia indeksuoti, grįžkime prie incidentų tyrimo metodo, kurį naudojo Loki kūrėjai:
1 įspėjimas → 2 prietaisų skydelis → 3 adhoc užklausa → 4 žurnalų kaupimas → 5 paskirstytas sekimas → 6 pataisyti!
(1 įspėjimas → 2 prietaisų skydelis → 3 adhoc užklausa → 4 žurnalų kaupimas → 5 paskirstytas sekimas → 6 taisymas!)
Idėja tokia, kad gauname kažkokį perspėjimą (Slack Notification, SMS ir pan.) ir po to:
- pažiūrėkite į Grafana prietaisų skydelius
- pažiūrėkite į paslaugų metriką (pavyzdžiui, „Prometheus“)
- pažiūrėkite į žurnalo įrašus (pvz., Elasticsearch)
- gal pažiūrėkit į paskirstytus pėdsakus (Jaeger, Zipkin ir kt.)
- ir galiausiai ištaisyti pradinę problemą.
Čia, „Grafana + Prometheus + Elasticsearch + Zipkin“ krūvos atveju, turėsite naudoti keturis skirtingus įrankius. Norint sutrumpinti laiką, būtų malonu, jei galėtumėte atlikti visus šiuos veiksmus naudodami vieną įrankį: Grafana. Verta paminėti, kad šis požiūris į tyrimus buvo įdiegtas Grafana nuo 6 versijos. Taigi tampa įmanoma prieiti prie Prometheus duomenų tiesiogiai iš Grafana.
„Explorer“ ekranas padalintas tarp „Prometėjo“ ir „Loki“.
Šiame ekrane galite peržiūrėti Loki žurnalus, susijusius su Prometheus metrika, naudodami padalinto ekrano koncepciją. Nuo 6.5 versijos Grafana leidžia analizuoti sekimo ID Loki žurnalo įrašuose, kad galėtumėte sekti nuorodas į mėgstamus paskirstytus sekimo įrankius (Jaeger).
Vietinis Loki testas
Lengviausias būdas išbandyti Loki vietoje yra naudoti docker-compose. „Docker“ kūrimo failas yra „Loki“ saugykloje. Saugyklą galite gauti naudodami šią komandą git
:
$ git clone https://github.com/grafana/loki.git
Tada turite eiti į gamybos katalogą:
$ cd production
Po to galite gauti naujausią „Docker“ vaizdų versiją:
$ docker-compose pull
Galiausiai „Loki“ krūva paleidžiama naudojant šią komandą:
$ docker-compose up
Loki architektūra
Čia yra maža diagrama su Loki architektūra:
Loki architektūros principai
Žiniatinklio klientas paleidžia programas serveryje, Promtail renka žurnalus ir siunčia juos į Loki, žiniatinklio klientas taip pat siunčia metaduomenis į Loki. Loki viską sujungia ir perduoda Grafanai.
Loki paleistas. Norėdami peržiūrėti galimus komponentus, paleiskite šią komandą:
$ docker ps
Naujai įdiegto „Docker“ atveju komanda turėtų grąžinti šį rezultatą:
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
Matome šiuos komponentus:
- Promtail: agentas, atsakingas už žurnalų centralizavimą
- Grafana: garsus prietaisų skydelio įrankis
- Loki: duomenų centralizacijos demonas
Kaip klasikinės infrastruktūros dalis (pavyzdžiui, pagrįsta virtualiomis mašinomis), „Promtail“ agentas turi būti įdiegtas kiekviename kompiuteryje. „Grafana“ ir „Loki“ gali būti įdiegti tame pačiame kompiuteryje.
Diegimas Kubernetes
„Loki“ komponentų diegimas „Kubernetes“ bus toks:
- daemonSet, skirtas diegti Promtail agentą kiekviename serverio klasterio įrenginyje
- „Loki“ diegimas
- o paskutinis – Grafanos dislokavimas.
Laimei, „Loki“ galima įsigyti kaip „Helm“ paketą, todėl jį lengva įdiegti.
Diegimas per Heml
Jūs jau turite būti įdiegtas Heml. Jį galima atsisiųsti iš projekto „GitHub“ saugyklos. Jis įdiegiamas išpakavus jūsų architektūrą atitinkantį archyvą ir pridedant vairą $PATH
.
Pastaba: Neseniai buvo išleista „Helm“ 3.0.0 versija. Kadangi jame buvo daug pakeitimų, skaitytojui patariama šiek tiek palaukti prieš naudojant..
Pridedamas Helmo šaltinis
Pirmasis žingsnis yra pridėti „loki“ saugyklą naudojant šią komandą:
$ helm add loki https://grafana.github.io/loki/charts
Po to galite ieškoti paketų pavadinimu „loki“:
$ helm search loki
Rezultatas:
loki/loki 0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2 v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail 0.13.1 v0.4.0 Responsible for gathering logs and...
Šie paketai turi šias funkcijas:
- paketas loki/loki atitinka tik Loki serverį
- paketas loki/fluent-bit leidžia įdiegti „DaemonSet“ naudojant „fluent-bin“ žurnalams rinkti, o ne „Promtail“
- paketas loki/promtail yra žurnalo failų rinkimo agentas
- paketas loki/loki-stack, leidžia nedelsiant įdiegti „Loki“ kartu su „Promtail“.
„Loki“ diegimas
Norėdami įdiegti „Loki“ į „Kubernetes“, vardų erdvėje „stebėjimas“ paleiskite šią komandą:
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Norėdami įrašyti į diską, pridėkite parametrą --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Pastaba: jei norite tuo pačiu metu įdiegti „Grafana“, pridėkite parametrą
--set grafana.enabled = true
Vykdydami šią komandą turėtumėte gauti šią išvestį:
LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
…
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.
Žvelgdami į ankšties būseną „stebėjimo“ vardų erdvėje, matome, kad viskas yra įdiegta:
$ kubectl -n monitoring get pods -l release=loki
Rezultatas:
NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 147m
loki-promtail-9zjvc 1/1 Running 0 3h25m
loki-promtail-f6brf 1/1 Running 0 11h
loki-promtail-hdcj7 1/1 Running 0 3h23m
loki-promtail-jbqhc 1/1 Running 0 11h
loki-promtail-mj642 1/1 Running 0 62m
loki-promtail-nm64g 1/1 Running 0 24m
Visos ankštys veikia. Dabar laikas atlikti keletą testų!
Prisijungimas prie Grafana
Norėdami prisijungti prie „Grafana“ pagal „Kubernetes“, turite atidaryti tunelį prie jos angos. Žemiau yra komanda atidaryti 3000 prievadą Grafana pod:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Kitas svarbus dalykas yra būtinybė atkurti Grafana administratoriaus slaptažodį. Slaptažodis laikomas paslaptyje loki-grafana
lauke .data.admin-user
base64 formatu.
Norėdami jį atkurti, turite paleisti šią komandą:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Naudokite šį slaptažodį kartu su numatyta administratoriaus paskyra (admin).
Loki duomenų šaltinio apibrėžimas Grafana
Pirmiausia įsitikinkite, kad Loki duomenų šaltinis buvo sukurtas (Konfigūracija/Duomenų šaltinis).
Štai pavyzdys:
Loki duomenų šaltinio nustatymo pavyzdys
Spustelėję „Test“ galite patikrinti ryšį su Loki.
Prašymų pateikimas Lokiui
Dabar eikite į Grafana į skyrių „Naršyti“. Gavęs žurnalus iš konteinerių, Loki prideda metaduomenis iš Kubernetes. Taigi atsiranda galimybė peržiūrėti konkretaus konteinerio žurnalus.
Pavyzdžiui, norėdami pasirinkti reklamavimo konteinerio žurnalus, galite naudoti šią užklausą: {container_name = "promtail"}
.
Čia taip pat nepamirškite pasirinkti Loki duomenų šaltinio.
Ši užklausa grąžins konteinerio veiklą taip:
Užklausos rezultatas Grafana
Pridėti prie prietaisų skydelio
Pradedant nuo „Grafana 6.4“, žurnalo informaciją galite patalpinti tiesiai prietaisų skydelyje. Po to vartotojas galės greitai perjungti užklausų skaičių savo svetainėje ir programos pėdsakus.
Toliau pateikiamas informacijos suvestinės, kuri įgyvendina šią sąveiką, pavyzdys:
Pavyzdinis prietaisų skydelis su Prometheus metrika ir Loki žurnalais
Lokio ateitis
Aš pradėjau naudoti Loki gegužės / birželio mėn. su 0.1 versija. Šiandien jau buvo išleista 1 ir net 1.1 ir 1.2 versija.
Reikia pripažinti, kad 0.1 versija nebuvo pakankamai stabili. Bet 0.3 jau rodė tikrus brandos ženklus, o vėlesnės versijos (0.4, paskui 1.0) šį įspūdį tik sustiprino.
Po 1.0.0 niekas negali turėti pasiteisinimo nenaudoti šio nuostabaus įrankio.
Tolesni patobulinimai turėtų būti susiję ne su „Loki“, o su jo integravimu su puikia „Grafana“. Tiesą sakant, „Grafana 6.4“ jau turi gerą integraciją su prietaisų skydeliais.
Neseniai išleista „Grafana 6.5“ dar labiau pagerina šią integraciją automatiškai atpažindama žurnalo turinį JSON formatu.
Toliau pateiktame vaizdo įraše parodytas nedidelis šio mechanizmo pavyzdys:
Naudojant Grafana atskleistas Loki stygas
Galima naudoti vieną iš JSON laukų, pavyzdžiui:
- nuorodos į išorinį įrankį
- žurnalo turinio filtravimas
Pavyzdžiui, galite spustelėti traceId, kad patektumėte į Zipkin arba Jaeger.
Kaip įprasta, laukiame jūsų komentarų ir kviečiame tai padaryti
Šaltinis: www.habr.com