Pozdrav, stanovnici Khabrovsk! Uoči početka novih upisa na tečaj
Ovaj je članak kratki uvod u Lokija. Projekt Loki
Glavna inspiracija za Lokija bila je
- korištenje oznaka za pohranu podataka
- potrošnja malo resursa
Vratit ćemo se na to kako Prometheus radi i dati ćemo neke primjere njegove upotrebe u kontekstu Kubernetesa.
Nekoliko riječi o Prometeju
Da biste u potpunosti razumjeli kako Loki radi, važno je napraviti korak unatrag i prisjetiti se malo o Prometeju.
Jedna od karakterističnih značajki Prometheusa je izdvajanje metrike iz sabirnih točaka (putem izvoznika) i njihovo pohranjivanje u TSDB (Baza podataka vremenskih serija), uz dodavanje metapodataka u obliku oznaka.
Zašto ti treba
Nedavno je Prometheus postao de facto standard u svijetu kontejnera i Kubernetesa: njegova je instalacija vrlo jednostavna, a Kubernetes klaster dolazi s izvornom krajnjom točkom za Prometheus. Prometheus također može izvući metriku iz aplikacija raspoređenih u spremniku dok pohranjuje određene oznake. Stoga je praćenje aplikacija vrlo jednostavno implementirati.
Nažalost, još uvijek ne postoji rješenje "ključ u ruke" za upravljanje zapisima, a vi morate pronaći rješenje za sebe:
- upravljana usluga u oblaku za centraliziranje zapisa (AWS, Azure ili Google)
- usluga nadzora “nadzor kao usluga” (na primjer, Datadog)
- stvaranje vlastite usluge prikupljanja dnevnika.
Za treću opciju tradicionalno sam koristio Elasticsearch, unatoč činjenici da nisam uvijek bio zadovoljan njime (osobito njegovom težinom i složenošću konfiguracije).
Loki je osmišljen kako bi pojednostavio implementaciju prema sljedećim načelima:
- biti jednostavan za početak
- troše malo resursa
- raditi samostalno bez posebnog održavanja
- služe kao dodatak Prometheusu za pomoć u istraživanju grešaka
Međutim, ova jednostavnost dolazi nauštrb nekih kompromisa. Jedan od njih je ne indeksirati sadržaj. Stoga pretraživanje teksta nije vrlo učinkovito ili bogato i ne dopušta statistiku o sadržaju teksta. Ali budući da Loki želi biti ekvivalent grepu i nadopuna Prometeju, to nije nedostatak.
Istraga incidenta
Kako bismo bolje razumjeli zašto Loki ne treba indeksiranje, vratimo se na metodu istraživanja incidenta koju su Loki programeri koristili:
1 Upozorenje → 2 Nadzorna ploča → 3 Adhoc upit → 4 Agregacija dnevnika → 5 Distribuirano praćenje → 6 Popravi!
(1 Upozorenje → 2 Nadzorna ploča → 3 Adhoc upit → 4 Agregacija dnevnika → 5 Distribuirano praćenje → 6 Popravljanje!)
Ideja je da primimo neku vrstu upozorenja (Slack Notification, SMS itd.) i nakon toga:
- pogledajte Grafana nadzorne ploče
- pogledajte metriku usluge (na primjer, u Prometeju)
- pogledajte unose dnevnika (na primjer, u Elasticsearch)
- možda pogledaj distribuirane tragove (Jaeger, Zipkin, itd.)
- i konačno rješavanje izvornog problema.
Ovdje, u slučaju Grafana + Prometheus + Elasticsearch + Zipkin stack, morat ćete koristiti četiri različita alata. Kako biste skratili vrijeme, bilo bi lijepo moći izvesti sve ove korake pomoću jednog alata: Grafana. Vrijedno je napomenuti da je ovaj pristup istraživanju implementiran u Grafani od verzije 6. Time postaje moguće pristupiti podacima Prometheusa izravno iz Grafane.
Zaslon Explorera podijeljen između Prometeja i Lokija
S ovog zaslona možete vidjeti Lokijeve zapisnike povezane s metrikom Prometheusa koristeći koncept podijeljenog zaslona. Od verzije 6.5, Grafana vam omogućuje raščlanjivanje id-a praćenja u unosima dnevnika Loki kako biste pratili veze na svoje omiljene alate za distribuirano praćenje (Jaeger).
Loki Loki test
Najlakši način za lokalno testiranje Lokija je korištenje docker-compose. Docker-compose datoteka nalazi se u Loki repozitoriju. Repozitorij možete dobiti pomoću sljedeće naredbe git
:
$ git clone https://github.com/grafana/loki.git
Zatim morate otići u proizvodni direktorij:
$ cd production
Nakon ovoga možete dobiti najnoviju verziju Docker slika:
$ docker-compose pull
Konačno, Loki stog se pokreće sljedećom naredbom:
$ docker-compose up
Lokijeva arhitektura
Evo malog dijagrama s Lokijevom arhitekturom:
Principi Lokijeve arhitekture
Web klijent pokreće aplikacije na poslužitelju, Promtail prikuplja zapise i šalje ih Lokiju, web klijent također šalje metapodatke Lokiju. Loki sve skuplja i prenosi Grafani.
Loki je lansiran. Za pregled dostupnih komponenti pokrenite sljedeću naredbu:
$ docker ps
U slučaju svježe instaliranog Dockera, naredba bi trebala vratiti sljedeći 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 sljedeće komponente:
- Promtail: agent odgovoran za centralizaciju zapisa
- Grafana: poznati alat za nadzornu ploču
- Loki: Demon za centralizaciju podataka
Kao dio klasične infrastrukture (na primjer, temeljene na virtualnim strojevima), Promtail agent mora biti postavljen na svakom računalu. Grafana i Loki se mogu instalirati na isti stroj.
Implementacija u Kubernetes
Instaliranje Loki komponenti na Kubernetes bit će kako slijedi:
- daemonSet za postavljanje Promtail agenta na svaki od strojeva u klasteru poslužitelja
- Raspoređivanje Loki
- a posljednja je implementacija Grafana.
Srećom, Loki je dostupan kao paket Helm, što ga čini jednostavnim za implementaciju.
Instalacija preko Hemla
Već ste trebali imati instaliran Heml. Može se preuzeti s GitHub repozitorija projekta. Instalira se raspakiranjem arhive koja odgovara vašoj arhitekturi i dodavanjem helma $PATH
.
Napomena: nedavno je objavljena verzija 3.0.0 Helma. Budući da je bilo mnogo izmjena, čitatelju se savjetuje da pričeka malo prije nego što ga upotrijebi..
Dodavanje izvora za Helm
Prvi korak je dodavanje repozitorija "loki" pomoću sljedeće naredbe:
$ helm add loki https://grafana.github.io/loki/charts
Nakon ovoga, možete pretraživati pakete pod nazivom “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...
Ovi paketi imaju sljedeće značajke:
- paket loki/loki odgovara samo Loki poslužitelju
- paket loki/fluent-bit omogućuje vam da postavite DaemonSet koristeći fluent-bin za prikupljanje zapisa umjesto Promtail-a
- paket loki/promtail sadrži agenta za prikupljanje datoteka dnevnika
- paket loki/loki-stog, omogućuje vam da odmah postavite Loki zajedno s Promtailom.
Instaliranje Lokija
Za implementaciju Lokija u Kubernetes, pokrenite sljedeću naredbu u prostoru imena "monitoring":
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Za spremanje na disk dodajte parametar --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Napomena: ako želite implementirati Grafanu u isto vrijeme, dodajte parametar
--set grafana.enabled = true
Kada pokrenete ovu naredbu trebali biste dobiti sljedeći izlaz:
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.
Gledajući stanje podova u prostoru imena "monitoring", možemo vidjeti da je sve raspoređeno:
$ 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
Sve mahune rade. Sada je vrijeme za neke testove!
Spajanje na Grafanu
Da biste se povezali s Grafanom pod Kubernetesom, trebate otvoriti tunel do njezine jedinice. Ispod je naredba za otvaranje porta 3000 za Grafana pod:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Još jedna važna točka je potreba za oporavkom Grafana administratorske lozinke. Lozinka se drži u tajnosti loki-grafana
na terenu .data.admin-user
u formatu base64.
Da biste ga vratili, morate pokrenuti sljedeću naredbu:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Koristite ovu lozinku u kombinaciji sa zadanim administratorskim računom (admin).
Definiranje Loki izvora podataka u Grafani
Prije svega, provjerite je li Loki izvor podataka kreiran (Configuration/Datasource).
Evo primjera:
Primjer postavljanja izvora podataka za Loki
Klikom na “Test” možete provjeriti vezu s Lokijem.
Upućivanje zahtjeva Lokiju
Sada idite na Grafanu u odjeljak "Istražite". Kada prima zapise iz spremnika, Loki dodaje metapodatke iz Kubernetesa. Tako je moguće vidjeti zapisnike određenog spremnika.
Na primjer, za odabir zapisnika spremnika promtaila možete upotrijebiti sljedeći upit: {container_name = "promtail"}
.
Ovdje također ne zaboravite odabrati izvor podataka Loki.
Ovaj će upit vratiti aktivnost spremnika na sljedeći način:
Rezultat upita u Grafanu
Dodaj na nadzornu ploču
Počevši od Grafane 6.4, podatke o dnevniku možete postaviti izravno na nadzornu ploču. Nakon toga, korisnik će se moći brzo prebacivati između broja zahtjeva na svojoj stranici i tragova aplikacije.
Ispod je primjer nadzorne ploče koja implementira ovu interakciju:
Primjer nadzorne ploče s Prometheusovim mjernim podacima i Loki zapisima
Budućnost Lokija
Loki sam počeo koristiti u svibnju/lipnju s verzijom 0.1. Danas je već objavljena verzija 1, pa čak i 1.1 i 1.2.
Mora se priznati da verzija 0.1 nije bila dovoljno stabilna. Ali 0.3 je već pokazao stvarne znakove zrelosti, a sljedeće verzije (0.4, zatim 1.0) samo su pojačale ovaj dojam.
Nakon 1.0.0 nitko više ne može imati izgovor da ne koristi ovaj prekrasan alat.
Daljnja poboljšanja ne bi se trebala odnositi na Loki, već njegovu integraciju s izvrsnom Grafanom. Zapravo, Grafana 6.4 već ima dobru integraciju s nadzornim pločama.
Grafana 6.5, koja je nedavno objavljena, dodatno poboljšava ovu integraciju automatskim prepoznavanjem sadržaja dnevnika u JSON formatu.
Video ispod prikazuje mali primjer ovog mehanizma:
Korištenje Lokijevih žica izloženih u Grafani
Postaje moguće koristiti jedno od JSON polja, na primjer, za:
- veze na vanjski alat
- filtriranje sadržaja dnevnika
Na primjer, možete kliknuti na traceId da biste otišli na Zipkin ili Jaeger.
Kao i obično, veselimo se vašim komentarima i pozivamo vas na njih
Izvor: www.habr.com