Loki - mbledhja e shkrimeve duke përdorur qasjen Prometheus

Përshëndetje, Khabrovitët! Në pritje të fillimit të një regjistrimi të ri për kursin "Praktikat dhe mjetet e DevOps" përgatiti një përkthim të materialit interesant për ju.

Ky artikull është një hyrje e shkurtër për Loki. Projekti Loki mbështetur nga Grafana dhe ka për qëllim mbledhjen e centralizuar të regjistrave (nga serverët ose kontejnerët).

Frymëzimi kryesor për Lokin ishte Prometeu me idenë e aplikimit të qasjeve të tij në menaxhimin e regjistrave:

  • 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:

Loki - mbledhja e shkrimeve duke përdorur qasjen Prometheus
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.

Loki - mbledhja e shkrimeve duke përdorur qasjen Prometheus
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:

Loki - mbledhja e shkrimeve duke përdorur qasjen Prometheus
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:

Loki - mbledhja e shkrimeve duke përdorur qasjen Prometheus
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ë:

Loki - mbledhja e shkrimeve duke përdorur qasjen Prometheus
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:

Loki - mbledhja e shkrimeve duke përdorur qasjen Prometheus
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:

Loki - mbledhja e shkrimeve duke përdorur qasjen Prometheus
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ë webinar i hapur, ku do të flasim për mënyrën se si është zhvilluar industria DevOps gjatë 2019 dhe do të diskutojmë shtigjet e mundshme të zhvillimit për vitin 2020.

Burimi: www.habr.com