Salut, Khabrovsk Awunner! Um Virowend vum Start vun enger neier Aschreiwung fir de Cours
Dësen Artikel ass eng kuerz Aféierung zu Loki. Projet Loki
D'Haaptinspiratioun fir Loki war
- 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:
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.
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 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:
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:
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:
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:
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
Source: will.com