Hej, Habr-lÀsare! Inför starten av den nya kullen av kursen har vi förberett en översÀttning av intressant material.
Den hÀr artikeln Àr en kort introduktion till Loki. Projektet Loki och syftar till centraliserad insamling av loggar (frÄn servrar eller containrar).
Den huvudsakliga inspirationskÀllan för Loki var idén att tillÀmpa dess logik för logghantering:
- anvÀnda etiketter (labels) för att lagra data
- konsumera lite resurser
Vi kommer att Äterkomma till hur Prometheus fungerar och ge nÄgra exempel pÄ dess anvÀndning i kontexten av Kubernetes.
NÄgra ord om Prometheus
För att fullt ut förstÄ hur Loki fungerar Àr det viktigt att ta ett steg tillbaka och tÀnka pÄ Prometheus.
En av de utmÀrkande egenskaperna hos Prometheus Àr att den hÀmtar metrik frÄn insamlingspunkter (via exporters) och lagrar dem i TSDB (Time Series Data Base, tidsserie-databas) med metadata i form av etiketter.
Varför behövs det?
PÄ senare tid har Prometheus blivit de facto-standard i vÀrlden av containrar och Kubernetes: installationen Àr mycket enkel, och det finns frÄn början en endpoint för Prometheus i Kubernetes-klustret. Prometheus kan ocksÄ hÀmta metrik frÄn applikationer som körs i containrar, samtidigt som vissa etiketter sparas. DÀrför Àr övervakning av applikationer mycket enkelt att genomföra.
TyvÀrr finns det fortfarande ingen "plug and play"-lösning för logghantering, och du mÄste hitta en lösning för dig sjÀlv:
- en hanterad molntjÀnst för centralisering av loggar (AWS, Azure eller Google)
- en övervakningstjÀnst som "övervakning som en tjÀnst" (monitoring as a service) (till exempel Datadog)
- skapa din egen loggsamlartjÀnst.
För det tredje alternativet har jag traditionellt anvÀnt Elasticsearch, Àven om jag inte alltid har varit nöjd med det (sÀrskilt dess tyngd och komplexitet vid installation).
Loki har designats för att förenkla implementeringen enligt följande principer:
- vara lÀtt att starta
- konsumera lite resurser
- fungera sjÀlvstÀndigt utan specialunderhÄll
- vara ett komplement till Prometheus för att hjÀlpa till att undersöka buggar.
Men denna enkelhet uppnÄs pÄ bekostnad av vissa kompromisser. En av dem Àr att inte indexera innehÄllet. DÀrför Àr textbaserad sökning inte sÀrskilt effektiv eller innehÄllsrik och tillÄter inte att vi gör statistik pÄ textinnehÄllet. Men eftersom Loki vill vara ekvivalent med grep och ett komplement till Prometheus Àr detta ingen nackdel.
Incidentutredning
För att bÀttre förstÄ varför Loki inte behöver indexing, lÄt oss gÄ tillbaka till metoden för incidentutredning som utvecklarna av Loki anvÀnde:

1 Varning â 2 Instrumentpanel â 3 Adhoc FrĂ„ga â 4 Loggaggregation â 5 Distribuerad SpĂ„rning â 6 Ă
tgÀrda!
(1 Varning â 2 Instrumentpanel â 3 Adhoc FrĂ„ga â 4 Loggaggregation â 5 Distribuerad SpĂ„rning â 6 Ă
tgÀrdar!)
Tanken Àr att vi fÄr en alert (Slack-notis, SMS osv.) och efter det:
- tittar pÄ Grafana-instrumentpaneler
- tittar pÄ tjÀnsternas mÀtvÀrden (till exempel i Prometheus)
- tittar pÄ loggar (till exempel i Elasticsearch)
- möjligen kollar pÄ distribuerade spÄrningar (Jaeger, Zipkin m.fl.)
- och slutligen ÄtgÀrdar det ursprungliga problemet.
HÀr, i fallet med Grafana + Prometheus + Elasticsearch + Zipkin, mÄste vi anvÀnda fyra olika verktyg. För att spara tid skulle det vara bra att kunna utföra alla dessa steg med hjÀlp av ett enda verktyg: Grafana. Det Àr vÀrt att notera att detta tillvÀgagÄngssÀtt för utredning har implementerats i Grafana sedan version 6. SÄledes blir det möjligt att komma Ät Prometheus-data direkt frÄn Grafana.

Explorer-skÀrmen delas mellan Prometheus och Loki
PÄ den hÀr skÀrmen kan man se loggar i Loki, kopplade till Prometheus-mÀtvÀrden, med hjÀlp av konceptet för delad skÀrm. FrÄn och med version 6.5 lÄter Grafana hantera spÄrnings-ID:t (trace id) i loggeinlÀgg frÄn Loki för att lÀnka till dina favoritverktyg för distribuerad spÄrning (Jaeger).
Lokal test av Loki
Det enklaste sÀttet att testa Loki lokalt Àr att anvÀnda docker-compose. Docker-compose-filen finns i Loki-repositoriet. Du kan fÄ repositoriet med följande kommando git:
$ git clone https://github.com/grafana/loki.gitDÀrefter mÄste du gÄ till produktionskatalogen:
$ cd productionEfter det kan du fÄ den senaste versionen av Docker-bilder:
$ docker-compose pullSlutligen startas Loki-stacken med följande kommando:
$ docker-compose upArkitektur för Loki
HÀr Àr ett litet diagram över arkitekturen för Loki:

Arkitekturprinciper för Loki
Webbklienten kör applikationer pÄ servern, Promtail samlar in loggar och skickar dem till Loki, webbklienten skickar ocksÄ metadata till Loki. Loki aggregerar allt och vidarebefordrar till Grafana.
Loki Àr igÄng. För att se de komponenter som finns, kör följande kommando:
$ docker psVid en nyinstallerad Docker bör kommandot returnera följande resultat:
BILD PORTAR NAMN
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_1Vi ser följande komponenter:
- Promtail: agent som ansvarar för centralisering av loggar
- Grafana: ett vÀlkÀnt verktyg för dashboards
- Loki: daemon för centralisering av data
Inom en klassisk infrastruktur (till exempel baserad pÄ virtuella maskiner) mÄste varje maskin ha agenten Promtail installerad. Grafana och Loki kan installeras pÄ samma maskin.
Distribution i Kubernetes
Installationen av Loki-komponenter i Kubernetes kommer att bestÄ av följande:
- daemonSet för att distribuera agenten Promtail pÄ varje maskin i serverklustret
- distribution (Deployment) av Loki
- och sist â distribution av Grafana.
Lyckligtvis Àr Loki tillgÀnglig som ett Helm-paket, vilket förenklar dess distribution.
Installation via Heml
Heml bör redan vara installerad hos dig. Den kan laddas ner frÄn GitHub-repositoryt för projektet. Den installeras genom att packa upp arkivet motsvarande din arkitektur, och lÀgga till helm i $PATH.
AnmÀrkning: version 3.0.0 av Helm slÀpptes nyligen. Eftersom det gjordes mÄnga förÀndringar, rekommenderas lÀsaren att vÀnta lite innan de börjar anvÀnda den..
TillÀgg av kÀlla för Helm
Första steget Àr att lÀgga till 'loki'-repo med följande kommando:
$ helm add loki https://grafana.github.io/loki/chartsDÀrefter kan man söka efter paket med namnet 'loki':
$ helm search lokiResultatet:
loki/loki 0.17.2 v0.4.0 Loki: som Prometheus, men för loggar.
loki/loki-stack 0.19.1 v0.4.0 Loki: som Prometheus, men för loggar.
loki/fluent-bit 0.0.2 v0.0.1 AnvÀnder fluent-bit Loki go-plugin för...
loki/promtail 0.13.1 v0.4.0 Ansvarig för att samla loggar och...Dessa paket har följande funktioner:
- paketet loki/loki motsvarar endast Loki-servern
- paketet loki/fluent-bit lÄt dig distribuera DaemonSet med fluent-bit för loggsamling istÀllet för Promtail
- paketet loki/promtail innehÄller agenten för loggfilssamling
- paketet loki/loki-stack, tillÄter att omedelbart distribuera Loki tillsammans med Promtail.
Installation av Loki
För att distribuera Loki i Kubernetes, kör följande kommando i namnutrymmet 'monitoring':
$ helm upgrade --install loki loki/loki-stack --namespace monitoringFör att spara pÄ disk, lÀgg till parametern --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=trueAnmÀrkning: om du vill distribuera Grafana samtidigt, lÀgg till parametern
--set grafana.enabled = true
NÀr du kör det hÀr kommandot bör du fÄ följande utdata:
SENASTE UTPLACERING: Tis 19 nov 15:56:54 2019
NAMNRYMD: övervakning
STATUS: UTPLACERAD
RESURSER:
==> v1/ClusterRole
NAMN ÅLDER
loki-promtail-clusterrole 189d
…
ANTECKNINGAR:
Loki-stacken har blivit utplacerad i din kluster. Loki kan nu läggas till som en datakälla i Grafana.
Se <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> för mer information.Genom att titta pĂ„ statusen för poddar i namnomrĂ„det "monitoring" ser vi att allt Ă€r distribuerat:
$ kubectl -n monitoring get pods -l release=lokiResultatet:
NAMN KLAR STATUS OMSTARTAR Ă
LDER
loki-0 1/1 Kör 0 147m
loki-promtail-9zjvc 1/1 Kör 0 3h25m
loki-promtail-f6brf 1/1 Kör 0 11h
loki-promtail-hdcj7 1/1 Kör 0 3h23m
loki-promtail-jbqhc 1/1 Kör 0 11h
loki-promtail-mj642 1/1 Kör 0 62m
loki-promtail-nm64g 1/1 Kör 0 24mAlla poddar körs. Nu Àr det dags att göra nÄgra tester!
Anslutning till Grafana
För att ansluta till Grafana via Kubernetes, mÄste du öppna en tunnel till dess pod. HÀr Àr kommandot för att öppna port 3000 för Grafana-poden:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80En annan viktig punkt Àr behovet av att ÄterstÀlla administratörslösenordet för Grafana. Lösenordet lagras i hemligheten loki-grafana i fÀltet .data.admin-user i base64-format.
För att ÄterstÀlla det, kör följande kommando:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echoAnvÀnd detta lösenord tillsammans med det standardadministratörskontot (admin).
Definiera datakÀlla för Loki i Grafana
Först, se till att en datakÀlla för Loki har skapats (Konfiguration / Datasource).
HÀr Àr ett exempel:

Exempel pÄ instÀllning av datakÀlla för Loki
Genom att klicka pÄ "Test" kan du kontrollera anslutningen till Loki.
Gör förfrÄgningar till Loki
Nu gÄr du till Grafana i avsnittet "Explore". NÀr Loki tar emot loggar frÄn containrar lÀgger den till metadata frÄn Kubernetes. DÀrför blir det möjligt att granska loggar frÄn en specifik container.
Till exempel, för att vÀlja loggar frÄn promtail-containern kan du anvÀnda följande förfrÄgan: {container_name = "promtail"}.
Kom ihÄg att ocksÄ vÀlja datakÀlla för Loki.
Denna förfrÄgan kommer att returnera containeraktivitet i följande form:

Resultatet av förfrÄgan i Grafana
LÀgg till pÄ dashboard
FrÄn och med Grafana 6.4 kan du placera logginformation direkt pÄ dashboarden. Efter detta kommer anvÀndaren snabbt kunna vÀxla mellan antalet förfrÄgningar pÄ sin webbplats och applikationens spÄrningar.
Nedan Àr ett exempel pÄ en dashboard som implementerar denna interaktion:

Exempel pÄ en instrumentpanel med Prometheus-metriker och Loki-loggar
Framtiden för Loki
Jag började anvÀnda Loki i maj/juni med version 0.1. Idag har version 1 slÀppts, och till och med 1.1 och 1.2.
Vi mÄste erkÀnna att version 0.1 inte var tillrÀckligt stabil. Men 0.3 visade redan verkliga tecken pÄ mognad, och de följande versionerna (0.4, sedan 1.0) förstÀrkte bara det intrycket.
Efter 1.0.0 finns det ingen ursÀkt för att inte anvÀnda detta fantastiska verktyg.
Framtida förbÀttringar bör handla om integrationen av Loki med den utmÀrkta Grafana. Faktum Àr att Grafana 6.4 redan hade en bra integration med instrumentpanelerna.
Grafana 6.5, som nyligen slÀpptes, förbÀttrar denna integration ytterligare genom att automatiskt kÀnna igen innehÄllet i loggar i JSON-format.
Nedan finns en kort video som visar detta mekanism:

AnvÀndning av Loki-strÀngar som visas i Grafana
Det blir möjligt att anvÀnda ett av JSON-fÀlten, till exempel för:
- lÀnkar till externa verktyg
- filtrering av logginnehÄll
Till exempel kan du klicka pÄ traceId för att gÄ till Zipkin eller Jaeger.
Vi ser fram emot era kommentarer och bjuder in till , dÀr vi pratar om hur DevOps-industrin utvecklades under 2019 och diskuterar möjliga utvecklingsvÀgar för 2020.
KĂ€lla: habr.com
