Pozdravljeni, prebivalci Khabrovsk! Na predvečer začetka novega vpisa v tečaj
Ta članek je kratek uvod v Loki. Projekt Loki
Glavni navdih za Lokija je bil
- uporaba oznak za shranjevanje podatkov
- poraba malo sredstev
Vrnili se bomo k delovanju Prometheusa in podali nekaj primerov njegove uporabe v kontekstu Kubernetesa.
Nekaj besed o Prometeju
Da bi popolnoma razumeli, kako deluje Loki, je pomembno, da stopimo korak nazaj in se spomnimo nekaj o Prometeju.
Ena izmed posebnosti Prometheusa je pridobivanje metrik iz zbirnih mest (preko izvoznikov) in njihovo shranjevanje v TSDB (Time Series Data Base), z dodajanjem metapodatkov v obliki oznak.
Zakaj je to potrebno
Pred kratkim je Prometheus postal de facto standard v svetu vsebnikov in Kubernetesa: njegova namestitev je zelo preprosta, gruča Kubernetes pa ima izvorno končno točko za Prometheus. Prometheus lahko tudi izvleče meritve iz aplikacij, nameščenih v vsebniku, medtem ko shranjuje določene oznake. Zato je nadzor aplikacij zelo enostaven za izvedbo.
Na žalost še vedno ni rešitve za upravljanje dnevnikov na ključ in rešitev morate najti sami:
- upravljana storitev v oblaku za centralizacijo dnevnikov (AWS, Azure ali Google)
- storitev spremljanja »nadzor kot storitev« (na primer Datadog)
- ustvarjanje lastne storitve zbiranja dnevnikov.
Za tretjo možnost sem tradicionalno uporabljal Elasticsearch, kljub temu, da z njim nisem bil vedno zadovoljen (predvsem z njegovo težo in zahtevnostjo konfiguracije).
Loki je bil zasnovan za poenostavitev implementacije v skladu z naslednjimi načeli:
- biti enostaven za začetek
- porabijo malo sredstev
- deluje samostojno brez posebnega vzdrževanja
- služijo kot dodatek k Prometheusu za pomoč pri preiskavah hroščev
Vendar ta preprostost prihaja na račun nekaterih kompromisov. Eden od njih je, da vsebine ne indeksiramo. Zato iskanje besedila ni zelo učinkovito ali bogato in ne omogoča statistike vsebine besedila. Ker pa Loki želi biti ekvivalent grepu in dopolnitev Prometheusa, to ni slabost.
Preiskava incidenta
Da bi bolje razumeli, zakaj Loki ne potrebuje indeksiranja, se vrnimo k metodi preiskave incidenta, ki so jo uporabili razvijalci Lokija:
1 Opozorilo → 2 Nadzorna plošča → 3 Adhoc poizvedba → 4 Združevanje dnevnikov → 5 Porazdeljeno sledenje → 6 Popravi!
(1 Opozorilo → 2 Nadzorna plošča → 3 Adhoc poizvedba → 4 Združevanje dnevnikov → 5 Porazdeljeno sledenje → 6 Popravek!)
Ideja je, da prejmemo nekakšno opozorilo (Slack Notification, SMS itd.) in po tem:
- poglej nadzorne plošče Grafana
- poglejte meritve storitve (na primer v Prometheusu)
- poglejte vnose v dnevnik (na primer v Elasticsearch)
- mogoče si oglejte porazdeljene sledi (Jaeger, Zipkin itd.)
- in končno odpraviti prvotno težavo.
Tukaj, v primeru sklada Grafana + Prometheus + Elasticsearch + Zipkin, boste morali uporabiti štiri različna orodja. Da bi zmanjšali čas, bi bilo lepo, če bi lahko vse te korake izvajali z enim orodjem: Grafana. Omeniti velja, da je ta pristop k raziskovanju implementiran v Grafano od različice 6. Tako je mogoče dostopati do podatkov Prometheus neposredno iz Grafane.
Raziskovalni zaslon je razdeljen na Prometheusa in Lokija
Na tem zaslonu si lahko ogledate dnevnike Loki, povezane z meritvami Prometheus, z uporabo koncepta razdeljenega zaslona. Od različice 6.5 vam Grafana omogoča razčlenitev id-ja sledenja v vnosih v dnevnik Loki, da sledite povezavam do vaših priljubljenih porazdeljenih orodij za sledenje (Jaeger).
Lokalni test Loki
Najlažji način za lokalno testiranje Lokija je uporaba docker-compose. Datoteka docker-compose se nahaja v repozitoriju Loki. Repozitorij lahko dobite z naslednjim ukazom git
:
$ git clone https://github.com/grafana/loki.git
Nato morate iti v proizvodni imenik:
$ cd production
Po tem lahko dobite najnovejšo različico slik Docker:
$ docker-compose pull
Končno se sklad Loki zažene z naslednjim ukazom:
$ docker-compose up
Loki arhitektura
Tukaj je majhen diagram z arhitekturo Loki:
Načela arhitekture Loki
Spletni odjemalec poganja aplikacije na strežniku, Promtail zbira dnevnike in jih pošilja Lokiju, spletni odjemalec Lokiju pošilja tudi metapodatke. Loki vse združi in prenese Grafani.
Loki je izstreljen. Za ogled razpoložljivih komponent zaženite naslednji ukaz:
$ docker ps
V primeru sveže nameščenega Dockerja bi moral ukaz vrniti naslednji 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
Vidimo naslednje komponente:
- Promtail: agent, odgovoren za centralizacijo dnevnikov
- Grafana: znano orodje za nadzorno ploščo
- Loki: Demon za centralizacijo podatkov
Kot del klasične infrastrukture (na primer na osnovi virtualnih strojev) mora biti agent Promtail nameščen na vsakem stroju. Grafana in Loki lahko namestite na isti stroj.
Namestitev v Kubernetes
Namestitev komponent Loki na Kubernetes bo naslednja:
- daemonSet za uvajanje agenta Promtail na vsakem od računalnikov v gruči strežnikov
- Razmestitev Loki
- zadnja pa je uvedba Grafana.
Na srečo je Loki na voljo kot paket Helm, kar omogoča preprosto uvajanje.
Namestitev preko Hemla
Heml bi že moral imeti nameščen. Prenesete ga lahko iz repozitorija GitHub projekta. Namestite ga tako, da razpakirate arhiv, ki ustreza vaši arhitekturi, in vanj dodate helm $PATH
.
Opomba: različica 3.0.0 programa Helm je bila izdana pred kratkim. Ker je bilo na njem veliko sprememb, bralcu svetujemo, da z uporabo nekoliko počaka..
Dodajanje vira za Helm
Prvi korak je dodajanje repozitorija »loki« z naslednjim ukazom:
$ helm add loki https://grafana.github.io/loki/charts
Po tem lahko iščete pakete z imenom »loki«:
$ helm search loki
Rezultat:
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...
Ti paketi imajo naslednje lastnosti:
- Paket loki/loki ujema se samo s strežnikom Loki
- Paket loki/fluent-bit vam omogoča, da namestite DaemonSet z uporabo fluent-bin za zbiranje dnevnikov namesto Promtail
- Paket loki/promtail vsebuje posrednika za zbiranje dnevniških datotek
- Paket loki/loki-sklad, vam omogoča takojšnjo namestitev Lokija skupaj s Promtailom.
Namestitev Lokija
Če želite uvesti Loki v Kubernetes, zaženite naslednji ukaz v imenskem prostoru »monitoring«:
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Če želite shraniti na disk, dodajte parameter --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Opomba: če želite sočasno namestiti Grafano, dodajte parameter
--set grafana.enabled = true
Ko zaženete ta ukaz, bi morali dobiti naslednji rezultat:
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.
Če pogledamo stanje podov v imenskem prostoru »monitoring«, lahko vidimo, da je vse razporejeno:
$ kubectl -n monitoring get pods -l release=loki
Rezultat:
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
Vse stroke tečejo. Zdaj je čas za nekaj testov!
Povezovanje z Grafano
Če se želite povezati z Grafano pod Kubernetesom, morate odpreti tunel do njenega sklopa. Spodaj je ukaz za odpiranje vrat 3000 za Grafana pod:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Druga pomembna točka je potreba po obnovitvi skrbniškega gesla Grafana. Geslo je tajno loki-grafana
na terenu .data.admin-user
v formatu base64.
Če ga želite obnoviti, morate zagnati naslednji ukaz:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Uporabite to geslo v povezavi s privzetim skrbniškim računom (admin).
Definiranje vira podatkov Loki v Grafani
Najprej se prepričajte, da je bil vir podatkov Loki ustvarjen (Configuration/Datasource).
Tu je primer:
Primer nastavitve vira podatkov za Loki
S klikom na “Test” lahko preverite povezavo z Loki.
Pošiljanje prošenj Lokiju
Zdaj pojdite na Grafana v razdelek »Razišči«. Ko prejema dnevnike iz vsebnikov, Loki doda metapodatke iz Kubernetesa. Tako postane možen ogled dnevnikov določenega vsebnika.
Če želite na primer izbrati dnevnike vsebnika promtail, lahko uporabite naslednjo poizvedbo: {container_name = "promtail"}
.
Tukaj tudi ne pozabite izbrati vira podatkov Loki.
Ta poizvedba bo vrnila dejavnost vsebnika na naslednji način:
Rezultat poizvedbe v Grafani
Dodaj na nadzorno ploščo
Od različice Grafana 6.4 naprej lahko podatke o dnevniku postavite neposredno na nadzorno ploščo. Po tem bo uporabnik lahko hitro preklapljal med številom zahtev na svojem spletnem mestu in sledmi aplikacije.
Spodaj je primer nadzorne plošče, ki izvaja to interakcijo:
Vzorčna nadzorna plošča z meritvami Prometheus in dnevniki Loki
Prihodnost Lokija
Loki sem začel uporabljati maja/junija z različico 0.1. Danes je že izdana različica 1 in celo 1.1 in 1.2.
Treba je priznati, da različica 0.1 ni bila dovolj stabilna. Toda 0.3 je že kazal prave znake zrelosti in naslednje različice (0.4, nato 1.0) so ta vtis le še utrdile.
Po različici 1.0.0 nihče ne more imeti izgovora, da ne bi uporabil tega čudovitega orodja.
Nadaljnje izboljšave ne bi smele biti povezane z Lokijem, temveč njegovo integracijo z odlično Grafano. Pravzaprav ima Grafana 6.4 že dobro integracijo z nadzornimi ploščami.
Grafana 6.5, ki je bila izdana pred kratkim, dodatno izboljšuje to integracijo s samodejnim prepoznavanjem vsebine dnevnika v formatu JSON.
Spodnji video prikazuje majhen primer tega mehanizma:
Uporaba Lokijevih strun, izpostavljenih v Grafani
Eno od polj JSON je mogoče uporabiti na primer za:
- povezave do zunanjega orodja
- filtriranje vsebine dnevnika
Na primer, lahko kliknete na traceId, da odprete Zipkin ali Jaeger.
Kot običajno se veselimo vaših komentarjev in vas vabimo k
Vir: www.habr.com