Loki — mbledhja e logeve duke pĂ«rdorur qasjen e Prometheus

Përshëndetje, lexues të Habr! Në prag të nisjes së grupit të ri për kursin «Praktikat dhe mjetet DevOps» kemi përgatitur për ju një përkthim të një materiali interesant.

Ky artikull është një hyrje e shkurtër në Loki. Projekti Loki mbështetet nga Grafana dhe është i orientuar drejt mbledhjes së centralizuar të logeve (nga serverët ose kontejnerët).

Burimi kryesor i frymëzimit për Loki ishte Prometheus me idenë e zbatimit të qasjeve të tij në menaxhimin e logeve:

  • pĂ«rdorimi i etiketave (labels) pĂ«r ruajtjen e tĂ« dhĂ«nave
  • konsum i ulĂ«t i burimeve

Do t’u rikthehemi ende parimeve tĂ« funksionimit tĂ« Prometheus dhe do tĂ« sjellim disa shembuj tĂ« pĂ«rdorimit tĂ« tij nĂ« kontekstin e Kubernetes.

Disa fjalë për Prometheus

Për ta kuptuar plotësisht se si funksionon Loki, është e rëndësishme të bëjmë një hap pas dhe të kujtojmë shkurtimisht Prometheus.

Një nga karakteristikat dalluese të Prometheus është mbledhja e metrikave nga pikat e grumbullimit (përmes exporterëve) dhe ruajtja e tyre në TSDB (Time Series Data Base, bazë e të dhënave të serive kohore) me shtimin e metadatave në formën e etiketave.

Pse është e nevojshme kjo?

KohĂ«t e fundit, Prometheus Ă«shtĂ« bĂ«rĂ« standard de facto nĂ« botĂ«n e kontejnerĂ«ve dhe Kubernetes: instalimi i tij Ă«shtĂ« shumĂ« i thjeshtĂ«, ndĂ«rsa nĂ« njĂ« klaster Kubernetes ekziston qĂ« nĂ« fillim njĂ« endpoint pĂ«r Prometheus. Prometheus gjithashtu mund tĂ« mbledhĂ« metrika nga aplikacionet e vendosura nĂ« kontejner, duke ruajtur njĂ«kohĂ«sisht etiketa tĂ« caktuara. Prandaj, monitorimi i aplikacioneve Ă«shtĂ« shumĂ« i lehtĂ« pĂ«r t’u zbatuar.

FatkeqĂ«sisht, pĂ«r menaxhimin e logeve ende nuk ka njĂ« zgjidhje “çelĂ«s nĂ« dorĂ«â€, ndaj duhet tĂ« gjeni vetĂ« zgjidhjen e duhur:

  • shĂ«rbim cloud i menaxhuar pĂ«r centralizimin e logeve (AWS, Azure ose Google)
  • shĂ«rbim monitorimi «monitorim si shĂ«rbim» (monitoring as a service) (pĂ«r shembull, Datadog)
  • krijimi i shĂ«rbimit tuaj pĂ«r mbledhjen e logeve.

Për opsionin e tretë, tradicionalisht kam përdorur Elasticsearch, megjithëse jo gjithmonë kam qenë i kënaqur me të (sidomos për shkak të peshës së tij dhe kompleksitetit të konfigurimit).

Loki është projektuar për të thjeshtuar zbatimin sipas parimeve të mëposhtme:

  • tĂ« jetĂ« i thjeshtĂ« pĂ«r t’u nisur
  • tĂ« konsumojĂ« pak burime
  • tĂ« funksionojĂ« nĂ« mĂ«nyrĂ« tĂ« pavarur pa ndonjĂ« mirĂ«mbajtje tĂ« veçantĂ«
  • tĂ« shĂ«rbejĂ« si plotĂ«sues i Prometheus pĂ«r tĂ« ndihmuar nĂ« hetimin e bug-eve

Megjithatë, kjo thjeshtësi arrihet me disa kompromise. Njëri prej tyre është mungesa e indeksimit të përmbajtjes. Prandaj, kërkimi në tekst nuk është shumë efikas ose i pasur dhe nuk lejon mbledhjen e statistikave mbi përmbajtjen e tekstit. Por, duke qenë se Loki synon të jetë ekuivalenti i grep dhe një plotësim për Prometheus, kjo nuk konsiderohet mangësi.

Hetimi i incidenteve

Për të kuptuar më mirë pse Loki nuk ka nevojë për indeksim, le të kthehemi te metoda e hetimit të incidenteve që përdorën zhvilluesit e Loki:

Loki — mbledhja e logeve duke pĂ«rdorur qasjen e Prometheus
1 Alert → 2 Dashboard → 3 Adhoc Query → 4 Log Aggregation → 5 Distributed Tracing → 6 Fix!
(1 Alarm → 2 Dashboard → 3 Adhoc Query → 4 Agregimi i logeve → 5 Gjurmim i shpĂ«rndarĂ« → 6 E rregullojmĂ«!)

Ideja është që marrim një alarm të caktuar (Slack Notification, SMS etj.) dhe më pas:

  • shohim dashboard-et e Grafana
  • shohim metrikat e shĂ«rbimeve (pĂ«r shembull, nĂ« Prometheus)
  • shohim hyrjet e logeve (pĂ«r shembull, nĂ« Elasticsearch)
  • ndoshta hedhim njĂ« sy te gjurmimet e shpĂ«rndara (Jaeger, Zipkin etj.)
  • dhe, nĂ« fund, rregullojmĂ« problemin fillestar.

KĂ«tu, nĂ« rastin e stack-ut Grafana + Prometheus + Elasticsearch + Zipkin, do tĂ« duhet tĂ« pĂ«rdoren katĂ«r mjete tĂ« ndryshme. PĂ«r tĂ« shkurtuar kohĂ«n, do tĂ« ishte mirĂ« tĂ« kishim mundĂ«sinĂ« t’i kryenim tĂ« gjitha kĂ«to hapa me njĂ« mjet tĂ« vetĂ«m: Grafana. Vlen tĂ« theksohet se kjo qasje ndaj hetimit Ă«shtĂ« zbatuar nĂ« Grafana qĂ« nga versioni 6. KĂ«shtu, bĂ«het e mundur qasja te tĂ« dhĂ«nat e Prometheus drejtpĂ«rdrejt nga Grafana.

Loki — mbledhja e logeve duke pĂ«rdorur qasjen e Prometheus
Ekrani Explorer është i ndarë mes Prometheus dhe Loki

Në këtë ekran mund të shikoni loget në Loki të lidhura me metrikat e Prometheus, duke përdorur konceptin e ndarjes së ekranit. Duke filluar nga versioni 6.5, Grafana lejon përpunimin e identifikuesit të gjurmimit (trace id) në hyrjet e logeve të Loki për të ndjekur lidhjet drejt mjeteve tuaja të preferuara të gjurmimit të shpërndarë (Jaeger).

Testim lokal i Loki

Mënyra më e thjeshtë për të testuar Loki në nivel lokal është përdorimi i docker-compose. Skedari docker-compose ndodhet në depozitorin e Loki. Depozitorin mund ta merrni me komandën e mëposhtme git:

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

Më pas duhet të kaloni në direktorinë production:

$ cd production

Pas kësaj, mund të shkarkoni versionin më të fundit të imazheve Docker:

$ docker-compose pull

Së fundi, stack-u Loki niset me komandën e mëposhtme:

$ docker-compose up

Arkitektura e Loki

Ja një diagramë e vogël me arkitekturën e Loki:

Loki — mbledhja e logeve duke pĂ«rdorur qasjen e Prometheus
Parimet e arkitekturës së Loki

Klienti web ekzekuton aplikacionet në server, Promtail mbledh log-et dhe i dërgon në Loki, ndërsa klienti web dërgon gjithashtu metadata në Loki. Loki i agregon të gjitha dhe i kalon në Grafana.
Loki është nisur. Për të parë komponentët e disponueshëm, ekzekutoni komandën e mëposhtme:

$ docker ps

Në rastin e një instalimi të ri të Docker, komanda duhet të kthejë rezultatin e mëposhtëm:

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

Shohim komponentët e mëposhtëm:

  • Promtail: agjent pĂ«rgjegjĂ«s pĂ«r centralizimin e log-eve
  • Grafana: njĂ« mjet i njohur pĂ«r dashboard-e
  • Loki: shĂ«rbim pĂ«r centralizimin e tĂ« dhĂ«nave

Në një infrastrukturë klasike (për shembull, të bazuar në makina virtuale), agjenti Promtail duhet të vendoset në çdo makinë. Grafana dhe Loki mund të instalohen në të njëjtën makinë.

Vendosja në Kubernetes

Instalimi i komponentëve të Loki në Kubernetes do të përbëhet nga sa vijon:

  • DaemonSet pĂ«r vendosjen e agjentit Promtail nĂ« secilĂ«n nga makinat e klasterit tĂ« serverĂ«ve
  • vendosja (Deployment) e Loki
  • dhe sĂ« fundi — vendosja e Grafana.

Për fat të mirë, Loki është i disponueshëm si paketë Helm, gjë që e thjeshton vendosjen e tij.

Instalimi përmes Helm

Helm duhet ta keni tashmë të instaluar. Mund të shkarkohet nga repository GitHub i projektit. Instalohet duke shpaketuar arkivin që i përshtatet arkitekturës suaj dhe duke shtuar helm në $PATH.

Vërejtje: Versioni 3.0.0 i Helm është publikuar së fundmi. Duke qenë se përfshin shumë ndryshime, lexuesit i rekomandohet të presë pak përpara se të fillojë ta përdorë.

Shtimi i burimit për Helm

Hapi i parĂ« do tĂ« jetĂ« shtimi i repository “loki” me ndihmĂ«n e komandĂ«s sĂ« mĂ«poshtme:

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

Pas kĂ«saj, mund tĂ« kĂ«rkoni paketa 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ë funksionet e mëposhtme:

  • paketĂ«n loki/loki i korrespondon vetĂ«m serverit Loki
  • paketĂ«n loki/fluent-bit ju lejon tĂ« vendosni njĂ« DaemonSet, duke pĂ«rdorur fluent-bin pĂ«r mbledhjen e log-eve nĂ« vend tĂ« Promtail
  • paketĂ«n loki/promtail pĂ«rmban agjentin pĂ«r mbledhjen e skedarĂ«ve log
  • 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Ă« namespace “monitoring”:

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

Për ta ruajtur në disk, shtoni parametrin --set loki.persistence.enabled = true:

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

Vërejtje: nëse dëshironi të vendosni njëkohësisht edhe Grafana, atëherë shtoni parametrin --set grafana.enabled = true

Gjatë ekzekutimit të kësaj komande, duhet të merrni rezultatin e mëposhtëm:

E FUNDIT I VENDOSUR: Mar Nën 19 15:56:54 2019
HAPËSIRA E EMRAVE: monitoring
STATUSI: I VENDOSUR
BURIMET:
==> v1/ClusterRole
EMRI VJETËRSIA
loki-promtail-clusterrole 189d
…
SHËNIME:
Stack-u Loki është vendosur në cluster-in tuaj. Loki tani mund të shtohet si burim të dhënash në Grafana.
Shihni <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> për më shumë detaje.

Duke parĂ« gjendjen e pod-eve nĂ« namespace “monitoring”, do 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ë gjithë pod-et janë në punë. Tani është koha të bëjmë disa teste!

Lidhja me Grafana

PĂ«r t’u lidhur me Grafana nĂ« Kubernetes, duhet tĂ« hapni njĂ« tunel drejt pod-it tĂ« saj. MĂ« poshtĂ« Ă«shtĂ« komanda pĂ«r tĂ« hapur portin 3000 pĂ«r pod-in e 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 të Grafana. Fjalëkalimi ruhet në secret-in loki-grafana në fushën .data.admin-user në formatin base64.

Për ta rikuperuar, 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 së bashku me llogarinë e parazgjedhur të administratorit (admin).

Përcaktimi i burimit të të dhënave Loki në Grafana

Së pari, sigurohuni që burimi i të dhënave Loki të jetë krijuar (Configuration / Datasource).
Ja një shembull:

Loki — mbledhja e logeve duke pĂ«rdorur qasjen e Prometheus
Shembull i konfigurimit të burimit të të dhënave për Loki

Duke klikuar “Test”, mund tĂ« kontrolloni lidhjen me Loki.

Bërja e kërkesave në Loki

Tani shkoni nĂ« Grafana te seksioni “Explore”. GjatĂ« marrjes sĂ« log-eve nga kontejnerĂ«t, Loki shton metadata nga Kubernetes. KĂ«shtu, bĂ«het e mundur tĂ« shikohen log-et e njĂ« kontejneri tĂ« caktuar.

Për shembull, për të zgjedhur log-et e kontejnerit promtail, mund të përdorni kërkesën e mëposhtme: {container_name = "promtail"}.
Edhe këtu mos harroni të zgjidhni burimin e të dhënave Loki.

Kjo kërkesë do të kthejë aktivitetin e kontejnerëve në formën e mëposhtme:

Loki — mbledhja e logeve duke pĂ«rdorur qasjen e Prometheus
Rezultati i kërkesës në Grafana

Shtimi në dashboard

Duke filluar nga Grafana 6.4, informacioni i log-eve mund të vendoset drejtpërdrejt në dashboard. Pas kësaj, përdoruesi do të mund të kalojë shpejt nga numri i kërkesave në faqen e tij te trace-et e aplikacionit.

Më poshtë është një shembull dashboard-i që realizon këtë ndërveprim:

Loki — mbledhja e logeve duke pĂ«rdorur qasjen e Prometheus
Shembull paneli me metrika Prometheus dhe logje Loki

E ardhmja e Loki

Kam filluar të përdor Loki qysh në maj/qershor, që nga versioni 0.1. Sot tashmë është publikuar versioni 1, madje edhe 1.1 dhe 1.2.

Duhet pranuar se versioni 0.1 nuk ishte mjaftueshëm i qëndrueshëm. Por 0.3 tregoi tashmë shenja reale pjekurie, ndërsa versionet pasuese (0.4, pastaj 1.0) vetëm sa e përforcuan këtë përshtypje.

Pas 1.0.0, askush nuk ka më justifikim për të mos e përdorur këtë mjet të shkëlqyer.

Përmirësimet e mëtejshme duhet të lidhen jo aq me Loki-n, sa me integrimin e tij me Grafana-n e shkëlqyer. Në fakt, në Grafana 6.4 tashmë është shfaqur një integrim i mirë me dashboard-et.

Grafana 6.5, e cila u publikua së fundmi, e përmirëson edhe më tej këtë integrim duke njohur automatikisht përmbajtjen e logjeve në format JSON.

Më poshtë, në video, është dhënë një shembull i vogël i këtij mekanizmi:

Loki — mbledhja e logeve duke pĂ«rdorur qasjen e Prometheus
Përdorimi i rreshtave të Loki të shfaqur në Grafana

Bëhet e mundur përdorimi i një prej fushave JSON, për shembull, për:

  • lidhje drejt njĂ« mjeti tĂ« jashtĂ«m
  • filtrimin e pĂ«rmbajtjes sĂ« logjeve

Për shembull, mund të klikoni mbi traceId për të kaluar te Zipkin ose Jaeger.

Si zakonisht, presim komentet tuaja dhe ju ftojmë në webinarin e hapur, ku do të flasim për mënyrën si u zhvillua industria DevOps gjatë vitit 2019 dhe do të diskutojmë rrugët e mundshme të zhvillimit për vitin 2020.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster