Pozdrav, Khabrovci! U iščekivanju početka novog upisa za kurs
Ovaj članak je kratak uvod u Lokija. Projekt Loki
Glavna inspiracija za Lokija bila je
- korištenje naljepnica za pohranjivanje podataka
- niska potrošnja resursa
Vratićemo se principima Prometeja i dati neke primere njegove upotrebe u kontekstu Kubernetesa.
Nekoliko riječi o Prometeju
Da biste u potpunosti razumjeli kako Loki funkcionira, važno je napraviti korak unatrag i malo se vratiti Prometeju.
Jedna od karakterističnih karakteristika Prometheusa je ekstrakcija metrike iz tačaka prikupljanja (preko eksportera) i njihovo pohranjivanje u TSDB (Baza podataka vremenskih serija, baza podataka vremenskih serija) uz dodavanje metapodataka u obliku oznaka.
Zašto je to potrebno
Nedavno je Prometheus postao de facto standard u svijetu kontejnera i Kubernetesa: njegova instalacija je vrlo jednostavna, a Kubernetes klaster u početku ima krajnju tačku za Prometheus. Prometheus također može izvući metriku iz aplikacija raspoređenih u kontejneru uz održavanje određenih oznaka. Stoga je praćenje aplikacija vrlo lako implementirati.
Nažalost, još uvijek ne postoji rješenje po principu ključ u ruke za upravljanje dnevnikom i morate sami pronaći rješenje:
- upravljana usluga u oblaku za centralizaciju dnevnika (AWS, Azure ili Google)
- usluga praćenja "monitoring kao usluga" (na primjer, Datadog)
- kreiranje vlastite usluge prikupljanja dnevnika.
Za treću opciju, tradicionalno sam koristio Elasticsearch, uprkos činjenici da nisam uvijek bio zadovoljan njime (naročito zbog njegove težine i složenosti podešavanja).
Loki je dizajniran da se lako implementira prema sljedećim principima:
- biti lak za početak
- troše malo resursa
- rade samostalno bez ikakvog posebnog održavanja
- služe kao dodatak za Prometheus za pomoć u istraživanju grešaka
Međutim, ova jednostavnost dolazi na račun nekih kompromisa. Jedna od njih je da se sadržaj ne indeksira. Stoga pretraživanje teksta nije previše efikasno niti bogato i ne dozvoljava vam da vodite statistiku o sadržaju teksta. Ali budući da Loki želi biti grep ekvivalent i dopuna Prometeju, to nije nedostatak.
Istraga incidenta
Da bismo bolje razumjeli zašto Lokiju nije potrebno indeksiranje, vratimo se na metodu istrage incidenta koju koriste Loki programeri:
1 Upozorenje → 2 Kontrolna tabla → 3 Adhoc upit → 4 Agregacija dnevnika → 5 Distribuirano praćenje → 6 Popravi!
(1 Upozorenje → 2 Kontrolna tabla → 3 Adhoc upit → 4 Agregacija dnevnika → 5 Distribuirano praćenje → 6 Popravi!)
Ideja je da dobijemo neku vrstu upozorenja (Slack Notification, SMS, itd.) i nakon toga:
- pogledajte Grafana kontrolne table
- pogledajte metriku usluge (na primjer, u Prometheusu)
- pogledajte unose u dnevniku (na primjer, u Elasticsearch)
- možda pogledajte distribuirane tragove (Jaeger, Zipkin, itd.)
- i konačno riješiti originalni problem.
Ovdje, u slučaju Grafana + Prometheus + Elasticsearch + Zipkin stack, morat ćete koristiti četiri različita alata. Da biste uštedjeli vrijeme, bilo bi dobro da sve ove korake možete obaviti jednim alatom: Grafanom. Vrijedi napomenuti da je ovaj pristup istraživanju implementiran u Grafani od verzije 6. Dakle, postaje moguć pristup podacima Prometheusa direktno iz Grafane.
Ekran Explorera podijeljen između Prometeja i Lokija
Na ovom ekranu možete vidjeti zapise u Lokiju koji se odnose na Prometheus metriku koristeći koncept podijeljenog ekrana. Od verzije 6.5, Grafana vam omogućava da raščlanite ID praćenja u Loki log unosima kako biste pratili veze do vaših omiljenih distribuiranih alata za praćenje (Jaeger).
Loki test
Najlakši način za lokalno testiranje Lokija je korištenje docker-compose. Docker-compose datoteka se nalazi u Loki spremištu. Možete dobiti spremište sa sljedećom komandom git
:
$ git clone https://github.com/grafana/loki.git
Zatim morate prijeći na proizvodni direktorij:
$ cd production
Nakon toga, možete dobiti najnovije Docker slike:
$ docker-compose pull
Konačno, Loki stack se pokreće sljedećom naredbom:
$ docker-compose up
Loki arhitektura
Evo malog dijagrama Loki arhitekture:
Loki Architecture Principles
Web klijent pokreće aplikacije na serveru, Promtail prikuplja logove i šalje ih Lokiju, web klijent takođe šalje metapodatke Lokiju. Loki sve skuplja i prosljeđuje Grafani.
Loki trči. Da vidite dostupne komponente, 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 sledeće komponente:
- Promtail: agent odgovoran za centralizaciju dnevnika
- Grafana: poznati alat za kontrolnu tablu
- Loki: demon centralizacije podataka
Kao dio klasične infrastrukture (na primjer, baziran na virtuelnim mašinama), Promtail agent mora biti raspoređen na svakoj mašini. Grafana i Loki se mogu instalirati na istu mašinu.
Postavljanje na Kubernetes
Instaliranje Loki komponenti u Kubernetes će biti kako slijedi:
- daemonSet za postavljanje Promtail agenta na svaku od mašina u klasteru servera
- Loki Deployment
- a posljednja je raspoređivanje Grafane.
Srećom, Loki je dostupan kao Helm paket, što ga čini lakim za implementaciju.
Instalacija preko Heml
Trebalo bi da već imate instaliran Heml. Može se preuzeti sa GitHub repozitorija projekta. Instalira se ekstrahiranjem arhive koja odgovara vašoj arhitekturi i dodavanjem kormila $PATH
.
Napomena: verzija 3.0.0 Helma je nedavno objavljena. S obzirom da je u njemu došlo do mnogih izmjena, čitatelju se savjetuje da malo pričeka prije nego što ga počne koristiti..
Dodavanje izvora za Helm
Prvi korak je dodavanje "loki" spremišta sa sljedećom naredbom:
$ helm add loki https://grafana.github.io/loki/charts
Nakon toga možete tražiti 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 karakteristike:
- пакет loki/loki odgovara samo Loki serveru
- пакет loki/fluent-bit omogućava vam da implementirate DaemonSet koristeći fluent-bin za prikupljanje dnevnika umjesto Promtaila
- пакет loki/promtail sadrži agenta za prikupljanje dnevnika
- пакет loki/loki-stack, omogućava vam da odmah rasporedite Loki zajedno s Promtailom.
Instaliranje Lokija
Da postavite Loki na Kubernetes, pokrenite sljedeću naredbu u imenskom prostoru "nadgledanje":
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Za spremanje na disk dodajte opciju --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Napomena: ako želite istovremeno implementirati Grafanu, 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 imenskom prostoru "nadgledanje", 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 da uradite neke testove!
Povezivanje na Grafanu
Da biste se povezali na Grafanu pod Kubernetesom, morate otvoriti tunel do njenog pod-a. Slijedi naredba za otvaranje porta 3000 za Grafana pod:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Još jedna važna stvar je potreba za oporavkom Grafana administratorske lozinke. Lozinka se čuva u tajnosti loki-grafana
na terenu .data.admin-user
u base64 formatu.
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 zajedno sa podrazumevanim administratorskim nalogom (admin).
Loki definicija izvora podataka u Grafani
Prije svega, provjerite je li izvor podataka Loki (Konfiguracija / Izvor podataka) kreiran.
Evo primjera:
Primjer postavljanja izvora podataka za Loki
Klikom na “Test” možete testirati vezu sa Lokijem.
Upućivanje zahtjeva Lokiju
Sada idite na Grafanu i idite na odjeljak "Istraži". Kada prima dnevnike iz kontejnera, Loki dodaje metapodatke iz Kubernetesa. Tako postaje moguće pregledati dnevnike određenog kontejnera.
Na primjer, da odaberete dnevnike kontejnera promtail, možete koristiti sljedeći upit: {container_name = "promtail"}
.
Ne zaboravite i ovdje odabrati Loki izvor podataka.
Ovaj upit će vratiti aktivnost kontejnera na sljedeći način:
Rezultat upita u Grafani
Dodavanje na kontrolnu tablu
Počevši od Grafane 6.4, moguće je staviti podatke dnevnika direktno na kontrolnu tablu. Nakon toga, korisnik će moći brzo prelaziti između broja zahtjeva na svojoj web stranici i praćenja aplikacija.
Ispod je primjer kontrolne ploče koja implementira ovu interakciju:
Uzorak kontrolne ploče s Prometheus metrikom i Loki zapisnicima
Budućnost Lokija
Počeo sam koristiti Loki još u svibnju/lipnju sa 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ć pokazivao stvarne znake zrelosti, a sljedeće verzije (0.4, zatim 1.0) su samo pojačale ovaj utisak.
Nakon 1.0.0, niko ne može imati izgovor da ne koristi ovu divnu alatku.
Dalja poboljšanja ne bi se trebala odnositi na Loki, već na njegovu integraciju s odličnom Grafanom. U stvari, Grafana 6.4 već ima dobru integraciju sa kontrolnim tablama.
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 Loki nizova prikazanih u Grafani
Postaje moguće koristiti jedno od JSON polja, na primjer, za:
- veze do vanjskog alata
- filtriranje sadržaja dnevnika
Na primjer, možete kliknuti na traceId da biste otišli na Zipkin ili Jaeger.
Kao i obično, radujemo se vašim komentarima i pozivamo vas
izvor: www.habr.com