Loki - erregistro-bilketa Prometheus ikuspegia erabiliz

Agur, Khabrovskeko bizilagunak! Ikastarorako matrikula berri baten hasieraren bezperan "DevOps praktikak eta tresnak" Material interesgarriaren itzulpena prestatu dugu zuretzat.

Artikulu hau Lokiren sarrera labur bat da. Loki proiektua Grafanak lagunduta eta erregistroen bilketa zentralizatua (zerbitzarietatik edo edukiontzietatik) zuzenduta dago.

Lokiren inspirazio nagusia izan zen Prometeo Log kudeaketari bere planteamenduak aplikatzeko ideiarekin:

  • etiketak erabiliz datuak gordetzeko
  • baliabide gutxiren kontsumoa

Prometheus-ek funtzionatzen duen modura itzuliko gara eta Kubernetes-en testuinguruan erabileraren adibide batzuk emango ditugu.

Prometeori buruzko hitz batzuk

Loki-k nola funtzionatzen duen ondo ulertzeko, garrantzitsua da pauso bat atzera egitea eta Prometheus-i buruz pixka bat gogoratzea.

Prometheus-en ezaugarri bereizgarrietako bat bilketa puntuetatik (esportatzaileen bidez) neurketak ateratzea eta TSDB (Time Series Data Base) biltegiratzea da, metadatuak etiketa moduan gehituta.

Zergatik da beharrezkoa

Duela gutxi, Prometheus de facto estandar bihurtu da edukiontzien eta Kubernetesen munduan: bere instalazioa oso erraza da, eta Kubernetes klusterrak Prometheus-en ama-puntu natibo batekin dator. Prometheus-ek edukiontzi batean inplementatutako aplikazioetatik neurketak ere atera ditzake etiketa zehatzak gordetzen dituen bitartean. Hori dela eta, aplikazioen jarraipena oso erraza da inplementatzen.

Zoritxarrez, oraindik ez dago erregistroen kudeaketarako giltza eskuan irtenbiderik, eta zuk zeuk aurkitu behar duzu irtenbide bat:

  • erregistroak zentralizatzeko kudeatutako hodeiko zerbitzua (AWS, Azure edo Google)
  • jarraipen-zerbitzua "monitorizazioa zerbitzu gisa" (adibidez, Datadog)
  • zure erregistro-bilketa zerbitzua sortzea.

Hirugarren aukerarako, tradizionalki Elasticsearch erabiltzen nuen, beti ez nintzen pozik egon arren (batez ere bere astuntasuna eta konfigurazioaren konplexutasuna).

Loki inplementazioa errazteko diseinatu zen, printzipio hauen arabera:

  • erraza izan hasteko
  • baliabide gutxi kontsumitu
  • modu independentean lan egin behar da mantentze berezirik gabe
  • Prometheus-en gehigarri gisa balio du akatsen ikerketetan laguntzeko

Hala ere, sinpletasun hori zenbait konpromisoren kontura dator. Horietako bat edukia ez indexatzea da. Beraz, testu-bilaketa ez da oso eraginkorra edo aberatsa eta ez du onartzen testuaren edukiari buruzko estatistikak. Baina Lokik grep-en baliokidea eta Prometheus-en osagarria izan nahi duenez, hori ez da desabantaila.

Gorabeheren Ikerketa

Loki-k zergatik ez duen indexatu behar hobeto ulertzeko, itzul gaitezen Loki-ren garatzaileek erabili zuten gertakariak ikertzeko metodora:

Loki - erregistro-bilketa Prometheus ikuspegia erabiliz
1 Alerta → 2 Panela → 3 Adhoc Kontsulta → 4 Erregistroen agregazioa → 5 Banatutako jarraipena → 6 Konpondu!
(1 Abisu → 2 Arbel → 3 Adhoc Kontsulta → 4 Erregistroen agregazioa → 5 Banatutako jarraipena → 6 Konponketa!)

Ideia da nolabaiteko alerta bat jasotzea (Slack jakinarazpena, SMSa, etab.) eta ondoren:

  • begiratu Grafana aginte-panelei
  • begiratu zerbitzu-neurriak (adibidez, Prometheus-en)
  • begiratu erregistroko sarrerak (adibidez, Elasticsearch-en)
  • agian, begiratu banatutako arrastoei (Jaeger, Zipkin, etab.)
  • eta, azkenik, jatorrizko arazoa konpontzea.

Hemen, Grafana + Prometheus + Elasticsearch + Zipkin pilaren kasuan, lau tresna ezberdin erabili beharko dituzu. Denbora murrizteko, ondo legoke urrats hauek guztiak tresna bakarra erabiliz egin ahal izatea: Grafana. Azpimarratzekoa da ikerketaren ikuspegi hau Grafanan inplementatu dela 6. bertsiotik. Horrela, Prometheus-en datuak zuzenean Grafanatik atzitzea posible bihurtzen da.

Loki - erregistro-bilketa Prometheus ikuspegia erabiliz
Explorer pantaila Prometheus eta Lokiren artean banatuta

Pantaila honetatik Prometheus-en neurketekin erlazionatutako Loki erregistroak ikus ditzakezu pantaila zatituaren kontzeptua erabiliz. 6.5 bertsioaz geroztik, Grafana-k Loki erregistroko sarreretan traza-id-a analizatzeko aukera ematen dizu, zure banatutako trazatze-tresn gogokoetarako estekak jarraitzeko (Jaeger).

Tokiko Loki proba

Loki lokalean probatzeko modurik errazena docker-compose erabiltzea da. Docker-compose fitxategia Loki biltegian dago. Biltegia lor dezakezu komando hau erabiliz git:

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

Ondoren, produkzio direktoriora joan behar duzu:

$ cd production

Horren ondoren, Docker irudien azken bertsioa lor dezakezu:

$ docker-compose pull

Azkenik, Loki pila abiarazten da komando honekin:

$ docker-compose up

Loki arkitektura

Hona hemen Loki arkitekturaren diagrama txiki bat:

Loki - erregistro-bilketa Prometheus ikuspegia erabiliz
Loki Arkitektura Printzipioak

Web bezeroak zerbitzarian aplikazioak exekutatzen ditu, Promtail-ek erregistroak biltzen ditu eta Loki-ra bidaltzen ditu, web-bezeroak metadatuak Loki-ra ere bidaltzen ditu. Lokik dena batu eta Grafanari transmititzen dio.
Loki abian da. Eskuragarri dauden osagaiak ikusteko, exekutatu komando hau:

$ docker ps

Instalatutako Docker berri baten kasuan, komandoak emaitza hau itzuli beharko luke:

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

Osagai hauek ikusten ditugu:

  • Promtail: erregistroak zentralizatzeaz arduratzen den agentea
  • Grafana: aginte-tresna ospetsua
  • Loki: Datuak zentralizatzeko deabrua

Azpiegitura klasiko baten zati gisa (adibidez, makina birtualetan oinarrituta), Promtail agentea makina bakoitzean zabaldu behar da. Grafana eta Loki makina berean instala daitezke.

Kubernetes-en hedapena

Loki osagaiak Kubernetesen instalatzea honako hau izango da:

  • daemonSet Promtail agentea zerbitzari-klusterreko makina bakoitzean zabaltzeko
  • Hedapena Loki
  • eta azkena Grafanaren hedapena da.

Zorionez, Loki Helm pakete gisa dago eskuragarri, errazago zabaltzea.

Instalazioa Heml bidez

Dagoeneko Heml instalatuta izan beharko zenuke. Proiektuaren GitHub biltegitik deskargatu daiteke. Zure arkitekturari dagokion artxiboa deskonprimituz eta Helm gehituz instalatzen da $PATH.

Oharra: Helm-en 3.0.0 bertsioa duela gutxi kaleratu zen. Aldaketa asko egon direnez, irakurleari pixka bat itxarotea gomendatzen zaio erabili aurretik..

Helm-erako iturri bat gehitzea

Lehenengo urratsa "loki" biltegia gehitzea da komando hau erabiliz:

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

Horren ondoren, "loki" izeneko paketeak bilatu ditzakezu:

$ helm search loki

Emaitza:

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

Pakete hauek ezaugarri hauek dituzte:

  • pakete loki/loki Loki zerbitzariarekin bat dator soilik
  • pakete loki/fluent-bit Fluent-bin erabiliz DaemonSet bat zabaltzeko aukera ematen dizu Promtail-en ordez erregistroak biltzeko
  • pakete loki/promtail erregistro-fitxategiak biltzeko agente bat dauka
  • pakete loki/loki-pila, Promtail-ekin Loki berehala zabaltzeko aukera ematen dizu.

Loki instalatzen

Loki Kubernetes-en zabaltzeko, exekutatu komando hau "monitorizazio" izen-eremuan:

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

Diskoan gordetzeko, gehitu parametroa --set loki.persistence.enabled = true:

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

Oharra: Grafana aldi berean zabaldu nahi baduzu, gehitu parametroa --set grafana.enabled = true

Komando hau exekutatzen duzunean irteera hau lortu beharko zenuke:

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.

"Monitorizazio" izen-espazioko poden egoera ikusita, dena zabalduta dagoela ikus dezakegu:

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

Emaitza:

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

Pod guztiak martxan daude. Orain proba batzuk egiteko garaia da!

Grafanarekin konektatzen

Kubernetes-en Grafana-ra konektatzeko, tunel bat ireki behar duzu bere ontzira. Jarraian, Grafana pod-erako 3000 ataka irekitzeko komandoa dago:

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

Beste puntu garrantzitsu bat Grafana administratzailearen pasahitza berreskuratu beharra da. Pasahitza isilpean gordetzen da loki-grafana eremuan .data.admin-user base64 formatuan.

Berrezartzeko, komando hau exekutatu behar duzu:

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

Erabili pasahitz hau administratzaile-kontu lehenetsiarekin (admin) batera.

Loki datu-iturburu bat definitzea Grafanan

Lehenik eta behin, ziurtatu Loki datu-iturburua sortu dela (Konfigurazioa/Datu iturria).
Hemen duzu adibide bat:

Loki - erregistro-bilketa Prometheus ikuspegia erabiliz
Lokirako datu-iturburu bat konfiguratzeko adibidea

"Proba" sakatuz Lokirekin konexioa egiaztatu dezakezu.

Lokiri eskaerak eginez

Orain joan Grafana-ra "Arakatu" atalera. Edukiontzietako erregistroak jasotzean, Loki-k Kubernetes-en metadatuak gehitzen ditu. Horrela, edukiontzi jakin baten erregistroak ikustea posible egiten da.

Adibidez, promtail edukiontzien erregistroak hautatzeko, kontsulta hau erabil dezakezu: {container_name = "promtail"}.
Hemen ere gogoratu Loki datu-iturburua hautatzea.

Kontsulta honek edukiontzien jarduera honela itzuliko du:

Loki - erregistro-bilketa Prometheus ikuspegia erabiliz
Kontsulta emaitza Grafanan

Gehitu panelean

Grafana 6.4-tik hasita, erregistro-informazioa zuzenean jar dezakezu aginte-panelean. Horren ondoren, erabiltzaileak azkar aldatzeko aukera izango du bere webguneko eskaera kopuruaren eta aplikazioen arrastoen artean.

Jarraian, elkarrekintza hau inplementatzen duen aginte-panel baten adibidea dago:

Loki - erregistro-bilketa Prometheus ikuspegia erabiliz
Aginte-panelaren adibidea Prometheus-en neurketekin eta Loki erregistroekin

Lokiren etorkizuna

Loki erabiltzen hasi nintzen maiatzean/ekainean 0.1 bertsioarekin. Gaur 1 bertsioa, eta baita 1.1 eta 1.2 ere dagoeneko kaleratu dira.

Onartu behar da 0.1 bertsioa ez zela nahikoa egonkorra. Baina 0.3-k jada heldutasun-seinaleak erakusten zituen, eta ondorengo bertsioek (0.4, gero 1.0) inpresio hori indartu besterik ez zuten egin.

1.0.0 ondoren, inork ezin du tresna zoragarri hau ez erabiltzeko aitzakiarik izan.

Hobekuntza gehiago ez dira Lokiri buruzkoak izan behar, Grafana bikainarekin duen integrazioa baizik. Izan ere, Grafana 6.4-k dagoeneko integrazio ona du aginte-panelekin.

Duela gutxi kaleratu zen Grafana 6.5-ek integrazio hori are gehiago hobetzen du, JSON formatuan erregistro-edukia automatikoki ezagutuz.

Beheko bideoak mekanismo honen adibide txiki bat erakusten du:

Loki - erregistro-bilketa Prometheus ikuspegia erabiliz
Grafanan agerian dauden Loki kateak erabiliz

JSON eremuetako bat erabiltzea posible da, adibidez:

  • kanpoko tresnarako estekak
  • erregistroaren edukia iragaztea

Adibidez, traceId-en klik egin dezakezu Zipkin edo Jaeger-era joateko.

Ohi bezala, zuen iruzkinak espero ditugu eta gonbidatzen zaituztegu webinar irekia, non DevOps industria 2019an zehar nola garatu den hitz egingo dugu eta 2020rako garapen bide posibleak eztabaidatuko ditugu.

Iturria: www.habr.com