Loki — mbledhja e logjeve duke pĂ«rdorur qasje Prometheus

Përshëndetje, anëtarë të Habra! Në prag të fillimit të një kursi të ri «Praktikat dhe mjetet DevOps» kemi përgatitur për ju përkthimin e një materiali interesante.

Ky artikull është një hyrje e shkurtër në Loki. Projekti Loki mbështetet nga Grafana dhe është i fokusuar në mbledhjen qendrore të logeve (nga serverat ose kontejnerët).

Burimi kryesor i frymëzimit për Loki ishte Prometheus ideja e aplikimit të qasjeve të tij në menaxhimin e logeve:

  • pĂ«rdorimi i etiketave (labels) pĂ«r ruajtjen e tĂ« dhĂ«nave
  • konsumimi i njĂ« sasi tĂ« vogĂ«l tĂ« burimeve

Ne do të kthehemi përsëri te parimet e funksionimit të Prometheus dhe do të japim disa shembuj të përdorimit të tij në kontekstin e Kubernetes.

Disa fjalë për Prometheus

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

Një nga karakteristikat dalluese të Prometheus është nxjerrja e metrikeve nga pikët e mbledhjes (nëpërmjet eksporterëve) dhe ruajtja e tyre në TSDB (Time Series Data Base, baza e të dhënave të serive të kohës) me shtimin e metadatave në formën e etiketave.

Përse është e nevojshme kjo?

Kohëve të fundit, Prometheus është bërë standardi de-fakto në botën e konteinerëve dhe Kubernetes: instalimi i tij është shumë i thjeshtë, dhe në klasterin Kubernetes fillimisht ekziston një endpoint për Prometheus. Prometheus gjithashtu mund të nxjerrë metrika nga aplikacionet e angazhuara në konteiner, duke ruajtur disa etiketa. Prandaj, monitorimi i aplikacioneve është shumë i thjeshtë për t'u realizuar.

FatkeqĂ«sisht, nuk ka ende njĂ« zgjidhje “tĂ« gatshme” pĂ«r menaxhimin e logeve, dhe ju duhet ta gjeni zgjidhjen pĂ«r vete:

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

Për opsionin e tretë, kam përdorur tradicionalisht Elasticsearch, megjithëse nuk kam qenë gjithmonë i kënaqur me të (sidomos për peshën dhe kompleksitetin e konfigurimit).

Loki është projektuar me qëllimin për të thjeshtuar implementimin sipas këtyre parimeve:

  • tĂ« jetĂ« i thjeshtĂ« pĂ«r tĂ« filluar
  • tĂ« konsumojĂ« pak burime
  • tĂ« punojĂ« autonomisht pa ndihmĂ« tĂ« veçantĂ«
  • tĂ« shĂ«rbejĂ« si njĂ« shtesĂ« pĂ«r Prometheus pĂ«r ndihmĂ« nĂ« hetimin e bug-eve

Megjithatë, kjo thjeshtësi arrihet me disa kompromise. Një nga to është që përmbajtja nuk indeksohet. Prandaj, kërkimi në tekst nuk është shumë efektiv ose i pasur dhe nuk lejon mbledhjen e statistikave mbi përmbajtjen e tekstit. Por, duke qenë se Loki do të jetë ekuivalent me grep dhe një shtesë për Prometheus, kjo nuk është një mangësi.

Hulumtimi i incidenteve

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

Loki — mbledhja e logjeve duke pĂ«rdorur qasje Prometheus
1 Alarm → 2 Paneli i kontrollit → 3 KĂ«rkimi i Adhoc → 4 Grumbullimi i Logjeve → 5 NdĂ«rgjegjĂ«simi i ShpĂ«rndarĂ« → 6 Rregullo!
(1 Alarm → 2 Paneli i kontrollit → 3 KĂ«rkimi i Adhoc → 4 Grumbullimi i Logjeve → 5 NdĂ«rgjegjĂ«simi i ShpĂ«rndarĂ« → 6 Rregullo!)

Ideja është që ne marrim një alarm (Njoftim në Slack, SMS etj.) dhe pastaj:

  • shikojmĂ« panelin e kontrollit tĂ« Grafana
  • shikojmĂ« metrikat e shĂ«rbimeve (pĂ«r shembull, nĂ« Prometheus)
  • shikojmĂ« shĂ«nimet e logeve (pĂ«r shembull, nĂ« Elasticsearch)
  • ndoshta, shohim ndjekjet 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ë realizonim të gjitha këto etapa me një mjet: Grafana. Duhet të theksohet se ky qasje ndaj hetimin është realizuar në Grafana që nga versioni 6. Kështu, bëhet e mundur të bëhet referencë ndaj të dhënave të Prometheus drejtpërdrejt nga Grafana.

Loki — mbledhja e logjeve duke pĂ«rdorur qasje Prometheus
Ekrani Explorer është i ndarë midis Prometheus dhe Loki

Në këtë ekran mund të shihni log-et në Loki që lidhen 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ë regjistrat e log-eve të Loki për lidhje me instrumentet tuaj të preferuar të gjurmimit të shpërndarë (Jaeger).

Testi lokal i Loki

Mënyra më e thjeshtë për testimin lokal të Loki është të përdorni docker-compose. Skedari docker-compose ndodhet në depozitarin e Loki. Të merrni depozitarin mund të bëhet me komandën e mëposhtme git:

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

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

$ cd production

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

$ docker-compose pull

Së fundi, staku 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 logjeve duke pĂ«rdorur qasje Prometheus
Principet e arkitekturës së Loki

Klienti në web nis aplikacione në server, Promtail mbledh log-et dhe i dërgon ato në Loki, klienti në web gjithashtu dërgon metadatat në Loki. Loki i agregon dhe i kalon në Grafana.
Loki është nisur. Për të parë komponentët e pranishëm, kryeni komandën e mëposhtme:

$ docker ps

Në rast të një Docker-i të instaluar rishtazi, 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

Ne shohim komponentët e mëposhtëm:

  • Promtail: agjenti qĂ« Ă«shtĂ« pĂ«rgjegjĂ«s pĂ«r centralizimin e log-eve
  • Grafana: njĂ« mjet i njohur pĂ«r panellet e kontrollit
  • Loki: demon pĂ«r centralizimin e tĂ« dhĂ«nave

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

Deployimi në Kubernetes

Instalimi i komponentëve të Loki në Kubernetes do të përfshijë:

  • daemonSet pĂ«r vendosjen e agjentit Promtail nĂ« secilĂ«n nga makinat nĂ« grumbullin e serverĂ«ve
  • vendosja (Deployment) e Loki
  • dhe nĂ« fund — vendosja e Grafana.

Për fat të mirë, Loki është në dispozicion si një paketë Helm, që e bën vendosjen e tij më të lehtë.

Instalimi përmes Helm

Helm duhet të jetë tashmë i instaluar. Ai mund të shkarkohet nga depoja GitHub e projektit. Ai instalohet duke shkarkuar arkivën, përkatësisht për arkitekturën tuaj, dhe duke e shtuar helm në $PATH.

Shënim: versioni 3.0.0 i Helm u lëshua rishtazi. Duke pasur parasysh se kishte shumë ndryshime, lexuesit rekomandohet të presin pak para se ta përdorin atë..

Shtimi i burimit për Helm

Hapi i parĂ« do tĂ« jetĂ« shtimi i depozitĂ«s “loki” duke pĂ«rdorur komandĂ«n e mĂ«poshtme:

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

Pas kĂ«tij hapi, mund tĂ« kĂ«rkoni paketat me emrin “loki”:

$ helm search loki

Rezultati:

loki/loki       0.17.2 v0.4.0 Loki: si Prometheus, por për logjet.
loki/loki-stack 0.19.1 v0.4.0 Loki: si Prometheus, por për logjet.
loki/fluent-bit 0.0.2  v0.0.1 Përdor pluginin e lokit fluent-bit për...
loki/promtail   0.13.1 v0.4.0 Përdoret për mbledhjen e logjeve dhe...

Këto paketa kanë funksionet e mëposhtme:

  • paketa loki/loki pĂ«rputhet vetĂ«m me serverin Loki
  • paketa loki/fluent-bit ju lejon tĂ« vendosni DaemonSet, duke pĂ«rdorur fluent-bit pĂ«r mbledhjen e logjeve nĂ« vend tĂ« Promtail
  • paketa loki/promtail pĂ«rmban agjentin e grumbullimit tĂ« regjistrave
  • paketa loki/loki-stack, lejon menjĂ«herĂ« vendosjen e Loki sĂ« bashku me Promtail.

Instalimi i Loki

Për të vendosur Loki në Kubernetes, ekzekutoni komandën në hapësirën e emrave "monitoring":

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

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

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

Shënim: nëse dëshironi të vendosni gjithashtu Grafana, shtoni parametër --set grafana.enabled=true

Duke ekzekutuar këtë komandë, duhet të merrni rezultatin e mëposhtëm:

DEPOLLIMI I FUNDIT: Mar 19 Nëntor 15:56:54 2019
NAMESPACE: monitoring
STATUS: I DEPOLLIMIT
RESURSET:
==> v1/ClusterRole
EMRI MOSHA
loki-promtail-clusterrole 189d
…
SHENIME:
Grumbulli Loki është vendosur në grilën tuaj. Loki tani mund të shtohet si një burim të dhënash në Grafana.
Shih <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ëve në hapësirën e emrave "monitoring", do të shohim se të gjitha janë vendosur:

$ kubectl -n monitoring get pods -l release=loki

Rezultati:

EMRI                 GATI  STATUS   RIKTHESET  MOSHA
loki-0               1/1    PoFunksionon  0         147m
loki-promtail-9zjvc  1/1    PoFunksionon  0         3h25m
loki-promtail-f6brf  1/1    PoFunksionon  0         11h
loki-promtail-hdcj7  1/1    PoFunksionon  0         3h23m
loki-promtail-jbqhc  1/1    PoFunksionon  0         11h
loki-promtail-mj642  1/1    PoFunksionon  0         62m
loki-promtail-nm64g  1/1    PoFunksionon  0         24m

Të gjitha podët janë nisur. Tani është koha për disa teste!

Lidhja me Grafana

Për t'u lidhur me Grafana në Kubernetes, duhet të hapni një tunel për podin e tij. Më poshtë është komanda për hapjen e portit 3000 për podin Grafana:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

Një moment tjetër i rëndësishëm është nevoja për të rikuperuar fjalëkalimin e administratorit të Grafana. Fjalëkalimi ruhet në sekret loki-grafana në fushën .data.admin-user në formatin base64.

Për ta rikuperuar, duhet të ekzekutoni komandën në vijim:

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

Përdorni këtë fjalëkalim së bashku me llogarinë e administratorit të paracaktuar (admin).

Përkufizimi 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 logjeve duke pĂ«rdorur qasje Prometheus
Shembulli i konfigurimit të burimit të të dhënave për Loki

Duke klikuar në "Test", mund të kontrolloni lidhjen me Loki.

Bëni kërkesa në Loki

Tani kaloni në Grafana në seksionin "Explore". Kur merrni log-et nga kontejnerët, Loki shton metadatat nga Kubernetes. Kështu, është e mundur të shihni 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"}.
Këtu gjithashtu nuk duhet të harroni të zgjidhni burimin e të dhënave Loki.

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

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

Shtimi në panelin e kontrollit

Me Grafana 6.4, është e mundur të vendosni informacionin për logët direkt në dashboard. Pas kësaj, përdoruesi mund të kalojë shpejt midis numrit të kërkesave në faqen e tij dhe gjurmëve të aplikacionit.

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

Loki — mbledhja e logjeve duke pĂ«rdorur qasje Prometheus
Shembulli i një dashboardi me metrika Prometheus dhe logë Loki

E ardhmja e Loki

Kam filluar ta përdor Loki që në maj/qershor me versionin 0.1. Sot është lëshuar versioni 1, madje edhe 1.1 dhe 1.2.

Duhet pranuar se versioni 0.1 nuk ishte mjaft stabil. Por 0.3 tregoi tashmë shenja reale të pjekurisë, dhe versionet pasuese (0.4, pastaj 1.0) vetëm e forcuan këtë përshtypje.

Pas 1.0.0, askush nuk mund të ketë më justifikime për të mos përdorur këtë mjet të mrekullueshëm.

Përmirësimet e mëtejshme duhet të prekin jo Loki, por më shumë integrimin e tij me Grafana të shkëlqyer. Në të vërtetë, në Grafana 6.4 tashmë ka një integrim të mirë me dashboardet.

Grafana 6.5, e cila u lëshua recently, e përmirëson edhe më shumë këtë integrim, duke njohur automatikisht përmbajtjen e logëve në formatin JSON.

Më poshtë në video është një shembull i vogël i kësaj mekanizmi:

Loki — mbledhja e logjeve duke pĂ«rdorur qasje Prometheus
Përdorimi i rreshtave Loki, të shfaqura në Grafana

ËshtĂ« e mundur tĂ« pĂ«rdorni njĂ« nga fushat JSON, pĂ«r shembull, pĂ«r:

  • linke nĂ« mjetet e jashtme
  • filtrimin e pĂ«rmbajtjes sĂ« logjeve

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

Tradicionalisht, presim komentet tuaja dhe ju ftojmë në webinari të hapur, ku do të flasim rreth zhvillimit të industrisë DevOps gjatë vitit 2019 dhe do të diskutojmë mundësitë për zhvillimin në vitin 2020.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster