Loki - berhevkirina têketin bi karanîna nêzîkatiya Prometheus

Silav, Xabrovî! Li hêviya destpêkirina qeydek nû ya ji bo qursê "Pêkanîn û amûrên DevOps" ji we re wergereke materyalên balkêş amade kir.

Ev gotar ji bo Loki danasîna kurt e. Projeya Loki ji hêla Grafana ve tê piştgirî kirin û armanca berhevkirina navendî ya têketin (ji pêşkêşker an konteyneran) ye.

Îlhama sereke ji bo Loki bû Prometheus bi ramana sepandina nêzîkatiyên xwe ji bo rêveberiya têketinê:

  • bikaranîna etîketan ji bo hilanîna daneyan
  • mezaxtina çavkaniyê kêm

Em ê vegerin ser prensîbên Prometheus û çend nimûneyên karanîna wê di çarçoveya Kubernetes de bidin.

Çend gotin li ser Prometheus

Ji bo ku hûn bi tevahî fêm bikin ka Loki çawa dixebite, girîng e ku hûn gav paşde bavêjin û hinekî Prometheus ji nû ve bigerin.

Yek ji taybetmendiyên cuda yên Prometheus derxistina metrîkan ji nuqteyên berhevkirinê (bi rêya îxrackaran) û hilanîna wan di TSDB (Bingeha Daneyên Rêzeya Demê, databasa rêzikên demê) de bi lêzêdekirina metadata di forma etîketan de ye.

Çima hûn hewce ne

Di van demên dawî de, Prometheus di cîhana konteyneran û Kubernetes de bûye standarda de facto: sazkirina wê pir hêsan e, û komek Kubernetes di destpêkê de ji bo Prometheus xalek dawî heye. Prometheus di heman demê de ku etîketên taybetî diparêze dikare metrîkan ji serîlêdanên ku di konteynerê de hatine bicîh kirin jî derxe. Ji ber vê yekê, çavdêriya serîlêdanê pir hêsan e ku bicîh bikin.

Mixabin, hîn jî ji bo rêveberiya têketinê çareseriyek kilît tune, û divê hûn ji xwe re çareseriyek bibînin:

  • karûbarê cloudê ya birêvebir ji bo têketinên navendî (AWS, Azure an Google)
  • karûbarê çavdêriyê "çavdêrî wekî karûbar" (mînak, Datadog)
  • afirandina karûbarê berhevkirina têketinê ya xwe.

Ji bo vebijarka sêyemîn, min bi kevneşopî Elasticsearch bikar aniye, tevî vê yekê ku ez her gav jê dilxweş nebûm (bi taybetî giranî û tevliheviya wê ya sazkirinê).

Loki hate sêwirandin ku li gorî prensîbên jêrîn hêsan were bicîh kirin:

  • destpêkirina hêsan be
  • çend çavkaniyan dixwe
  • serbixwe bêyî lênêrînek taybetî bixebitin
  • ji Prometheus re wekî pêvekek xizmet bike da ku di vekolînên xeletiyan de bibe alîkar

Lêbelê, ev sadebûn li ser hesabê hin lihevhatinan tê. Yek ji wan ne îndeksa naverokê ye. Ji ber vê yekê, lêgerîna nivîsê ne pir bikêr an dewlemend e û nahêle ku hûn statîstîkên naveroka nivîsê biparêzin. Lê ji ber ku Loki dixwaze bibe hevreha û temamkerê Prometheus, ev ne kêmasiyek e.

Lêkolîna bûyerê

Ji bo ku em çêtir fam bikin ka çima Loki hewcedariya indexkirinê nake, em vegerin ser rêbaza lêpirsîna bûyerê ku ji hêla pêşdebirên Loki ve hatî bikar anîn:

Loki - berhevkirina têketin bi karanîna nêzîkatiya Prometheus
1 Hişyar → 2 Dashboard → 3 Lêpirsîna Adhoc → 4 Kombûna Têketinê → 5 Şopandina Belavkirî → 6 Rast bikin!
(1 Hişyarî → 2 Dashboard → 3 Lêpirsîna Adhoc → 4 Kombûna Têketinê → 5 Şopandina Belavkirî → 6 Rastkirin!)

Fikir ev e ku em celebek hişyariyê bistînin (Slack Notification, SMS, hwd.) û piştî wê:

  • li dashboardên Grafana binêrin
  • li metrîkên karûbarê binêrin (mînak, di Prometheus de)
  • li têketinên têketinê binêre (mînak, di Elasticsearch de)
  • dibe ku li şopên belavbûyî binêre (Jaeger, Zipkin, hwd.)
  • û di dawiyê de pirsgirêka bingehîn çareser bikin.

Li vir, di doza Grafana + Prometheus + Elasticsearch + Zipkin stack de, hûn neçar in ku çar amûrên cûda bikar bînin. Ji bo ku dem xilas bike, dê xweş be ku meriv van gavan bi yek amûrek bike: Grafana. Hêjayî gotinê ye ku ev nêzîkatiya lêkolînê ji guhertoya 6-an vir ve di Grafana de hatî bicîh kirin. Bi vî rengî, meriv dikare rasterast ji Grafana bigihîje daneyên Prometheus.

Loki - berhevkirina têketin bi karanîna nêzîkatiya Prometheus
Ekrana Explorer di navbera Prometheus û Loki de parçe dibe

Ji vê ekranê, hûn dikarin têketinên li Loki-yê yên ku bi metrîkên Prometheus ve girêdayî ne bi karanîna têgîna dîmendera dabeşkirî bibînin. Ji guhertoya 6.5-ê ve, Grafana dihêle hûn di navnîşên têketinê yên Loki de nasnameya şopê parsek bikin da ku li pey girêdanên amûrên şopandina belavbûyî yên bijare (Jaeger) bişopînin.

Testa herêmî ya Loki

Rêya herî hêsan a ceribandina Loki li herêmî karanîna docker-compose ye. Pelê docker-compose di depoya Loki de ye. Hûn dikarin bi fermana jêrîn depoyê bistînin git:

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

Dûv re hûn hewce ne ku pelrêça hilberînê biguhezînin:

$ cd production

Piştî wê, hûn dikarin wêneyên herî dawî yên Docker bistînin:

$ docker-compose pull

Di dawiyê de, stack Loki bi fermana jêrîn dest pê dike:

$ docker-compose up

mîmariya Loki

Li vir diagramek piçûk bi mîmariya Loki re heye:

Loki - berhevkirina têketin bi karanîna nêzîkatiya Prometheus
Prensîbên Mîmariya Loki

Muwekîlê webê serîlêdanan li ser serverê dimeşîne, Promtail têketin berhev dike û ji Loki re dişîne, xerîdar jî metadata ji Loki re dişîne. Loki her tiştî kom dike û digihîne Grafana.
Loki direve. Ji bo dîtina pêkhateyên berdest, emrê jêrîn bimeşînin:

$ docker ps

Di doza Dockerek nû ya sazkirî de, divê emrê encama jêrîn vegerîne:

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

Em pêkhateyên jêrîn dibînin:

  • Promtail: nûnerê ku ji bo navendîkirina têketin berpirsiyar e
  • Grafana: Amûra dashboardê ya navdar
  • Loki: Daemon navendîkirina daneyê

Wekî beşek ji binesaziyek klasîk (mînak, li ser bingeha makîneyên virtual), pêdivî ye ku nûnerê Promtail li ser her makîneyê were bicîh kirin. Grafana û Loki dikarin li ser heman makîneyê werin saz kirin.

Dabeşkirina Kubernetes

Sazkirina pêkhateyên Loki li Kubernetes dê wiha be:

  • daemonSet da ku nûnerê Promtail li ser her yek ji makîneyên di koma serverê de bicîh bike
  • Loki Deployment
  • û ya dawî jî bicihkirina Grafana ye.

Xwezî, Loki wekî pakêtek Helm peyda dibe, ku ew bi kar tîne hêsan dike.

Sazkirin bi rêya Heml

Divê hûn jixwe Heml sazkirî bin. Ew dikare ji depoya GitHub ya projeyê were dakêşandin. Ew bi derxistina arşîva minasib ji bo mîmariya we û lê zêdekirina helmê tê saz kirin $PATH.

Têbînî: guhertoya 3.0.0 ya Helm vê dawiyê hat berdan. Ji ber ku gelek guhertin di wê de hene, ji xwendevan re tê pêşniyar kirin ku berî ku dest bi karanîna wê bike hinekî li bendê bimîne..

Zêdekirina çavkaniyê ji bo Helm

Gava yekem ev e ku meriv depoya "loki" bi fermana jêrîn zêde bike:

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

Piştî wê, hûn dikarin li pakêtên bi navê "loki" bigerin:

$ helm search loki

Encam:

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...

Van pakêtan taybetmendiyên jêrîn hene:

  • pakêtê loki/loki tenê bi servera Loki re hevber dike
  • pakêtê loki/fluent-bit destûrê dide te ku DaemonSet bi karanîna fluent-bin bikar bîne da ku li şûna Promtail têketin berhev bike
  • pakêtê loki/promtail agent berhevkirina têketinê dihewîne
  • pakêtê loki / loki-stack, destûrê dide te ku hûn tavilê Loki bi Promtail re bi cih bikin.

Sazkirina Loki

Ji bo ku Loki li Kubernetes bicîh bikin, emrê jêrîn li cîhê navê "şopandinê" bimeşînin:

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

Ji bo tomarkirina dîskê, vebijarkê lê zêde bike --set loki.persistence.enabled = true:

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

Têbînî: Heke hûn dixwazin di heman demê de Grafana bicîh bikin, wê hingê pîvanê lê zêde bikin --set grafana.enabled = true

Dema ku hûn vê fermanê dimeşînin, divê hûn hilberîna jêrîn bistînin:

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.

Dema ku em li rewşa pelan di nav qada navên "şopandinê" de mêze bikin, em dikarin bibînin ku her tişt tête bicîh kirin:

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

Encam:

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

Hemî pez dimeşin. Niha dem hatiye ku hin ceribandinan bikin!

Girêdana bi Grafana

Ji bo ku hûn di bin Kubernetes de bi Grafana ve girêbidin, hûn hewce ne ku tunelekek berbi wê vekin. Li jêr fermana vekirina port 3000 ji bo Grafana pod heye:

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

Xalek din a girîng hewcedariya vegerandina şîfreya rêveberê Grafana ye. Şîfre veşartî ye loki-grafana li zeviyê .data.admin-user di formata base64 de.

Ji bo vegerandina wê, hûn hewce ne ku emrê jêrîn bimeşînin:

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

Vê şîfreyê bi hesabê rêveberê xwerû (admin) re bi hev re bikar bînin.

Danasîna çavkaniya daneya Loki li Grafana

Berî her tiştî, pê ewle bine ku çavkaniya daneya Loki (Vesazkirin / Çavkaniya daneyê) hatiye afirandin.
Li vir mînakek e:

Loki - berhevkirina têketin bi karanîna nêzîkatiya Prometheus
Mînakek sazkirina çavkaniyek daneyê ji bo Loki

Bi tikandina li ser "Test" hûn dikarin girêdana bi Loki re biceribînin.

Daxwazan ji Loki re dikin

Naha biçin Grafana û biçin beşa "Explore". Dema ku têketin ji konteyneran werdigire, Loki metadata ji Kubernetes zêde dike. Bi vî rengî, dîtina têketinên konteynirek taybetî gengaz dibe.

Mînakî, ji bo hilbijartina têketinên konteynerê promtail, hûn dikarin pirsa jêrîn bikar bînin: {container_name = "promtail"}.
Ji bîr nekin ku li vir jî çavkaniya daneya Loki hilbijêrin.

Ev pirs dê çalakiya konteynerê wiha vegerîne:

Loki - berhevkirina têketin bi karanîna nêzîkatiya Prometheus
Encama lêpirsînê li Grafana

Zêdekirina li dashboard

Bi Grafana 6.4-ê dest pê dike, gengaz e ku meriv agahdariya têketinê rasterast li ser dashboardê bixe. Piştî wê, bikarhêner dê bikaribe zû di navbera hejmara daxwazên li ser malpera xwe de ji şopên serîlêdanê veguherîne.

Li jêr tabloyek mînakek heye ku vê pêwendiyê bicîh tîne:

Loki - berhevkirina têketin bi karanîna nêzîkatiya Prometheus
Bi metrîkên Prometheus û têketinên Loki re tabloya nimûne

Pêşeroja Loki

Min di Gulan/Hezîranê de bi guhertoya 0.1-ê dest bi karanîna Loki kir. Guhertoya 1 îro îro derketiye, û heta 1.1 û 1.2.

Divê were pejirandin ku guhertoya 0.1 bi têra xwe aram nebû. Lê 0.3 jixwe nîşanên rastîn ên mezinbûnê nîşan da, û guhertoyên paşîn (0.4, paşê 1.0) tenê vê bandorê xurt kirin.

Piştî 1.0.0, kes nikare hincetek hebe ku vê amûra ecêb bikar neyne.

Pêşveçûnên din divê ne li ser Loki bin, lê ji bilî yekbûna wê bi Grafana-ya hêja re. Bi rastî, Grafana 6.4 jixwe bi dashboardan re entegrasyonek baş heye.

Grafana 6.5, ku di van demên dawî de hate berdan, vê entegrasyonê bi xweber naskirina naveroka têketinên di formata JSON de bêtir çêtir dike.

Vîdyoya jêrîn mînakek piçûk a vê mekanîzmayê nîşan dide:

Loki - berhevkirina têketin bi karanîna nêzîkatiya Prometheus
Bikaranîna rêzikên Loki yên ku di Grafana de hatine pêşkêş kirin

Mînakî, meriv dikare yek ji qadên JSON bikar bîne, mînakî:

  • girêdanên amûrek derveyî
  • fîlterkirina naveroka têketinê

Mînakî, hûn dikarin li ser traceId bikirtînin da ku biçin Zipkin an Jaeger.

Wekî her car, em li benda şîroveyên we ne û we vedixwînin webinar vekin, ku em ê biaxivin ka pîşesaziya DevOps çawa di sala 2019-an de pêş ketiye û rêyên pêşkeftina gengaz ên ji bo 2020-an nîqaş bikin.

Source: www.habr.com