Hils, innbyggere i Khabrovsk! På tampen av starten av en ny påmelding til kurset
Denne artikkelen er en kort introduksjon til Loki. Prosjekt Loke
Hovedinspirasjonen for Loke var
- bruke etiketter for å lagre data
- forbruk av få ressurser
Vi kommer tilbake til hvordan Prometheus fungerer og gir noen eksempler på bruken i Kubernetes-sammenheng.
Noen få ord om Prometheus
For å forstå hvordan Loki fungerer, er det viktig å ta et skritt tilbake og huske litt om Prometheus.
Et av særtrekkene til Prometheus er utvinning av beregninger fra innsamlingspunkter (via eksportører) og lagring av dem i TSDB (Time Series Data Base), med tillegg av metadata i form av etiketter.
Hvorfor trenger du det
Nylig har Prometheus blitt de facto-standarden i verden av containere og Kubernetes: installasjonen er veldig enkel, og Kubernetes-klyngen kommer med et innfødt endepunkt for Prometheus. Prometheus kan også trekke ut beregninger fra applikasjoner som er distribuert i en beholder mens du lagrer spesifikke etiketter. Derfor er applikasjonsovervåking veldig enkelt å implementere.
Dessverre finnes det fortsatt ingen nøkkelferdig løsning for logghåndtering, og du må finne en løsning selv:
- administrert skytjeneste for sentralisering av logger (AWS, Azure eller Google)
- overvåkingstjeneste "overvåking som en tjeneste" (for eksempel Datadog)
- lage din egen logginnsamlingstjeneste.
For det tredje alternativet brukte jeg tradisjonelt Elasticsearch, til tross for at jeg ikke alltid var fornøyd med det (spesielt dens tyngde og kompleksitet i konfigurasjonen).
Loki ble designet for å forenkle implementeringen i henhold til følgende prinsipper:
- være enkel å starte
- bruker få ressurser
- arbeide selvstendig uten noe spesielt vedlikehold
- tjene som et tillegg til Prometheus for å hjelpe med feilundersøkelser
Denne enkelheten går imidlertid på bekostning av noen kompromisser. En av dem er å ikke indeksere innholdet. Derfor er tekstsøk ikke særlig effektivt eller rikt og tillater ikke statistikk over innholdet i teksten. Men siden Loki ønsker å være ekvivalent med grep og et supplement til Prometheus, er ikke dette en ulempe.
Hendelsesundersøkelse
For bedre å forstå hvorfor Loki ikke trenger indeksering, la oss gå tilbake til hendelsesundersøkelsesmetoden som Loki-utviklerne brukte:
1 Alert → 2 Dashboard → 3 Adhoc Query → 4 Loggaggregering → 5 Distribuert sporing → 6 Fix!
(1 Advarsel → 2 Dashboard → 3 Adhoc Query → 4 Loggaggregering → 5 Distribuert sporing → 6 Fiksing!)
Tanken er at vi mottar en slags varsling (Slack Notification, SMS, etc.) og etter det:
- se på Grafana-dashbord
- se på tjenesteberegninger (for eksempel i Prometheus)
- se på loggoppføringer (for eksempel i Elasticsearch)
- kanskje ta en titt på distribuerte spor (Jaeger, Zipkin, etc.)
- og til slutt fikse det opprinnelige problemet.
Her, i tilfellet med Grafana + Prometheus + Elasticsearch + Zipkin-stabelen, må du bruke fire forskjellige verktøy. For å redusere tid, ville det være fint å kunne utføre alle disse trinnene ved hjelp av ett verktøy: Grafana. Det er verdt å merke seg at denne tilnærmingen til forskning har vært implementert i Grafana siden versjon 6. Dermed blir det mulig å få tilgang til Prometheus-data direkte fra Grafana.
Explorer-skjermen er delt mellom Prometheus og Loki
Fra denne skjermen kan du se Loki-logger relatert til Prometheus-målinger ved å bruke konseptet med delt skjerm. Siden versjon 6.5 lar Grafana deg analysere sporings-ID-en i Loki-loggoppføringer for å følge lenker til dine favorittdistribuerte sporingsverktøy (Jaeger).
Lokal Loki-test
Den enkleste måten å teste Loki lokalt på er å bruke docker-compose. Docker-compose-filen ligger i Loki-depotet. Du kan få depotet ved å bruke følgende kommando git
:
$ git clone https://github.com/grafana/loki.git
Deretter må du gå til produksjonskatalogen:
$ cd production
Etter dette kan du få den nyeste versjonen av Docker-bilder:
$ docker-compose pull
Til slutt blir Loki-stakken lansert med følgende kommando:
$ docker-compose up
Loki arkitektur
Her er et lite diagram med Loki-arkitekturen:
Loki arkitekturprinsipper
Webklienten kjører applikasjoner på serveren, Promtail samler inn logger og sender dem til Loki, webklienten sender også metadata til Loki. Loke samler alt og overfører det til Grafana.
Loke blir lansert. For å se tilgjengelige komponenter, kjør følgende kommando:
$ docker ps
I tilfelle av en nyinstallert Docker, skal kommandoen returnere følgende resultat:
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
Vi ser følgende komponenter:
- Promtail: agent ansvarlig for sentralisering av logger
- Grafana: et kjent instrumentbordverktøy
- Loki: Datasentraliseringsdaemon
Som en del av en klassisk infrastruktur (for eksempel basert på virtuelle maskiner), må Promtail-agenten distribueres på hver maskin. Grafana og Loki kan installeres på samme maskin.
Distribusjon til Kubernetes
Installering av Loki-komponenter på Kubernetes vil være som følger:
- daemonSet for å distribuere Promtail-agenten på hver av maskinene i serverklyngen
- Utplassering Loki
- og den siste er utplasseringen av Grafana.
Heldigvis er Loki tilgjengelig som en Helm-pakke, noe som gjør det enkelt å distribuere.
Montering via Heml
Du bør allerede ha Heml installert. Den kan lastes ned fra prosjektets GitHub-depot. Den installeres ved å pakke ut arkivet som tilsvarer din arkitektur og legge til ror $PATH
.
Merk: versjon 3.0.0 av Helm ble nylig utgitt. Siden det har vært mange endringer i den, anbefales det at leseren venter litt før den tas i bruk..
Legger til en kilde for Helm
Det første trinnet er å legge til "loki"-depotet ved å bruke følgende kommando:
$ helm add loki https://grafana.github.io/loki/charts
Etter dette kan du søke etter pakker kalt "loki":
$ helm search loki
Resultat:
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...
Disse pakkene har følgende funksjoner:
- pakke loki/loki samsvarer kun med Loki-serveren
- pakke loki/flytende-bit lar deg distribuere et DaemonSet ved å bruke fluent-bin for å samle logger i stedet for Promtail
- pakke loki/promtail inneholder en loggfilinnsamlingsagent
- pakke loki/loki-stack, lar deg distribuere Loki umiddelbart sammen med Promtail.
Installerer Loki
For å distribuere Loki til Kubernetes, kjør følgende kommando i "overvåking"-navneområdet:
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
For å lagre på disk, legg til parameteren --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Merk: hvis du vil distribuere Grafana samtidig, legg til parameteren
--set grafana.enabled = true
Når du kjører denne kommandoen bør du få følgende utdata:
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.
Når vi ser på statusen til podene i "overvåking"-navneområdet, kan vi se at alt er distribuert:
$ kubectl -n monitoring get pods -l release=loki
Resultat:
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
Alle pods kjører. Nå er det på tide å ta noen tester!
Kobler til Grafana
For å koble til Grafana under Kubernetes, må du åpne en tunnel til poden. Nedenfor er kommandoen for å åpne port 3000 for Grafana pod:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Et annet viktig poeng er behovet for å gjenopprette Grafana-administratorpassordet. Passordet holdes hemmelig loki-grafana
i feltet .data.admin-user
i base64-format.
For å gjenopprette den, må du kjøre følgende kommando:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Bruk dette passordet sammen med standard administratorkonto (admin).
Definere en Loki-datakilde i Grafana
Først av alt, sørg for at Loki-datakilden er opprettet (Konfigurasjon/Datakilde).
Her er et eksempel:
Eksempel på å sette opp en datakilde for Loki
Ved å klikke på "Test" kan du sjekke forbindelsen med Loki.
Kom med forespørsler til Loke
Gå nå til Grafana til "Utforsk"-delen. Når Loki mottar logger fra containere, legger Loki til metadata fra Kubernetes. Dermed blir det mulig å se loggene til en bestemt beholder.
For å velge promtail-beholderloggene kan du for eksempel bruke følgende spørring: {container_name = "promtail"}
.
Husk også her å velge Loki-datakilden.
Denne spørringen vil returnere beholderaktivitet som følger:
Spørreresultat i Grafana
Legg til dashbordet
Fra og med Grafana 6.4 kan du plassere logginformasjon direkte på dashbordet. Etter dette vil brukeren raskt kunne bytte mellom antall forespørsler på nettstedet og applikasjonsspor.
Nedenfor er et eksempel på et dashbord som implementerer denne interaksjonen:
Eksempel på dashbord med Prometheus-målinger og Loki-logger
Lokis fremtid
Jeg begynte å bruke Loki tilbake i mai/juni med versjon 0.1. I dag er versjon 1, og til og med 1.1 og 1.2 allerede utgitt.
Det må innrømmes at versjon 0.1 ikke var stabil nok. Men 0.3 viste allerede reelle tegn på modenhet, og påfølgende versjoner (0.4, deretter 1.0) bare styrket dette inntrykket.
Etter 1.0.0 kan ingen ha noen unnskyldning for ikke å bruke dette fantastiske verktøyet.
Ytterligere forbedringer bør ikke handle om Loki, men snarere dens integrasjon med den utmerkede Grafana. Faktisk har Grafana 6.4 allerede god integrasjon med dashbord.
Grafana 6.5, som ble utgitt nylig, forbedrer denne integrasjonen ytterligere ved automatisk å gjenkjenne logginnhold i JSON-format.
Videoen nedenfor viser et lite eksempel på denne mekanismen:
Bruker Loki-strenger eksponert i Grafana
Det blir mulig å bruke et av JSON-feltene, for eksempel for:
- lenker til eksternt verktøy
- filtrering av logginnhold
Du kan for eksempel klikke på traceId for å gå til Zipkin eller Jaeger.
Som vanlig ser vi frem til dine kommentarer og inviterer deg til
Kilde: www.habr.com