Loki - palkide kogumine Prometheuse lähenemisviisi abil

Tervitused, Habrovski elanikud! Kursusele uue registreerimise alguse eelõhtul "DevOpsi tavad ja tööriistad" Oleme teile koostanud huvitava materjali tõlke.

See artikkel on Loki lühike sissejuhatus. Projekt Loki toetab Grafana ja on suunatud logide tsentraliseeritud kogumisele (serveritest või konteineritest).

Loki peamine inspiratsioon oli Prometheus ideega rakendada tema lähenemisviise logihalduses:

  • siltide kasutamine andmete salvestamiseks
  • väheste ressursside tarbimine

Tuleme tagasi Prometheuse toimimise juurde ja toome mõned näited selle kasutamisest Kubernetese kontekstis.

Paar sõna Prometheusest

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

Üks Prometheuse eripära on mõõdikute eraldamine kogumispunktidest (eksportijate kaudu) ja nende salvestamine TSDB-sse (Time Series Data Base) koos metaandmete lisamisega siltide kujul.

Miks see vajalik on?

Hiljuti on Prometheus muutunud konteinerite ja Kubernetese maailma de facto standardiks: selle paigaldamine on väga lihtne ja Kubernetese klastris on Prometheuse jaoks natiivne lõpp-punkt. Prometheus saab konkreetsete siltide salvestamise ajal eraldada mõõdikuid ka konteineris juurutatud rakendustest. Seetõttu on rakenduste jälgimist väga lihtne rakendada.

Kahjuks pole logihalduseks endiselt võtmed kätte lahendust ning lahenduse tuleb leida enda jaoks:

  • hallatud pilveteenus logide tsentraliseerimiseks (AWS, Azure või Google)
  • seireteenus "seire kui teenus" (näiteks Datadog)
  • oma logikogumisteenuse loomine.

Kolmanda variandi puhul kasutasin traditsiooniliselt Elasticsearchi, hoolimata asjaolust, et ma polnud sellega alati rahul (eriti selle raskus ja konfiguratsiooni keerukus).

Loki loodi rakendamise lihtsustamiseks vastavalt järgmistele põhimõtetele:

  • ole lihtne alustada
  • tarbivad vähe ressursse
  • töötada iseseisvalt ilma erilise hoolduseta
  • toimib Prometheuse täiendusena, mis aitab veauurimisel

See lihtsus tuleb aga teatud kompromisside arvelt. Üks neist on sisu mitte indekseerimine. Seetõttu ei ole tekstiotsing kuigi tõhus ega rikkalik ega võimalda teksti sisu kohta statistikat teha. Kuid kuna Loki tahab olla grepi ekvivalent ja Prometheuse täiendus, pole see puudus.

Juhtumi uurimine

Et paremini mõista, miks Loki indekseerimist ei vaja, pöördume tagasi juhtumite uurimise meetodi juurde, mida Loki arendajad kasutasid:

Loki - palkide kogumine Prometheuse lähenemisviisi abil
1 Hoiatus → 2 Armatuurlaud → 3 Adhoc päring → 4 logi koondamine → 5 hajutatud jälgimine → 6 paranda!
(1 hoiatus → 2 armatuurlaud → 3 Adhoc päring → 4 logi koondamine → 5 hajutatud jälgimine → 6 parandamist!)

Idee seisneb selles, et saame mingi märguande (Slack Notification, SMS jne) ja pärast seda:

  • vaadake Grafana armatuurlaudu
  • vaadake teenuse mõõdikuid (näiteks Prometheuses)
  • vaadake logikirjeid (näiteks Elasticsearchis)
  • võib-olla vaadake hajutatud jälgi (Jaeger, Zipkin jne)
  • ja lõpuks algse probleemi lahendamine.

Siin, Grafana + Prometheus + Elasticsearch + Zipkini virna puhul, peate kasutama nelja erinevat tööriista. Aja vähendamiseks oleks tore, kui saaksite kõiki neid toiminguid teha ühe tööriistaga: Grafana. Väärib märkimist, et seda lähenemist uurimistööle on Grafanas rakendatud alates versioonist 6. Seega on võimalik Prometheuse andmetele ligi pääseda otse Grafanast.

Loki - palkide kogumine Prometheuse lähenemisviisi abil
Exploreri ekraan on jagatud Prometheuse ja Loki vahel

Sellelt ekraanilt saate jagatud ekraani kontseptsiooni kasutades vaadata Prometheuse mõõdikutega seotud Loki logisid. Alates versioonist 6.5 võimaldab Grafana sõeluda Loki logikirjetes jälgimise ID-d, et jälgida linke teie lemmiklevinud jälgimistööriistadele (Jaeger).

Kohalik Loki test

Lihtsaim viis Loki kohapeal testimiseks on kasutada docker-compose'i. Dockeri koostamise fail asub Loki hoidlas. Hoidla saate hankida järgmise käsu abil git:

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

Seejärel peate minema tootmiskataloogi:

$ cd production

Pärast seda saate hankida Dockeri piltide uusima versiooni:

$ docker-compose pull

Lõpuks käivitatakse Loki virn järgmise käsuga:

$ docker-compose up

Loki arhitektuur

Siin on väike diagramm Loki arhitektuuriga:

Loki - palkide kogumine Prometheuse lähenemisviisi abil
Loki arhitektuuri põhimõtted

Veebiklient jookseb serveris rakendusi, Promtail kogub logisid ja saadab need Lokile, veebiklient saadab Lokile ka metaandmeid. Loki koondab kõik ja edastab selle Grafanale.
Loki käivitatakse. Saadaolevate komponentide vaatamiseks käivitage järgmine käsk:

$ docker ps

Värskelt installitud Dockeri 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: logide tsentraliseerimise eest vastutav agent
  • Grafana: kuulus armatuurlaua tööriist
  • Loki: andmete tsentraliseerimise deemon

Klassikalise infrastruktuuri osana (näiteks virtuaalmasinatel põhinev) tuleb Promtaili agent juurutada igas masinas. Grafana ja Loki saab paigaldada samasse masinasse.

Kasutuselevõtt Kubernetesesse

Loki komponentide installimine Kubernetesisse toimub järgmiselt:

  • daemonSet Promtaili agendi juurutamiseks igas serveriklastri masinas
  • Loki kasutuselevõtt
  • ja viimane on Grafana kasutuselevõtt.

Õnneks on Loki saadaval Helmi paketina, mis muudab selle juurutamise lihtsaks.

Paigaldamine Hemli kaudu

Teil peaks olema Heml juba installitud. Selle saab alla laadida projekti GitHubi hoidlast. See installitakse teie arhitektuurile vastava arhiivi lahtipakkimisega ja tüüri lisamisega $PATH.

Märkus: Helmi versioon 3.0.0 ilmus hiljuti. Kuna selles on tehtud palju muudatusi, soovitatakse lugejal enne kasutamist veidi oodata..

Helmi allika lisamine

Esimene samm on "loki" hoidla lisamine järgmise käsu abil:

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

Pärast seda saate otsida pakette nimega "loki":

$ helm search loki

Tulemus:

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...

Nendel pakettidel on järgmised funktsioonid:

  • pakk loki/loki sobib ainult Loki serveriga
  • pakk loki/fluent-bit võimaldab teil Promtaili asemel logide kogumiseks juurutada DaemonSeti, kasutades fluent-bini
  • pakk loki/promtail sisaldab logifailide kogumise agenti
  • pakk loki/loki-stack, võimaldab teil Loki koos Promtailiga kohe juurutada.

Loki installimine

Loki juurutamiseks Kubernetesesse käivitage nimeruumis "monitoring" järgmine käsk:

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

Kettale salvestamiseks 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 Grafanat samal ajal juurutada, lisage parameeter --set grafana.enabled = true

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

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.

Vaadates kaunade olekut "seire" nimeruumis, näeme, et kõik on juurutatud:

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

Tulemus:

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

Kõik kaunad töötavad. Nüüd on aeg teha mõned testid!

Grafanaga ühendamine

Kubernetese all oleva Grafanaga ühenduse loomiseks peate avama selle pesa tunneli. Allpool on käsk Grafana podi pordi 3000 avamiseks:

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

Teine oluline punkt on vajadus taastada Grafana administraatori parool. Parooli hoitakse saladuses loki-grafana valdkonnas .data.admin-user base64 formaadis.

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 administraatori vaikekontoga (admin).

Loki andmeallika määratlemine Grafanas

Kõigepealt veenduge, et Loki andmeallikas on loodud (Configuration/Datasource).
Siin on näide:

Loki - palkide kogumine Prometheuse lähenemisviisi abil
Näide Loki andmeallika seadistamisest

Klõpsates nuppu "Testi", saate kontrollida ühendust Lokiga.

Lokile taotluste esitamine

Nüüd minge Grafana jaotisesse „Avasta”. Konteinerite logide vastuvõtmisel lisab Loki Kubernetese metaandmeid. Seega on võimalik vaadata konkreetse konteineri logisid.

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

See päring tagastab konteineritegevuse järgmiselt:

Loki - palkide kogumine Prometheuse lähenemisviisi abil
Päringu tulemus Grafanas

Lisa armatuurlauale

Alates versioonist Grafana 6.4 saate logiteabe paigutada otse armatuurlauale. Pärast seda saab kasutaja kiiresti lülituda oma saidil olevate päringute arvu ja rakenduste jälgede vahel.

Allpool on näide armatuurlauast, mis seda interaktsiooni rakendab.

Loki - palkide kogumine Prometheuse lähenemisviisi abil
Näidis armatuurlaud Prometheuse mõõdikute ja Loki logidega

Loki tulevik

Hakkasin Loki kasutama mais/juunis versiooniga 0.1. Tänaseks on juba välja antud versioon 1 ja isegi 1.1 ja 1.2.

Tuleb tunnistada, et versioon 0.1 ei olnud piisavalt stabiilne. Kuid 0.3 näitas juba tõelisi küpsuse märke ja järgnevad versioonid (0.4, siis 1.0) ainult tugevdasid seda muljet.

Pärast versiooni 1.0.0 ei saa kellelgi olla vabandust, et seda imelist tööriista mitte kasutada.

Edasised täiustused ei tohiks puudutada Loki, vaid pigem selle integreerimist suurepärase Grafanaga. Tegelikult on Grafana 6.4-l juba hea integratsioon armatuurlaudadega.

Hiljuti välja antud Grafana 6.5 täiustab seda integratsiooni veelgi, tuvastades logi sisu automaatselt JSON-vormingus.

Allolev video näitab selle mehhanismi väikest näidet:

Loki - palkide kogumine Prometheuse lähenemisviisi abil
Grafanas eksponeeritud Loki stringide kasutamine

Ühte JSON-välja on võimalik kasutada näiteks järgmistel juhtudel:

  • lingid välisele tööriistale
  • logi sisu filtreerimine

Näiteks võite klõpsata traceIdil, et minna Zipkini või Jaegerisse.

Nagu tavaliselt, ootame teie kommentaare ja kutsume teid seda tegema avatud veebiseminar, kus räägime sellest, kuidas DevOpsi tööstus 2019. aastal arenes, ja arutame võimalikke arenguteid 2020. aastaks.

Allikas: www.habr.com