Përshëndetje, lexues të Habr! Në prag të nisjes së grupit të ri për kursin 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 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 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:

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.

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.gitMë pas duhet të kaloni në direktorinë production:
$ cd productionPas kësaj, mund të shkarkoni versionin më të fundit të imazheve Docker:
$ docker-compose pullSë fundi, stack-u Loki niset me komandën e mëposhtme:
$ docker-compose upArkitektura e Loki
Ja një diagramë e vogël me arkitekturën e Loki:

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 psNë 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_1Shohim 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/chartsPas kĂ«saj, mund tĂ« kĂ«rkoni paketa me emrin âlokiâ:
$ helm search lokiRezultati:
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 monitoringPë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=trueVë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=lokiRezultati:
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 24mTë 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:80Një 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}}'; echoPë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:

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:

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:

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:

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ë , 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
