Përshëndetje, Khabrovitët! Në pritje të fillimit të një regjistrimi të ri për kursin
Ky artikull është një hyrje e shkurtër për Loki. Projekti Loki
Frymëzimi kryesor për Lokin ishte
- duke përdorur etiketa për të ruajtur të dhënat
- konsumi i ulët i burimeve
Ne do të kthehemi te parimet e Prometeut dhe do të japim disa shembuj të përdorimit të tij në kontekstin e Kubernetes.
Disa fjalë për Prometeun
Për të kuptuar plotësisht se si funksionon Loki, është e rëndësishme të bëni një hap prapa dhe të rivizitoni pak Prometheun.
Një nga karakteristikat dalluese të Prometheus është nxjerrja e metrikës nga pikat e grumbullimit (nëpërmjet eksportuesve) dhe ruajtja e tyre në një TSDB (Baza e të dhënave të serive kohore, databaza e serive kohore) me shtimin e meta të dhënave në formën e etiketave.
Pse është e nevojshme
Kohët e fundit, Prometheus është bërë standardi de fakto në botën e kontejnerëve dhe Kubernetes: instalimi i tij është shumë i thjeshtë dhe një grup Kubernetes fillimisht ka një pikë fundore për Prometheus. Prometheus gjithashtu mund të nxjerrë metrikë nga aplikacionet e vendosura në një enë duke ruajtur etiketat specifike. Prandaj, monitorimi i aplikacionit është shumë i lehtë për t'u zbatuar.
Fatkeqësisht, nuk ka ende një zgjidhje me çelës për menaxhimin e regjistrave, dhe ju duhet të gjeni një zgjidhje për veten tuaj:
- shërbimi i menaxhuar në renë kompjuterike për centralizimin e regjistrave (AWS, Azure ose Google)
- shërbimi i monitorimit "monitorimi si shërbim" (për shembull, Datadog)
- duke krijuar shërbimin tuaj të mbledhjes së regjistrave.
Për opsionin e tretë, unë kam përdorur tradicionalisht Elasticsearch, pavarësisht nga fakti se nuk kam qenë gjithmonë i kënaqur me të (veçanërisht rëndimi dhe kompleksiteti i konfigurimit).
Loki u krijua për të qenë i lehtë për t'u zbatuar sipas parimeve të mëposhtme:
- të jetë e lehtë për të filluar
- konsumojnë pak burime
- punojnë në mënyrë të pavarur pa ndonjë mirëmbajtje të veçantë
- shërbejnë si një shtesë për Prometheus për të ndihmuar me hetimet e gabimeve
Megjithatë, kjo thjeshtësi vjen në kurriz të disa kompromiseve. Një prej tyre është të mos indeksoni përmbajtjen. Prandaj, kërkimi i tekstit nuk është shumë efikas apo i pasur dhe nuk ju lejon të mbani statistika për përmbajtjen e tekstit. Por meqenëse Loki dëshiron të jetë ekuivalenti i grep-it dhe plotësuesi i Prometeut, ky nuk është një disavantazh.
Hetimi i incidentit
Për të kuptuar më mirë pse Loki nuk ka nevojë për indeksim, le të kthehemi te metoda e hetimit të incidentit të përdorur nga zhvilluesit e Loki:
1 Alert → 2 Paneli → 3 Pyetje Adhoc → 4 Mbledhja e regjistrave → 5 Gjurmimi i Shpërndarë → 6 Rregullo!
(1 Paralajmërim → 2 Paneli → 3 Pyetje Adhoc → 4 Mbledhja e regjistrave → 5 Gjurmimi i Shpërndarë → 6 Rregullimi!)
Ideja është që të marrim një lloj alarmi (Slack Notification, SMS, etj.) dhe pas kësaj:
- shikoni panelet e Grafanës
- shikoni matjet e shërbimit (për shembull, në Prometheus)
- shikoni hyrjet e regjistrit (për shembull, në Elasticsearch)
- ndoshta hidhini një sy gjurmëve të shpërndara (Jaeger, Zipkin, etj.)
- dhe më në fund rregulloni problemin origjinal.
Këtu, në rastin e raftes Grafana + Prometheus + Elasticsearch + Zipkin, do t'ju duhet të përdorni katër mjete të ndryshme. Për të kursyer kohë, do të ishte mirë që të gjithë këta hapa të mund t'i bënin me një mjet: Grafana. Vlen të theksohet se kjo qasje ndaj kërkimit është zbatuar në Grafana që nga versioni 6. Kështu, bëhet e mundur aksesi i të dhënave të Prometheus direkt nga Grafana.
Ekrani i Explorer i ndarë midis Prometheus dhe Loki
Nga ky ekran, mund të shikoni regjistrat në Loki në lidhje me matjet e Prometheus duke përdorur konceptin e ekranit të ndarë. Që nga versioni 6.5, Grafana ju lejon të analizoni ID-në e gjurmimit në hyrjet e regjistrit Loki për të ndjekur lidhjet me mjetet tuaja të preferuara të gjurmimit të shpërndarë (Jaeger).
Test lokal Loki
Mënyra më e lehtë për të testuar Loki në nivel lokal është të përdorni docker-compose. Skedari docker-compose ndodhet në depon e Loki. Ju mund të merrni depon me komandën e mëposhtme git
:
$ git clone https://github.com/grafana/loki.git
Pastaj ju duhet të kaloni në drejtorinë e prodhimit:
$ cd production
Pas kësaj, ju mund të merrni imazhet më të fundit të Docker:
$ docker-compose pull
Më në fund, pirgu Loki fillon me komandën e mëposhtme:
$ docker-compose up
Arkitektura Loki
Këtu është një diagram i vogël me arkitekturën Loki:
Parimet e Arkitekturës Loki
Klienti i uebit ekzekuton aplikacionet në server, Promtail mbledh regjistrat dhe i dërgon ato te Loki, klienti i uebit dërgon gjithashtu meta të dhëna te Loki. Loki grumbullon gjithçka dhe ia kalon Grafanës.
Loki po vrapon. Për të parë komponentët e disponueshëm, ekzekutoni komandën e mëposhtme:
$ docker ps
Në rastin e një Docker të sapo instaluar, komanda duhet të kthejë daljen e mëposhtme:
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
Ne shohim komponentët e mëposhtëm:
- Promtail: agjent përgjegjës për centralizimin e regjistrave
- Grafana: mjeti i famshëm i pultit
- Loki: demon i centralizimit të të dhënave
Si pjesë e një infrastrukture klasike (për shembull, e bazuar në makina virtuale), agjenti Promtail duhet të vendoset në secilën makinë. Grafana dhe Loki mund të instalohen në të njëjtën makinë.
Vendosja në Kubernetes
Instalimi i komponentëve Loki në Kubernetes do të jetë si më poshtë:
- daemonSet për të vendosur agjentin Promtail në secilën nga makinat në grupin e serverëve
- Vendosja e Loki
- dhe e fundit është dislokimi i Grafanës.
Për fat të mirë, Loki është i disponueshëm si një paketë Helm, duke e bërë të lehtë vendosjen.
Instalimi nëpërmjet Heml
Duhet të keni instaluar tashmë Heml. Mund të shkarkohet nga depoja e projektit GitHub. Instalohet duke nxjerrë arkivin e përshtatshëm për arkitekturën tuaj dhe duke i shtuar timonin $PATH
.
Shenim: versioni 3.0.0 i Helm u lëshua kohët e fundit. Meqenëse ka pasur shumë ndryshime në të, lexuesi këshillohet të presë pak para se të fillojë ta përdorë..
Shtimi i burimit për Helm
Hapi i parë është të shtoni depo "loki" me komandën e mëposhtme:
$ helm add loki https://grafana.github.io/loki/charts
Pas kësaj, mund të kërkoni për paketat me emrin "loki":
$ helm search loki
Rezultati:
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...
Këto paketa kanë karakteristikat e mëposhtme:
- paketën loki/loki përputhet vetëm me serverin Loki
- paketën loki/fluent-bit ju lejon të vendosni DaemonSet duke përdorur fluent-bin për të mbledhur regjistrat në vend të Promtail
- paketën loki/promtail përmban një agjent për mbledhjen e regjistrave
- paketën loki/loki-stack, ju lejon të vendosni menjëherë Loki së bashku me Promtail.
Instalimi i Loki
Për të vendosur Loki në Kubernetes, ekzekutoni komandën e mëposhtme në hapësirën e emrave "monitoring":
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Për të ruajtur në disk, shtoni opsionin --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Shenim: nëse dëshironi të vendosni Grafana në të njëjtën kohë, atëherë shtoni parametrin
--set grafana.enabled = true
Kur ekzekutoni këtë komandë, duhet të merrni daljen e mëposhtme:
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.
Duke parë gjendjen e pods në hapësirën e emrave të "monitorimit", mund të shohim se gjithçka është vendosur:
$ kubectl -n monitoring get pods -l release=loki
Rezultati:
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
Të gjitha bishtajat po funksionojnë. Tani është koha për të bërë disa teste!
Duke u lidhur me Grafana
Për t'u lidhur me Grafana nën Kubernetes, duhet të hapni një tunel në podin e tij. Më poshtë është komanda për të hapur portin 3000 për një pod Grafana:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Një tjetër pikë e rëndësishme është nevoja për të rikuperuar fjalëkalimin e administratorit Grafana. Fjalëkalimi mbahet sekret loki-grafana
në terren .data.admin-user
në formatin base64.
Për ta rikthyer atë, duhet të ekzekutoni komandën e mëposhtme:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Përdoreni këtë fjalëkalim në lidhje me llogarinë e paracaktuar të administratorit (admin).
Përkufizimi i burimit të të dhënave Loki në Grafana
Para së gjithash, sigurohuni që të jetë krijuar burimi i të dhënave Loki (Konfigurimi / Burimi i të dhënave).
Këtu është një shembull:
Një shembull i konfigurimit të një burimi të dhënash për Loki
Duke klikuar në "Test" mund të testoni lidhjen me Loki.
Bërja e kërkesave për Loki
Tani shkoni te Grafana dhe shkoni te seksioni "Eksploro". Kur merr regjistra nga kontejnerët, Loki shton meta të dhëna nga Kubernetes. Kështu, bëhet e mundur të shikoni shkrimet e një kontejneri specifik.
Për shembull, për të zgjedhur regjistrat e kontejnerëve promtail, mund të përdorni pyetjen e mëposhtme: {container_name = "promtail"}
.
Mos harroni të zgjidhni edhe këtu burimin e të dhënave Loki.
Ky pyetje do të kthejë aktivitetin e kontejnerit si më poshtë:
Rezultati i pyetjes në Grafana
Shtimi në panelin e kontrollit
Duke filluar me Grafana 6.4, është e mundur të vendosni informacionin e regjistrit direkt në panelin e kontrollit. Pas kësaj, përdoruesi do të jetë në gjendje të kalojë shpejt midis numrit të kërkesave në faqen e tij në gjurmët e aplikacionit.
Më poshtë është një shembull pulti që zbaton këtë ndërveprim:
Shembull pulti me matjet e Prometheus dhe regjistrat Loki
E ardhmja e Loki
Fillova të përdor Loki në maj/qershor me versionin 0.1. Versioni 1 tashmë është lëshuar sot, madje edhe 1.1 dhe 1.2.
Duhet pranuar se versioni 0.1 nuk ishte mjaftueshëm i qëndrueshëm. Por 0.3 tashmë tregoi shenja të vërteta pjekurie, dhe versionet e ardhshme (0.4, pastaj 1.0) vetëm e forcuan këtë përshtypje.
Pas 1.0.0, askush nuk mund të ketë një justifikim për të mos përdorur këtë mjet të mrekullueshëm.
Përmirësimet e mëtejshme nuk duhet të lidhen me Loki-n, por me integrimin e tij me Grafanën e shkëlqyer. Në fakt, Grafana 6.4 tashmë ka një integrim të mirë me panelet e kontrollit.
Grafana 6.5, e cila u publikua së fundmi, e përmirëson më tej këtë integrim duke njohur automatikisht përmbajtjen e regjistrave në formatin JSON.
Videoja më poshtë tregon një shembull të vogël të këtij mekanizmi:
Përdorimi i vargjeve Loki të dhënë në Grafana
Bëhet e mundur të përdoret një nga fushat JSON, për shembull, për:
- lidhje me një mjet të jashtëm
- filtrimi i përmbajtjes së regjistrit
Për shembull, mund të klikoni në traceId për të shkuar te Zipkin ose Jaeger.
Si zakonisht, ne presim komentet tuaja dhe ju ftojmë
Burimi: www.habr.com