Salute, Khabrovites! In anticipazione di l'iniziu di una nova iscrizzione per u corsu
Questu articulu hè una breve introduzione à Loki. Prughjettu Loki
L'ispirazione principale per Loki era
- usendu etichette per almacenà dati
- bassu cunsumu di risorse
Riturnaremu à i principii di Prometheus è dà alcuni esempi di u so usu in u cuntestu di Kubernetes.
Un pocu di parolle nantu à Prometheus
Per capisce cumplettamente cumu funziona Loki, hè impurtante di fà un passu in daretu è rivisite un pocu Prometheus.
Una di e caratteristiche distintive di Prometheus hè l'estrazione di metriche da i punti di cullizzioni (via l'esportatori) è l'almacenà in una TSDB (Time Series Data Base, basa di dati di serie temporale) cù l'aghjunzione di metadata in forma di etichette.
Perchè avete bisognu
Ricertamenti, Prometheus hè diventatu u standard de facto in u mondu di cuntenituri è Kubernetes: a so installazione hè assai simplice, è un cluster Kubernetes hà inizialmente un endpoint per Prometheus. Prometheus pò ancu estrae metriche da l'applicazioni implementate in un containeru mantenendu etichette specifiche. Dunque, u monitoraghju di l'applicazione hè assai faciule da implementà.
Sfurtunatamente, ùn ci hè ancu una soluzione chiavi in mano per a gestione di log, è avete da truvà una suluzione per sè stessu:
- serviziu cloud gestitu per centralizà i log (AWS, Azure o Google)
- serviziu di surviglianza "surveglianza cum'è serviziu" (per esempiu, Datadog)
- criendu u vostru propiu serviziu di cullizzioni di log.
Per a terza opzione, aghju tradizionalmente utilizatu Elasticsearch, malgradu u fattu chì ùn era micca sempre felice cun ellu (in particulare a so pesanza è a cumplessità di a stallazione).
Loki hè statu cuncepitu per esse faciule da implementà secondu i seguenti principii:
- esse faciuli di principià
- cunsuma pocu risorse
- travaglià indipindente senza nisun mantenimentu speciale
- serve cum'è un add-on à Prometheus per aiutà cù investigazioni di bug
Tuttavia, sta simplicità vene à a spesa di certi cumprumessi. Unu di elli ùn hè micca di indexà u cuntenutu. Dunque, a ricerca di testu ùn hè micca assai efficace o ricca è ùn vi permette micca di mantene statistiche nantu à u cuntenutu di u testu. Ma postu chì Loki vole esse l'equivalente di grep è cumplementu di Prometheus, questu ùn hè micca un svantaghju.
Investigazione di incidente
Per capisce megliu perchè Loki ùn hà micca bisognu di indexazione, vultemu à u metudu di investigazione di incidenti utilizatu da i sviluppatori di Loki:
1 Alert → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fix!
(1 Avvisu → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fix!)
L'idea hè chì avemu un tipu d'alerta (Slack Notification, SMS, etc.) è dopu:
- fighjate à i dashboards di Grafana
- fighjate à e metriche di serviziu (per esempiu, in Prometheus)
- fighjate à e voci di log (per esempiu, in Elasticsearch)
- forse fighjate à e tracce distribuite (Jaeger, Zipkin, etc.)
- è infine risolve u prublema originale.
Quì, in u casu di a pila Grafana + Prometheus + Elasticsearch + Zipkin, vi tuccherà à aduprà quattru strumenti diffirenti. Per risparmià tempu, saria bellu di pudè fà tutti issi passi cù un strumentu: Grafana. Hè nutate chì stu approcciu di ricerca hè statu implementatu in Grafana da a versione 6. Cusì, diventa pussibule accede à e dati Prometheus direttamente da Grafana.
A schermu di l'Explorer hè spartutu trà Prometheus è Loki
Da questa schermu, pudete vede logs in Loki ligati à e metriche di Prometheus utilizendu u cuncettu di split screen. Dapoi a versione 6.5, Grafana vi permette di analizà l'identificatore di traccia in l'entrate di log Loki per seguità i ligami à i vostri strumenti di traccia distribuiti preferiti (Jaeger).
Test locale Loki
U modu più faciule per pruvà Loki in u locu hè di utilizà docker-compose. U schedariu docker-compose hè situatu in u repository Loki. Pudete ottene u repository cù u cumandimu seguitu git
:
$ git clone https://github.com/grafana/loki.git
Allora avete bisognu di cambià à u cartulare di produzzione:
$ cd production
Dopu quì, pudete uttene l'ultime imagine Docker:
$ docker-compose pull
Infine, a pila Loki hè iniziata cù u cumandimu seguente:
$ docker-compose up
L'architettura di Loki
Eccu un picculu diagramma cù l'architettura Loki:
Principi di l'architettura di Loki
U cliente web gestisce l'applicazioni nantu à u servitore, Promtail recullà logs è li manda à Loki, u cliente web manda ancu metadata à Loki. Loki aggrega tuttu è passa à Grafana.
Loki corre. Per vede i cumpunenti dispunibili, eseguite u cumandimu seguente:
$ docker ps
In u casu di un Docker di novu stallatu, u cumandamentu deve rinvià u risultatu seguente:
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
Avemu vistu i seguenti cumpunenti:
- Promtail: agente rispunsevuli di centralizà i logs
- Grafana: u famosu strumentu dashboard
- Loki: daemon di centralizazione di dati
Cum'è parte di una infrastruttura classica (per esempiu, basatu nantu à e macchine virtuali), l'agente Promtail deve esse implementatu in ogni macchina. Grafana è Loki ponu esse stallati nantu à a stessa macchina.
Implementazione in Kubernetes
L'installazione di cumpunenti di Loki in Kubernetes serà a seguente:
- daemonSet per implementà l'agente Promtail in ognuna di e macchine in u cluster di u servitore
- Implementazione di Loki
- è l'ultimu hè u dispiegamentu di Grafana.
Per furtuna, Loki hè dispunibule cum'è un pacchettu Helm, facendu faciule da implementà.
Installazione via Heml
Avete digià installatu Heml. Pò esse scaricatu da u repository GitHub di u prugettu. Hè stallatu estrattendu l'archiviu adattatu per a vostra architettura è aghjunghjendu u timone $PATH
.
Nutate bè: A versione 3.0.0 di Helm hè stata liberata recentemente. Siccomu ci sò stati assai cambiamenti in questu, u lettore hè cunsigliatu d'aspittà un pocu prima di cumincià à aduprà..
Aghjunghjendu a fonte per Helm
U primu passu hè di aghjunghje u repository "loki" cù u cumandimu seguente:
$ helm add loki https://grafana.github.io/loki/charts
Dopu quì, pudete cercà i pacchetti chjamati "loki":
$ helm search loki
Risultatu:
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...
Questi pacchetti anu e seguenti caratteristiche:
- u pacchettu loki/loki currisponde solu à u servitore Loki
- u pacchettu loki/fluent-bit permette di implementà DaemonSet utilizendu fluent-bin per cullà logs invece di Promtail
- u pacchettu loki/promtail cuntene un agente di cullizzioni di log
- u pacchettu loki/loki-stack, permette di implementà immediatamente Loki inseme cù Promtail.
Installazione di Loki
Per implementà Loki à Kubernetes, eseguite u cumandimu seguitu in u spaziu di nomi "monitoring":
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Per salvà à u discu, aghjunghje l'opzione --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Nutate bè: se vulete implementà Grafana à u stessu tempu, aghjunghje u paràmetru
--set grafana.enabled = true
Quandu eseguite stu cumandamentu, duvete ottene u seguente output:
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.
Fighjendu u statu di i baccelli in u spaziu di nomi di "surveglianza", pudemu vede chì tuttu hè implementatu:
$ kubectl -n monitoring get pods -l release=loki
Risultatu:
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
Tutti i podi sò in esecuzione. Avà hè ora di fà qualchi teste!
Cunnessione à Grafana
Per cunnette à Grafana sottu Kubernetes, avete bisognu di apre un tunnel à u so pod. Eccu u cumandimu per apre u portu 3000 per un pod Grafana:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Un altru puntu impurtante hè a necessità di ricuperà a password di l'amministratore Grafana. A password hè tenuta secreta loki-grafana
in campu .data.admin-user
in formatu base64.
Per restaurà, avete bisognu di eseguisce u cumandimu seguente:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Aduprate sta password in cunghjunzione cù u contu amministratore predeterminatu (admin).
Definizione di a fonte di dati Loki in Grafana
Prima di tuttu, assicuratevi chì a fonte di dati Loki (Configurazione / Datasource) hè creata.
Eccu un esempiu:
Un esempiu di creazione di una fonte di dati per Loki
Cliccà nant'à "Test" pudete pruvà a cunnessione cù Loki.
Fendu dumande à Loki
Avà vai à Grafana è vai à a sezione "Esplora". Quandu riceve logs da cuntenituri, Loki aghjunghje metadata da Kubernetes. Cusì, diventa pussibule di vede i logs di un containeru specificu.
Per esempiu, per selezziunà i logs di cuntainer promtail, pudete aduprà a seguente dumanda: {container_name = "promtail"}
.
Ùn vi scurdate di selezziunà a fonte di dati Loki ancu quì.
Questa dumanda restituverà l'attività di u containeru cusì:
Query result in Grafana
Aghjunghjendu à u dashboard
Partendu cù Grafana 6.4, hè pussibule di mette l'infurmazioni di log direttamente nantu à u dashboard. Dopu à quessa, l'utilizatore hà da pudè passà rapidamente trà u numeru di dumande nantu à u so situ à e tracce di l'applicazione.
Quì sottu hè un esempiu di dashboard chì implementa sta interazzione:
Dashboard di mostra cù metriche Prometheus è logs Loki
U futuru di Loki
Aghju cuminciatu à aduprà Loki in maghju / ghjugnu cù a versione 0.1. A versione 1 hè digià stata liberata oghje, è ancu 1.1 è 1.2.
Ci vole à ricunnosce chì a versione 0.1 ùn era micca abbastanza stabile. Ma 0.3 hà digià dimustratu veri segni di maturità, è e versioni prossime (0.4, poi 1.0) anu rinfurzatu solu sta impressione.
Dopu à 1.0.0, nimu pò avè una scusa per ùn aduprà stu strumentu maravigghiusu.
Ulteriori migliure ùn deve esse micca nantu à Loki, ma piuttostu a so integrazione cù l'eccellente Grafana. In fatti, Grafana 6.4 hà digià una bona integrazione cù dashboards.
Grafana 6.5, chì hè stata liberata pocu tempu, migliurà ancu più sta integrazione ricunnosce automaticamente u cuntenutu di i logs in formatu JSON.
U video sottu mostra un picculu esempiu di stu mecanismu:
Utilizà e stringhe Loki resi in Grafana
Diventa pussibule di utilizà unu di i campi JSON, per esempiu, per:
- ligami à un strumentu esternu
- filtru di cuntenutu log
Per esempiu, pudete cliccà nantu à traceId per andà in Zipkin o Jaeger.
Cum'è di solitu, aspittemu i vostri cumenti è vi invitamu
Source: www.habr.com