Loki - Log Sammlung mat der Prometheus Approche

Salut, Khabrovsk Awunner! Um Virowend vum Start vun enger neier Aschreiwung fir de Cours "DevOps Praktiken an Tools" Mir hunn eng Iwwersetzung vun interessant Material fir Iech virbereet.

Dësen Artikel ass eng kuerz Aféierung zu Loki. Projet Loki ënnerstëtzt vun Grafana a riicht sech op zentraliséiert Sammlung vu Logbicher (vu Serveren oder Container).

D'Haaptinspiratioun fir Loki war Prometheus mat der Iddi fir seng Approche fir de Logmanagement z'applizéieren:

  • benotzt Etiketten fir Daten ze späicheren
  • Konsum vu wéinege Ressourcen

Mir kommen zréck op wéi de Prometheus funktionnéiert a ginn e puer Beispiller vu senger Notzung am Kontext vu Kubernetes.

E puer Wierder iwwer Prometheus

Fir voll ze verstoen wéi de Loki funktionnéiert, ass et wichteg e Schrëtt zréck ze huelen an e bëssen iwwer Prometheus ze erënneren.

Ee vun den ënnerschiddleche Feature vum Prometheus ass d'Extraktioun vu Metriken aus Sammlungspunkten (iwwer Exporter) a späicheren se an TSDB (Time Series Data Base), mat der Zousatz vu Metadaten a Form vun Etiketten.

Firwat ass et néideg

Viru kuerzem ass Prometheus den de facto Standard an der Welt vu Container a Kubernetes ginn: seng Installatioun ass ganz einfach, an de Kubernetes Cluster kënnt mat engem gebiertege Endpunkt fir Prometheus. Prometheus kann och Metriken aus Uwendungen extrahéieren, déi an engem Container ofgebaut ginn, wärend spezifesch Etiketten späicheren. Dofir ass d'Applikatioun Iwwerwaachung ganz einfach ze implementéieren.

Leider gëtt et nach ëmmer keng schlësselfäerdeg Léisung fir Log-Gestioun, an Dir musst eng Léisung fir Iech selwer fannen:

  • geréiert Cloud Service fir d'Zentraliséierung vu Logbicher (AWS, Azure oder Google)
  • Iwwerwaachungsservice "Iwwerwaachung als Service" (zum Beispill Datadog)
  • Är eege Log Sammlung Service erstellen.

Fir déi drëtt Optioun hunn ech traditionell Elasticsearch benotzt, trotz der Tatsaach datt ech net ëmmer zefridden war (besonnesch seng Schwieregkeet a Komplexitéit vun der Konfiguratioun).

Loki gouf entwéckelt fir d'Ëmsetzung no de folgende Prinzipien ze vereinfachen:

  • einfach ze starten
  • verbrauchen wéineg Ressourcen
  • Aarbecht onofhängeg ouni speziell Ënnerhalt
  • déngen als Ergänzung zum Prometheus fir mat Käferuntersuchungen ze hëllefen

Allerdéngs kënnt dës Einfachheet op Käschte vun e puer Kompromëss. Ee vun hinnen ass den Inhalt net ze indexéieren. Dofir ass Text Sich net ganz effizient oder räich an erlaabt keng Statistiken iwwer den Inhalt vum Text. Awer well de Loki den Äquivalent vu Grep an e Ergänzung zum Prometheus wëll sinn, ass dëst keen Nodeel.

Tëschefall Enquête

Fir besser ze verstoen firwat Loki keng Indexéierung brauch, loosst eis zréck op d'Tëschefalluntersuchungsmethod déi d'Loki Entwéckler benotzt hunn:

Loki - Log Sammlung mat der Prometheus Approche
1 Alarm → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fix!
(1 Warnung → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fixing!)

D'Iddi ass datt mir eng Aart Alarm kréien (Slack Notifikatioun, SMS, etc.) an duerno:

  • kuckt op Grafana Dashboards
  • kuckt op Service Metriken (zum Beispill am Prometheus)
  • kuckt op Logbicher (zum Beispill an Elasticsearch)
  • vläicht e Bléck op verdeelt Spuren (Jaeger, Zipkin, etc.)
  • an endlech den originale Problem fixéieren.

Hei, am Fall vum Grafana + Prometheus + Elasticsearch + Zipkin Stack, musst Dir véier verschidden Tools benotzen. Fir d'Zäit ze reduzéieren, wier et flott all dës Schrëtt mat engem Tool auszeféieren: Grafana. Et ass derwäert ze bemierken datt dës Approche fir d'Fuerschung am Grafana ëmgesat gouf zënter der Versioun 6. Sou gëtt et méiglech Prometheus Daten direkt vu Grafana ze kréien.

Loki - Log Sammlung mat der Prometheus Approche
Explorer Écran opgedeelt tëscht Prometheus a Loki

Vun dësem Écran kënnt Dir Loki Logbicher am Zesummenhang mat Prometheus Metriken gesinn mat dem Split-Screen-Konzept. Zënter Versioun 6.5 erlaabt Grafana Iech d'Spuer-ID an Loki Log-Entréen ze analyséieren fir Linken op Äre Liiblingsverdeelte Tracing-Tools (Jaeger) ze verfollegen.

Lokal Loki Test

Deen einfachste Wee fir Loki lokal ze testen ass Docker-compose ze benotzen. D'docker-compose Datei ass am Loki Repository. Dir kënnt de Repository mat dem folgenden Kommando kréien git:

$ git clone https://github.com/grafana/loki.git

Da musst Dir an de Produktiounsverzeechnes goen:

$ cd production

Duerno kënnt Dir déi lescht Versioun vun Docker Biller kréien:

$ docker-compose pull

Schlussendlech gëtt de Loki Stack mat dem folgenden Kommando gestart:

$ docker-compose up

Loki Architektur

Hei ass e klengen Diagramm mat der Loki Architektur:

Loki - Log Sammlung mat der Prometheus Approche
Loki Architektur Prinzipien

De Web Client leeft Uwendungen um Server, Promtail sammelt Logbicher a schéckt se op Loki, de Web Client schéckt och Metadaten un Loki. Loki aggregéiert alles an iwwerdréit et op Grafana.
Loki gëtt gestart. Fir verfügbar Komponenten ze gesinn, fuert de folgende Kommando:

$ docker ps

Am Fall vun engem frësch installéierten Docker, sollt de Kommando dat folgend Resultat zréckginn:

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

Mir gesinn déi folgend Komponenten:

  • Promtail: Agent verantwortlech fir d'Zentraliséierung vu Logbicher
  • Grafana: e berühmten Dashboard-Tool
  • Loki: Data Zentraliséierung Daemon

Als Deel vun enger klassescher Infrastruktur (zum Beispill, baséiert op virtuelle Maschinnen), muss de Promtail Agent op all Maschinn ofgesat ginn. Grafana a Loki kënnen op der selwechter Maschinn installéiert ginn.

Deployment op Kubernetes

Installéiere Loki Komponenten op Kubernetes wäert sinn wéi follegt:

  • daemonSet fir de Promtail Agent op jiddereng vun de Maschinnen am Servercluster z'installéieren
  • Détachement Loki
  • an déi lescht ass den Asaz vu Grafana.

Glécklecherweis ass Loki als Helm Package verfügbar, sou datt et einfach ass z'installéieren.

Installatioun iwwer Heml

Dir sollt schonn Heml installéiert hunn. Et kann aus dem GitHub Repository vum Projet erofgeluede ginn. Et gëtt installéiert andeems Dir den Archiv auspackt, deen Är Architektur entsprécht an d'Helm bäidréit $PATH.

Opgepasst: Versioun 3.0.0 vun Helm gouf viru kuerzem verëffentlecht. Well et vill Ännerunge gouf, gëtt de Lieser ugeroden e bëssen ze waarden ier se se benotzt..

Füügt eng Quell fir Helm

Den éischte Schrëtt ass de "loki" Repository mat dem folgenden Kommando ze addéieren:

$ helm add loki https://grafana.github.io/loki/charts

Duerno kënnt Dir no Packagen mam Numm "loki" sichen:

$ 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...

Dës Packagen hunn déi folgend Funktiounen:

  • пакет loki/loki Mätscher Loki Server nëmmen
  • пакет loki / fléissendem-bëssen erlaabt Iech en DaemonSet z'installéieren mat fléissendem Bin fir Logbicher ze sammelen anstatt Promtail
  • пакет loki / promtail enthält eng Log Datei Sammlung Agent
  • пакет loki/loki-stack, erlaabt Iech direkt Loki zesumme mat Promtail z'installéieren.

Loki installéieren

Fir Loki op Kubernetes z'installéieren, lafen de folgende Kommando am "Iwwerwaachungs" Nummraum:

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

Fir op Disk ze späicheren, add de Parameter --set loki.persistence.enabled = true:

$ helm upgrade --install loki loki/loki-stack 
              --namespace monitoring 
              --set loki.persistence.enabled=true

Opgepasst: wann Dir Grafana zur selwechter Zäit wëllt ofsetzen, da füügt de Parameter derbäi --set grafana.enabled = true

Wann Dir dëse Kommando ausféiert, sollt Dir déi folgend Ausgab kréien:

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.

Wann Dir den Zoustand vun de Pods am "Iwwerwaachungs" Nummraum kuckt, kënne mir gesinn datt alles ofgesat ass:

$ 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

All Pods lafen. Elo ass et Zäit e puer Tester ze maachen!

Verbindung zu Grafana

Fir mat Grafana ënner Kubernetes ze verbannen, musst Dir en Tunnel op seng Pod opmaachen. Drënner ass de Kommando fir den Hafen 3000 fir de Grafana Pod opzemaachen:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

En anere wichtege Punkt ass de Besoin fir de Grafana Administrator Passwuert ze recuperéieren. D'Passwuert gëtt geheim gehal loki-grafana am Feld .data.admin-user am base64 Format.

Fir et ze restauréieren, musst Dir de folgende Kommando ausféieren:

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

Benotzt dëst Passwuert a Verbindung mam Standard Administrator Kont (admin).

Eng Loki Datenquell zu Grafana definéieren

Als éischt gitt sécher datt d'Loki Datenquell erstallt gouf (Configuratioun / Datequell).
Hei ass e Beispill:

Loki - Log Sammlung mat der Prometheus Approche
Beispill fir eng Datequelle fir Loki opzestellen

Andeems Dir op "Test" klickt, kënnt Dir d'Verbindung mam Loki kontrolléieren.

Ufroen un Loki maachen

Gitt elo op Grafana an d'Sektioun "Explore". Wann Dir Logbicher aus Container kritt, füügt Loki Metadaten vu Kubernetes un. Sou gëtt et méiglech d'Logbicher vun engem spezifesche Container ze gesinn.

Zum Beispill, fir de Promtail Container Logbicher ze wielen, kënnt Dir déi folgend Ufro benotzen: {container_name = "promtail"}.
Hei erënnert och drun d'Loki Datenquell ze wielen.

Dës Ufro gëtt Containeraktivitéit wéi follegt zréck:

Loki - Log Sammlung mat der Prometheus Approche
Query Resultat zu Grafana

Add to Dashboard

Vun Grafana 6.4 un, kënnt Dir Loginformatioun direkt op den Dashboard setzen. Duerno kann de Benotzer séier tëscht der Unzuel vun Ufroen op sengem Site an Applikatiounsspuren wiesselen.

Drënner ass e Beispill vun engem Dashboard deen dës Interaktioun implementéiert:

Loki - Log Sammlung mat der Prometheus Approche
Sample Dashboard mat Prometheus Metriken a Loki Logbicher

Zukunft vum Loki

Ech hunn ugefaang Loki zréck am Mee / Juni mat der Versioun 0.1 ze benotzen. Haut sinn d'Versioun 1, a souguer 1.1 an 1.2 scho verëffentlecht ginn.

Et muss zouginn datt d'Versioun 0.1 net stabil genuch war. Awer 0.3 huet scho richteg Zeeche vu Reife gewisen, a spéider Versiounen (0.4, dann 1.0) hunn dësen Androck nëmmen gestäerkt.

No 1.0.0 kann keen Excuse hunn dëst wonnerbar Tool net ze benotzen.

Weider Verbesserunge sollten net iwwer Loki sinn, awer éischter seng Integratioun mat der exzellenter Grafana. Tatsächlech huet Grafana 6.4 scho gutt Integratioun mat Dashboards.

Grafana 6.5, déi viru kuerzem verëffentlecht gouf, verbessert dës Integratioun weider andeems d'Protokollinhalt am JSON Format automatesch erkennt.

De Video hei ënnen weist e klengt Beispill vun dësem Mechanismus:

Loki - Log Sammlung mat der Prometheus Approche
Mat Loki Saiten ausgesat zu Grafana

Et gëtt méiglech ee vun de JSON Felder ze benotzen, zum Beispill, fir:

  • Linken op externen Outil
  • Filteren Log Inhalter

Zum Beispill kënnt Dir op TraceId klickt fir op Zipkin oder Jaeger ze goen.

Wéi gewinnt, mir freeën eis op Är Kommentaren an invitéieren Iech op oppen Webinar, wou mir schwätzen iwwer wéi d'DevOps Industrie sech während 2019 entwéckelt huet a méiglech Entwécklungsweeër fir 2020 diskutéieren.

Source: will.com