Përshëndetje, anëtarë të Habra! Në prag të fillimit të një kursi të ri kemi përgatitur për ju përkthimin e një materiali interesante.
Ky artikull është një hyrje e shkurtër në Loki. Projekti Loki dhe është i fokusuar në mbledhjen qendrore të logeve (nga serverat ose kontejnerët).
Burimi kryesor i frymëzimit për Loki ishte 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:

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.

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

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

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

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:

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:

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