Loki - baļķu savākŔana, izmantojot Prometeja pieeju

Sveiciens, habrovskas iedzÄ«votāji! Jaunas pieteikÅ”anās kursam sākuma priekÅ”vakarā "DevOps prakse un rÄ«ki" Mēs esam sagatavojuÅ”i jums interesanta materiāla tulkojumu.

Å is raksts ir Ä«ss ievads par Loki. Projekts Loki atbalsta Grafana un tā mērÄ·is ir centralizēta žurnālu savākÅ”ana (no serveriem vai konteineriem).

Loki galvenā iedvesma bija Prometejs ar domu piemērot viņa pieejas žurnālu pārvaldībai:

  • izmantojot etiÄ·etes datu glabāŔanai
  • maz resursu patēriņŔ

Mēs atgriezÄ«simies pie tā, kā darbojas Prometheus, un sniegsim dažus piemērus tā izmantoÅ”anai Kubernetes kontekstā.

Daži vārdi par Prometeju

Lai pilnībā saprastu, kā darbojas Loki, ir svarīgi spert soli atpakaļ un nedaudz atcerēties par Prometeju.

Viena no Prometheus atŔķirÄ«gajām iezÄ«mēm ir metrikas iegÅ«Å”ana no savākÅ”anas punktiem (izmantojot eksportētājus) un glabāŔana TSDB (laikrindu datu bāzē), pievienojot metadatus etiÄ·eÅ”u veidā.

Kāpēc tas jums nepiecieÅ”ams?

Nesen Prometheus ir kļuvis par de facto standartu konteineru un Kubernetes pasaulē: tā uzstādÄ«Å”ana ir ļoti vienkārÅ”a, un Kubernetes klasterim ir Prometheus vietējais galapunkts. Prometheus var arÄ« iegÅ«t metriku no lietojumprogrammām, kas izvietotas konteinerā, vienlaikus saglabājot noteiktas etiÄ·etes. Tāpēc lietojumprogrammu uzraudzÄ«bu ir ļoti viegli ieviest.

Diemžēl joprojām nav pabeigta risinājuma žurnālu pārvaldībai, un jums ir jāatrod risinājums sev:

  • pārvaldÄ«ts mākoņpakalpojums žurnālu centralizācijai (AWS, Azure vai Google)
  • uzraudzÄ«bas pakalpojums ā€œmonitorings kā pakalpojumsā€ (piemēram, Datadog)
  • izveidojot savu žurnālu savākÅ”anas pakalpojumu.

TreÅ”ajam variantam es tradicionāli izmantoju Elasticsearch, neskatoties uz to, ka ne vienmēr biju apmierināts ar to (it Ä«paÅ”i tā smagumu un konfigurācijas sarežģītÄ«bu).

Loki tika izstrādāts, lai vienkārÅ”otu ievieÅ”anu saskaņā ar Ŕādiem principiem:

  • vienkārÅ”i sākt
  • patērē maz resursu
  • strādāt patstāvÄ«gi bez Ä«paÅ”as apkopes
  • kalpo kā Prometheus papildinājums, lai palÄ«dzētu kļūdu izmeklÄ“Å”anā

Tomēr Ŕī vienkārŔība nāk uz dažu kompromisu rēķina. Viens no tiem ir neindeksēt saturu. Tāpēc teksta meklÄ“Å”ana nav Ä«paÅ”i efektÄ«va vai bagātÄ«ga un neļauj veikt statistiku par teksta saturu. Bet, tā kā Loki vēlas bÅ«t grep ekvivalents un Prometeja papildinājums, tas nav trÅ«kums.

Incidenta izmeklēŔana

Lai labāk saprastu, kāpēc Loki nav nepiecieÅ”ama indeksācija, atgriezÄ«simies pie incidentu izmeklÄ“Å”anas metodes, ko izmantoja Loki izstrādātāji:

Loki - baļķu savākŔana, izmantojot Prometeja pieeju
1 brÄ«dinājums ā†’ 2 informācijas panelis ā†’ 3 Adhoc vaicājums ā†’ 4 žurnālu apkopoÅ”ana ā†’ 5 izplatÄ«ta izsekoÅ”ana ā†’ 6 labot!
(1 BrÄ«dinājums ā†’ 2 Informācijas panelis ā†’ 3 Adhoc vaicājums ā†’ 4 žurnālu apkopoÅ”ana ā†’ 5 izplatÄ«tā izsekoÅ”ana ā†’ 6 laboÅ”ana!)

Ideja ir tāda, ka mēs saņemam kādu brīdinājumu (Slack Notification, SMS utt.) un pēc tam:

  • apskatiet Grafana informācijas paneļus
  • apskatÄ«t pakalpojumu metriku (piemēram, programmā Prometheus)
  • apskatiet žurnāla ierakstus (piemēram, Elasticsearch)
  • varbÅ«t apskatiet izplatÄ«tās pēdas (Jēgers, Zipkins utt.)
  • un visbeidzot sākotnējās problēmas novērÅ”ana.

Å eit, Grafana + Prometheus + Elasticsearch + Zipkin skursteņa gadÄ«jumā, jums bÅ«s jāizmanto četri dažādi rÄ«ki. Lai samazinātu laiku, bÅ«tu jauki, ja visas Ŕīs darbÄ«bas varētu veikt, izmantojot vienu rÄ«ku: Grafana. Ir vērts atzÄ«mēt, ka Ŕī pieeja pētniecÄ«bai ir ieviesta Grafana kopÅ” 6. versijas. Tādējādi kļūst iespējams piekļūt Prometheus datiem tieÅ”i no Grafana.

Loki - baļķu savākŔana, izmantojot Prometeja pieeju
Explorer ekrāns ir sadalīts starp Prometeju un Loki

Å ajā ekrānā varat skatÄ«t Loki žurnālus, kas saistÄ«ti ar Prometheus metriku, izmantojot dalÄ«tā ekrāna koncepciju. KopÅ” versijas 6.5 Grafana ļauj parsēt izsekoÅ”anas ID Loki žurnāla ierakstos, lai sekotu saitēm uz jÅ«su iecienÄ«tākajiem izplatÄ«tajiem izsekoÅ”anas rÄ«kiem (Jaeger).

Vietējais Loki tests

VienkārŔākais veids, kā lokāli pārbaudīt Loki, ir izmantot docker-compose. Docker-compose fails atrodas Loki repozitorijā. Jūs varat iegūt repozitoriju, izmantojot Ŕo komandu git:

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

Pēc tam jums jāiet uz ražoÅ”anas direktoriju:

$ cd production

Pēc tam varat iegūt jaunāko Docker attēlu versiju:

$ docker-compose pull

Visbeidzot, Loki kaudze tiek palaista ar Ŕādu komandu:

$ docker-compose up

Loki arhitektūra

Šeit ir neliela diagramma ar Loki arhitektūru:

Loki - baļķu savākŔana, izmantojot Prometeja pieeju
Loki arhitektūras principi

Tīmekļa klients palaiž lietojumprogrammas uz servera, Promtail apkopo žurnālus un nosūta tos Loki, tīmekļa klients sūta arī metadatus uz Loki. Loki visu apkopo un nosūta Grafanai.
Loki ir palaists. Lai skatītu pieejamos komponentus, palaidiet Ŕādu komandu:

$ docker ps

Svaigi instalēta Docker gadÄ«jumā komandai jāatgriež Ŕāds rezultāts:

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

Mēs redzam Ŕādus komponentus:

  • Promtail: aÄ£ents, kas atbild par žurnālu centralizāciju
  • Grafana: slavens informācijas paneļa rÄ«ks
  • Loki: datu centralizācijas dēmons

Kā daļa no klasiskās infrastruktÅ«ras (piemēram, pamatojoties uz virtuālajām maŔīnām) Promtail aÄ£ents ir jāizvieto katrā datorā. Grafana un Loki var instalēt vienā maŔīnā.

IzvietoŔana Kubernetes

Loki komponentu instalÄ“Å”ana Kubernetes bÅ«s Ŕāda:

  • daemonSet Promtail aÄ£enta izvietoÅ”anai katrā serveru klastera maŔīnā
  • Loki izvietoÅ”ana
  • un pēdējais ir Grafana izvietoÅ”ana.

Par laimi, Loki ir pieejams kā Helm pakotne, kas atvieglo izvietoŔanu.

InstalēŔana caur Heml

Jums jau jābÅ«t instalētam Heml. To var lejupielādēt no projekta GitHub repozitorija. Tas tiek instalēts, izpakojot jÅ«su arhitektÅ«rai atbilstoÅ”o arhÄ«vu un pievienojot tam stÅ«ri $PATH.

Piezīme: Helm versija 3.0.0 tika izlaista nesen. Tā kā tajā ir veiktas daudzas izmaiņas, lasītājam ir ieteicams mazliet pagaidīt, pirms to lietojat..

Helmas avota pievienoŔana

Pirmais solis ir pievienot ā€œlokiā€ repozitoriju, izmantojot Ŕādu komandu:

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

Pēc tam varat meklēt pakotnes ar nosaukumu ā€œlokiā€:

$ helm search loki

Rezultāts:

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

Å Ä«m pakotnēm ir Ŕādas funkcijas:

  • paka loki/loki atbilst tikai Loki serverim
  • paka loki/fluent-bit ļauj izvietot DaemonSet, izmantojot fluent-bin, lai savāktu žurnālus, nevis Promtail
  • paka loki/promtail satur žurnālfailu vākÅ”anas aÄ£entu
  • paka loki/loki-steck, ļauj nekavējoties izvietot Loki kopā ar Promtail.

Loki instalēŔana

Lai Kubernetes izvietotu Loki, nosaukumvietā ā€œmonitoringsā€ palaidiet Ŕādu komandu:

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

Lai saglabātu diskā, pievienojiet parametru --set loki.persistence.enabled = true:

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

Piezīme: ja vēlaties vienlaikus izvietot Grafana, pievienojiet parametru --set grafana.enabled = true

Palaižot Å”o komandu, jums vajadzētu iegÅ«t Ŕādu izvadi:

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.

AplÅ«kojot pākstu stāvokli ā€œuzraudzÄ«basā€ nosaukumvietā, mēs varam redzēt, ka viss ir izvietots:

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

Rezultāts:

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

Visas pākstis darbojas. Tagad ir pienācis laiks veikt dažus testus!

Savienojuma izveide ar Grafana

Lai izveidotu savienojumu ar Grafana zem Kubernetes, jums ir jāatver tunelis tās podam. Zemāk ir komanda, lai atvērtu Grafana pod portu 3000:

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

Vēl viens svarÄ«gs punkts ir nepiecieÅ”amÄ«ba atgÅ«t Grafana administratora paroli. Parole tiek turēta noslēpumā loki-grafana laukā .data.admin-user base64 formātā.

Lai to atjaunotu, jums jāizpilda Ŕāda komanda:

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

Izmantojiet Å”o paroli kopā ar noklusējuma administratora kontu (admin).

Loki datu avota noteikŔana programmā Grafana

Vispirms pārliecinieties, vai ir izveidots Loki datu avots (Configuration/Datasource).
Šeit ir piemērs:

Loki - baļķu savākŔana, izmantojot Prometeja pieeju
Loki datu avota iestatÄ«Å”anas piemērs

NoklikŔķinot uz ā€œPārbaudÄ«tā€, varat pārbaudÄ«t savienojumu ar Loki.

Pieprasījumu iesniegŔana Loki

Tagad dodieties uz Grafana sadaļu ā€œIzpētÄ«tā€. Saņemot žurnālus no konteineriem, Loki pievieno metadatus no Kubernetes. Tādējādi kļūst iespējams apskatÄ«t konkrēta konteinera žurnālus.

Piemēram, lai atlasÄ«tu promtail konteinera žurnālus, varat izmantot Ŕādu vaicājumu: {container_name = "promtail"}.
Šeit arī neaizmirstiet atlasīt Loki datu avotu.

Šis vaicājums atgriezīs konteinera darbības Ŕādi:

Loki - baļķu savākŔana, izmantojot Prometeja pieeju
Vaicājuma rezultāts programmā Grafana

Pievienot informācijas panelim

Sākot ar Grafana 6.4, žurnāla informāciju varat ievietot tieÅ”i informācijas panelÄ«. Pēc tam lietotājs varēs ātri pārslēgties starp pieprasÄ«jumu skaitu savā vietnē un lietojumprogrammu pēdām.

Tālāk ir sniegts informācijas paneļa piemērs, kas ievieÅ” Å”o mijiedarbÄ«bu.

Loki - baļķu savākŔana, izmantojot Prometeja pieeju
Informācijas paneļa paraugs ar Prometheus metriku un Loki žurnāliem

Loki nākotne

Es sāku lietot Loki maijā/jūnijā ar versiju 0.1. Šodien jau ir izlaista versija 1 un pat 1.1 un 1.2.

JāatzÄ«st, ka 0.1 versija nebija pietiekami stabila. Bet 0.3 jau uzrādÄ«ja Ä«stas brieduma pazÄ«mes, un turpmākās versijas (0.4, pēc tam 1.0) Å”o iespaidu tikai pastiprināja.

Pēc versijas 1.0.0 nevienam nevar bÅ«t attaisnojums neizmantot Å”o brÄ«niŔķīgo rÄ«ku.

Turpmākiem uzlabojumiem nevajadzētu būt par Loki, bet gan par tā integrāciju ar lielisko Grafana. Faktiski Grafana 6.4 jau ir labi integrēts ar informācijas paneļiem.

Grafana 6.5, kas tika izlaista nesen, vēl vairāk uzlabo Å”o integrāciju, automātiski atpazÄ«stot žurnāla saturu JSON formātā.

Tālāk esoÅ”ajā videoklipā ir parādÄ«ts neliels Ŕī mehānisma piemērs:

Loki - baļķu savākŔana, izmantojot Prometeja pieeju
Grafānā eksponēto Loki stÄ«gu izmantoÅ”ana

Kļūst iespējams izmantot vienu no JSON laukiem, piemēram:

  • saites uz ārējo rÄ«ku
  • žurnāla satura filtrÄ“Å”ana

Piemēram, varat noklikŔķināt uz traceId, lai pārietu uz Zipkin vai Jaeger.

Kā parasti, mēs ceram uz jÅ«su komentāriem un aicinām jÅ«s to darÄ«t atklāts vebinārs, kurā runāsim par to, kā DevOps nozare attÄ«stÄ«jās 2019. gadā, un apspriedÄ«sim iespējamos attÄ«stÄ«bas ceļus 2020. gadam.

Avots: www.habr.com