Loki - ġbir ta 'zkuk bl-użu tal-approċċ Prometheus

Salut, Khabrovites! B'antiċipazzjoni tal-bidu ta' reġistrazzjoni ġdida għall-kors "Prattiċi u għodod DevOps" ħejjejt traduzzjoni ta’ materjal interessanti għalik.

Dan l-artikolu huwa introduzzjoni qasira għal Loki. Proġett Loki appoġġjat minn Grafana u huwa mmirat lejn ġbir ċentralizzat ta 'zkuk (minn servers jew kontenituri).

L-ispirazzjoni ewlenija għal Loki kienet Prometheus bl-idea li japplika l-approċċi tiegħu għall-ġestjoni taz-zkuk:

  • tuża tikketti biex taħżen id-data
  • konsum baxx tar-riżorsi

Se nerġgħu lura għall-prinċipji ta 'Prometheus u nagħtu xi eżempji tal-użu tiegħu fil-kuntest ta' Kubernetes.

Ftit kelmiet dwar Prometheus

Biex tifhem bis-sħiħ kif jaħdem Loki, huwa importanti li tieħu pass lura u terġa’ tara ftit lil Prometheus.

Waħda mill-karatteristiċi distintivi ta 'Prometheus hija l-estrazzjoni ta' metriċi minn punti ta 'ġbir (permezz ta' esportaturi) u l-ħażna tagħhom f'TSDB (Time Series Data Base, database ta 'serje ta' ħin) biż-żieda ta 'metadata fil-forma ta' tikketti.

Għaliex għandek bżonnha

Riċentement, Prometheus sar l-istandard de facto fid-dinja tal-kontenituri u Kubernetes: l-installazzjoni tiegħu hija sempliċi ħafna, u l-endpoint għal Prometheus huwa inizjalment preżenti fil-cluster Kubernetes. Prometheus jista 'wkoll jiġbed metriċi minn applikazzjonijiet skjerati f'kontenitur filwaqt li jżomm tikketti speċifiċi. Għalhekk, il-monitoraġġ tal-applikazzjoni huwa faċli ħafna biex jiġi implimentat.

Sfortunatament, għad m'hemm l-ebda soluzzjoni turnkey għall-ġestjoni taz-zkuk, u trid issib soluzzjoni għalik innifsek:

  • servizz tal-cloud ġestit għaċ-ċentralizzazzjoni ta' zkuk (AWS, Azure jew Google)
  • servizz ta' monitoraġġ "monitoraġġ bħala servizz" (per eżempju, Datadog)
  • toħloq is-servizz ta' ġbir taz-zkuk tiegħek stess.

Għat-tielet għażla, tradizzjonalment użajt Elasticsearch, minkejja l-fatt li mhux dejjem kont kuntent biha (speċjalment it-toqol u l-kumplessità tas-setup tiegħu).

Loki kien iddisinjat biex ikun faċli biex jiġi implimentat skont il-prinċipji li ġejjin:

  • tkun faċli biex tibda
  • jikkunsmaw ftit riżorsi
  • taħdem b'mod indipendenti mingħajr ebda manutenzjoni speċjali
  • iservi bħala add-on għal Prometheus biex jgħin fl-investigazzjonijiet tal-bugs

Madankollu, din is-sempliċità tiġi għad-detriment ta 'xi kompromessi. Waħda minnhom hija li ma tindikax il-kontenut. Għalhekk, it-tfittxija tat-test mhijiex effiċjenti ħafna jew għanja u ma tippermettix li żżomm statistika dwar il-kontenut tat-test. Iżda peress li Loki jrid ikun l-ekwivalenti tal-grep u jikkumplimenta lil Prometheus, dan mhuwiex żvantaġġ.

Investigazzjoni ta' inċident

Biex tifhem aħjar għaliex Loki m'għandux bżonn indiċjar, ejja mmorru lura għall-metodu ta 'investigazzjoni ta' inċident użat mill-iżviluppaturi ta 'Loki:

Loki - ġbir ta 'zkuk bl-użu tal-approċċ Prometheus
1 Twissija → 2 Dashboard → 3 Mistoqsija Adhoc → 4 Aggregazzjoni ta' log → 5 Traċċar distribwit → 6 Waħħal!
(1 Twissija → 2 Dashboard → 3 Mistoqsija Adhoc → 4 Log Aggregation → 5 Traċċar Imqassam → 6 Waħħal!)

L-idea hija li jkollna xi tip ta 'twissija (Notifika Slack, SMS, eċċ.) u wara dan:

  • ħares lejn dashboards Grafana
  • Ħares lejn il-metriċi tas-servizz (per eżempju, fi Prometheus)
  • Ħares lejn l-entrati fil-log (per eżempju, f'Elasticsearch)
  • forsi agħti ħarsa lejn traċċi mqassma (Jaeger, Zipkin, eċċ.)
  • u finalment tiffissa l-problema oriġinali.

Hawnhekk, fil-każ tal-munzell Grafana + Prometheus + Elasticsearch + Zipkin, ikollok tuża erba 'għodod differenti. Biex tiffranka l-ħin, ikun sabiħ li tkun tista’ tagħmel dawn il-passi kollha b’għodda waħda: Grafana. Ta 'min jinnota li dan l-approċċ għar-riċerka ġie implimentat fi Grafana mill-verżjoni 6. Għalhekk, isir possibbli li wieħed jaċċessa d-dejta ta' Prometheus direttament minn Grafana.

Loki - ġbir ta 'zkuk bl-użu tal-approċċ Prometheus
L-iskrin tal-Explorer maqsum bejn Prometheus u Loki

Minn dan l-iskrin, tista 'tara zkuk f'Loki relatati mal-metriċi ta' Prometheus billi tuża l-kunċett tal-iskrin maqsum. Mill-verżjoni 6.5, Grafana jippermettilek li teżamina l-id tat-traċċa fl-entrati tal-log Loki biex issegwi links għall-għodod ta' traċċar distribwiti favoriti tiegħek (Jaeger).

Test lokali ta' Loki

L-eħfef mod biex tittestja Loki lokalment huwa li tuża docker-compose. Il-fajl docker-compose jinsab fir-repożitorju Loki. Tista 'tikseb ir-repożitorju bil-kmand li ġej git:

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

Imbagħad trid tibdel fid-direttorju tal-produzzjoni:

$ cd production

Wara dan, tista 'tikseb l-aħħar immaġini ta' Docker:

$ docker-compose pull

Fl-aħħarnett, il-munzell Loki jinbeda bil-kmand li ġej:

$ docker-compose up

arkitettura Loki

Hawnhekk hawn dijagramma żgħira bl-arkitettura Loki:

Loki - ġbir ta 'zkuk bl-użu tal-approċċ Prometheus
Prinċipji ta' l-Arkitettura ta' Loki

Il-klijent tal-web imexxi applikazzjonijiet fuq is-server, Promtail jiġbor zkuk u jibgħathom lil Loki, il-klijent tal-web jibgħat ukoll metadata lil Loki. Loki jgħaqqad kollox u jgħaddih lil Grafana.
Loki qed jaħdem. Biex tara l-komponenti disponibbli, mexxi l-kmand li ġej:

$ docker ps

Fil-każ ta' Docker li għadu kif ġie installat, il-kmand għandu jirritorna r-riżultat li ġej:

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

Aħna naraw il-komponenti li ġejjin:

  • Promtail: aġent responsabbli għaċ-ċentralizzazzjoni taz-zkuk
  • Grafana: l-għodda tad-dashboard famuża
  • Loki: demon taċ-ċentralizzazzjoni tad-dejta

Bħala parti minn infrastruttura klassika (per eżempju, ibbażata fuq magni virtwali), l-aġent Promtail għandu jiġi skjerat fuq kull magna. Grafana u Loki jistgħu jiġu installati fuq l-istess magna.

Skjerament għal Kubernetes

L-installazzjoni tal-komponenti Loki f'Kubernetes se tkun kif ġej:

  • daemonSet biex juża l-aġent Promtail fuq kull waħda mill-magni fil-cluster tas-server
  • Skjerament ta' Loki
  • u l-aħħar waħda hija l-iskjerament ta’ Grafana.

Fortunatament, Loki huwa disponibbli bħala pakkett Helm, li jagħmilha faċli biex jintuża.

Installazzjoni permezz ta' Heml

Diġà għandu jkollok Heml installat. Jista 'jitniżżel mir-repożitorju GitHub tal-proġett. Huwa installat billi jiġi estratt l-arkivju xieraq għall-arkitettura tiegħek u żżid it-tmun $PATH.

Nota: il-verżjoni 3.0.0 ta' Helm ġiet rilaxxata reċentement. Peress li kien hemm ħafna bidliet għaliha, il-qarrej huwa avżat li jistenna ftit qabel jibda jużah..

Żieda tas-sors għal Helm

L-ewwel pass huwa li żżid ir-repożitorju "loki" bil-kmand li ġej:

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

Wara dan, tista 'tfittex pakketti bl-isem "loki":

$ helm search loki

Riżultat:

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

Dawn il-pakketti għandhom il-karatteristiċi li ġejjin:

  • il-pakkett loki/loki jaqbel biss mas-server Loki
  • il-pakkett loki/fluent-bit jippermettilek tuża DaemonSet billi tuża fluent-bin biex tiġbor zkuk minflok Promtail
  • il-pakkett loki/promtail fih aġent tal-ġbir taz-zkuk
  • il-pakkett loki/loki-munzell, jippermettilek li immedjatament tuża Loki flimkien ma 'Promtail.

Installazzjoni ta' Loki

Biex tuża Loki f'Kubernetes, mexxi l-kmand li ġej fl-ispazju tal-isem "monitoraġġ":

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

Biex issalva fuq disk, żid l-għażla --set loki.persistence.enabled = true:

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

Nota: jekk trid tuża Grafana fl-istess ħin, imbagħad żid il-parametru --set grafana.enabled = true

Meta tmexxi dan il-kmand, għandek tikseb l-output li ġej:

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.

Meta nħarsu lejn l-istat tal-imżiewed fl-ispazju tal-isem ta '"monitoraġġ", nistgħu naraw li kollox huwa skjerat:

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

Riżultat:

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

Il-miżwed kollha qed jaħdmu. Issa wasal iż-żmien li tagħmel xi testijiet!

Konnessjoni ma Grafana

Sabiex tikkonnettja ma' Grafana taħt Kubernetes, trid tiftaħ mina għall-pod tagħha. Dan li ġej huwa l-kmand biex tiftaħ il-port 3000 għal pod Grafana:

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

Punt importanti ieħor huwa l-ħtieġa li tirkupra l-password tal-amministratur Grafana. Il-password tinżamm sigrieta loki-grafana fil-qasam .data.admin-user fil-format base64.

Biex tirrestawraha, għandek bżonn tmexxi l-kmand li ġej:

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

Uża din il-password flimkien mal-kont tal-amministratur default (admin).

Definizzjoni tas-sors tad-dejta Loki fi Grafana

L-ewwelnett, kun żgur li s-sors tad-dejta Loki (Konfigurazzjoni / Sors tad-Data) jinħoloq.
Hawn hu eżempju:

Loki - ġbir ta 'zkuk bl-użu tal-approċċ Prometheus
Eżempju tat-twaqqif ta' sors ta' dejta għal Loki

Billi tikklikkja fuq "Test" tista' tittestja l-konnessjoni ma' Loki.

Jagħmel talbiet lil Loki

Issa mur Grafana u mur fit-taqsima "Esplora". Meta jirċievi zkuk minn kontenituri, Loki jżid metadejta minn Kubernetes. Għalhekk, isir possibbli li tara r-zkuk ta 'kontenitur speċifiku.

Pereżempju, biex tagħżel zkuk tal-kontenituri tal-promtail, tista' tuża l-mistoqsija li ġejja: {container_name = "promtail"}.
Tinsiex tagħżel is-sors tad-dejta Loki hawnhekk ukoll.

Din il-mistoqsija tirritorna l-attività tal-kontejners kif ġej:

Loki - ġbir ta 'zkuk bl-użu tal-approċċ Prometheus
Riżultat tal-mistoqsija fi Grafana

Żieda mad-daxxbord

Nibda minn Grafana 6.4, huwa possibbli li titqiegħed l-informazzjoni tal-log direttament fuq id-dashboard. Wara dan, l-utent ikun jista 'malajr jaqleb bejn in-numru ta' talbiet fuq is-sit tiegħu għal traċċi ta 'applikazzjoni.

Hawn taħt hawn eżempju dashboard li jimplimenta din l-interazzjoni:

Loki - ġbir ta 'zkuk bl-użu tal-approċċ Prometheus
Dashboard tal-kampjun b'metriċi Prometheus u zkuk Loki

Il-futur ta 'Loki

Bdejt nuża Loki lura f'Mejju/Ġunju bil-verżjoni 0.1. Il-verżjoni 1 diġà ġiet rilaxxata llum, u anke 1.1 u 1.2.

Għandu jiġi ammess li l-verżjoni 0.1 ma kinitx stabbli biżżejjed. Iżda 0.3 diġà wera sinjali reali ta 'maturità, u l-verżjonijiet li jmiss (0.4, imbagħad 1.0) saħħew biss din l-impressjoni.

Wara 1.0.0, ħadd ma jista' jkollu skuża biex ma jużax din l-għodda mill-isbaħ.

Aktar titjib m'għandux ikun dwar Loki, iżda pjuttost l-integrazzjoni tiegħu mal-Grafana eċċellenti. Fil-fatt, Grafana 6.4 diġà għandu integrazzjoni tajba mad-dashboards.

Grafana 6.5, li ġie rilaxxat reċentement, ikompli jtejjeb din l-integrazzjoni billi jirrikonoxxi awtomatikament il-kontenut tar-zkuk fil-format JSON.

Il-video hawn taħt juri eżempju żgħir ta 'dan il-mekkaniżmu:

Loki - ġbir ta 'zkuk bl-użu tal-approċċ Prometheus
Bl-użu ta' kordi Loki mogħtija fi Grafana

Isir possibbli li tuża waħda mill-oqsma JSON, pereżempju, biex:

  • links għal għodda esterna
  • filtrazzjoni tal-kontenut tal-log

Pereżempju, tista' tikklikkja fuq traceId biex tmur għand Zipkin jew Jaeger.

Bħas-soltu, nistennew bil-ħerqa l-kummenti tiegħek u nistednuk webinar miftuħ, fejn se nitkellmu dwar kif l-industrija DevOps żviluppat matul l-2019 u niddiskutu mogħdijiet ta 'żvilupp possibbli għall-2020.

Sors: www.habr.com