Loki — žurnālu vākšana, izmantojot Prometheus pieeju

Sveiki, hābri! Pirms jaunā kursa uzsākšanas mēs esam sagatavojuši jums interesanta materiāla tulkojumu. «DevOps prakse un rīki» Šis raksts ir īss ievads Loki. Loki projekts

tiek atbalstīts ar Grafana un ir vērsts uz centralizētu žurnālu vākšanu (no serveriem vai konteineriem). Galvenais iedvesmas avots Loki bija

ideja par tā pieeju žurnālu pārvaldībai: Prometheus izmantojot etiķetes (labels) datu uzglabāšanai

  • patērējot maz resursu
  • Mēs vēl atgriezīsimies pie Prometheus darbības principiem un sniegsim dažus piemērus tā izmantošanai Kubernetes kontekstā.

Daži vārdi par Prometheus

Lai pilnībā izprastu Loki darbību, ir svarīgi atkāpties un nedaudz atcerēties Prometheus.

Viens no Prometheus izceļošanās raksturlielumiem ir metrikas izguve no ievākšanas punktiem (caur eksportētājiem) un to saglabāšana TSDB (Time Series Data Base), pievienojot metadatus kā etiķetes.

Kāpēc tas ir nepieciešams

Pēdējos gados Prometheus kļuvis par de facto standartu konteineru un Kubernetes pasaulē: tā uzstādīšana ir ļoti vienkārša, un Kubernetes klasterī sākotnēji ir iekļauts gals Prometheus. Prometheus var arī izvilkt metrikas no konteineros palaistām aplikācijām, vienlaikus saglabājot noteiktas etiķetes. Tādēļ aplikāciju uzraudzība ir viegli īstenojama.

Diemžēl žurnālu pārvaldībai joprojām nav

īpaši dārgakmeņu risinājuma

  • un jums ir jātrod risinājums sev:
  • pārvaldīts mākoņu pakalpojums žurnālu centralizēšanai (AWS, Azure vai Google)
  • uzraudzības pakalpojums “uzraudzība kā pakalpojums” (monitoring as a service) (piemēram, Datadog)

žurnālu vākšanas pakalpojuma izveide.

Trešajam variantam es tradicionāli izmantoju Elasticsearch, neskatoties uz to, ka ne vienmēr biju apmierināts ar to (īpaši ar tās smagumu un sarežģītību).

  • Loki tika izstrādāts, lai vienkāršotu īstenošanu saskaņā ar šādiem principiem:
  • būt vieglam uzsākt
  • patērēt maz resursu
  • strādāt patstāvīgi bez jebkādas īpašas apkalpes

Tomēr šī vienkāršība ir panākta, veicot noteiktus kompromisus. Viens no tiem ir satura indeksēšanas neesamība. Tādēļ meklēšana tekstā nav pārāk efektīva vai bagāta un neļauj veikt statistiku par teksta saturu. Taču, ņemot vērā, ka Loki vēlas būt ekvivalents grep un papildinājums Prometheus, tas nav trūkums.

Incidentu izmeklēšana

Lai labāk saprastu, kāpēc Loki nav nepieciešama indeksēšana, atgriezīsimies pie incidentu izmeklēšanas metodes, ko izmantoja Loki izstrādātāji:

Loki — žurnālu vākšana, izmantojot Prometheus pieeju
1 Brīdinājums → 2 Paneļa skatījums → 3 Adhoc vaicājumi → 4 Žurnālu apkopojums → 5 Izkliedētā izsekošana → 6 Labot!
(1 Brīdinājums → 2 Paneļa skatījums → 3 Adhoc vaicājumi → 4 Žurnālu apkopojums → 5 Izkliedētā izsekošana → 6 Labojam!)

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

  • skatāmies Grafana paneļus
  • skatāmies pakalpojumu metrikas (piemēram, Prometheus)
  • skatāmies žurnālu ierakstus (piemēram, Elasticsearch)
  • iespējams, apskatām izkliedētās izsekošanas (Jaeger, Zipkin u.c.)
  • un, visbeidzot, labojam pamatproblēmu.

Šajā gadījumā, izmantojot Grafana + Prometheus + Elasticsearch + Zipkin, būs nepieciešami četri dažādi rīki. Lai saīsinātu laiku, būtu labi spēt veikt visus šos posmus, izmantojot vienu rīku: Grafana. Jāatzīmē, ka šāds izpētes pieejas risinājums sākot ar 6. versiju ir īstenots Grafana. Tādējādi ir iespējams piekļūt Prometheus datiem tieši no Grafana.

Loki — žurnālu vākšana, izmantojot Prometheus pieeju
Ekrāns Explorer sadalīts starp Prometheus un Loki

Šajā ekrānā var skatīt žurnālus Loki, kas saistīti ar Prometheus metriem, izmantojot ekrāna sadales koncepciju. Sākot ar 6.5 versiju, Grafana ļauj apstrādāt izsekošanas identifikatoru (trace id) Loki žurnāla ierakstos, lai pārietu uz jūsu iecienītākajiem izkliedētās izsekošanas rīkiem (Jaeger).

Loki lokālais tests

Vienkāršākais veids, kā lokāli testēt Loki, ir izmantot docker-compose. Docker-compose fails atrodas Loki repozitorijā. Repozitoriju var iegūt, izmantojot šo komandu git:

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

Tad jums jāpāriet uz production katalogu:

$ cd production

Pēc tam varat saņemt jaunāko Docker attēlu versiju:

$ docker-compose pull

Visbeidzot, Loki kaudze tiek palaista ar nākamo komandu:

Pēc šīs komandas izpildes terminālī jāparādās tekstam, ko klients ir ieguvis no servera:

Loki arhitektūra

Šeit ir neliela diagramma ar Loki arhitektūru:

Loki — žurnālu vākšana, izmantojot Prometheus pieeju
Loki arhitektūras principi

Web klients palaidz aplikācijas serverī, Promtail apkopo žurnālus un nosūta tos Lokijam, web klients arī nosūta metadatus Lokijam. Lokijs visu apkopot un nodot Grafanai.
Lokijs ir palaists. Lai apskatītu esošās komponentes, izpildiet sekojošo komandu:

$ docker ps

Ja Docker ir svaigi uzstādīts, komandai vajadzētu atgriezt sekojošo rezultātu:

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 sekojošas komponentes:

  • Promtail: aģents, kas atbild par žurnālu centralizāciju
  • Grafana: pazīstams rīks paneļu izveidei
  • Lokijs: datu centralizācijas demaons

Klasiskā infrastruktūrā (piemēram, balstīta uz virtuālajām mašīnām) katrai mašīnai jābūt izvietotam Promtail aģentam. Grafana un Lokijs var tikt uzstādīti vienā mašīnā.

Izvietošana Kubernetes

Komponentu Loki uzstādīšana Kubernetes sastāvēs no sekojošā:

  • daemonSet, lai izvietotu Promtail aģentu uz katras mašīnas serveru klastērā
  • izvietošana (Deployment) Lokijam
  • un visbeidzot — Grafana izvietošana.

Par laimi, Lokijs ir pieejams kā Helm pakotne, kas atvieglo tā izvietošanu.

Uzstādīšana caur Helm

Helm jau ir jābūt jums uzstādītam. To var lejupielādēt no projekta GitHub repozitorija. Tas tiek uzstādīts, izpakkojot arhīvu, kas atbilst jūsu arhitektūrai, un pievienojot helm $PATH.

Piezīme: versija 3.0.0 Helm tika nesen izlaista. Tā kā tajā ir daudz izmaiņu, lasītājam ieteicams nedaudz pagaidīt pirms tās izmantošanas uzsākšanas.

Avota pievienošana Helm

Pirmais solis būs pievienot repozitoriju "loki" ar sekojošo komandu:

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

Pēc tam var meklēt pakotnes ar nosaukumu "loki":

$ helm search loki

Rezultāts:

loki/loki       0.17.2 v0.4.0 Loki: kā Prometheus, bet žurnāliem.
loki/loki-stack 0.19.1 v0.4.0 Loki: kā Prometheus, bet žurnāliem.
loki/fluent-bit 0.0.2  v0.0.1 Izmanto fluent-bit Loki go papildinājumu...
loki/promtail   0.13.1 v0.4.0 Atbildīgs par žurnālu apkopošanu un...

Šīm pakotnēm ir sekojošas funkcijas:

  • pakotne loki/loki atbilst tikai Loki serverim
  • pakotne loki/fluent-bit ļauj jums izvietot DaemonSet, izmantojot fluent-bit žurnālu apkopošanai, nevis Promtail
  • pakotne loki/promtail satur žurnālu failu apkopošanas aģentu
  • pakotne loki/loki-stack, ļauj uzreiz izvietot Loki kopā ar Promtail.

Loki uzstādīšana

Lai izvietotu Loki Kubernetes, izpildiet sekojošo komandu nosacījumā "monitoring":

$ 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 vienlaicīgi izvērst Grafanu, pievienojiet parametru --set grafana.enabled = true

Izpildot šo komandu, jums vajadzētu saņemt sekojošu izvadi:

PĒDĒJĀ IZVEIDE: 2019. gada 19. novembrī 15:56:54
NOSAUKUMS: monitoring
STĀVOKLIS: IZVEIDOTS
RESURSI:
==> v1/ClusterRole
VĀRDS DPI
loki-promtail-clusterrole 189d
…
PIEMINĒJUMI:
Loki kaudze ir uzstādīta jūsu klasterī. Tagad Loki var pievienot kā datu avotu Grafana.
Skatīt <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> vairāk informācijas.

Pārbaudot podu stāvokli nosaukumu telpā “monitoring”, mēs redzēsim, ka viss ir izvērsts:

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

Rezultāts:

NOSAUKUMS             GATAVS  STĀVOKLIS  ATJAUNOŠANU SKAITS  VECUMS
loki-0               1/1    Darbojas  0         147m
loki-promtail-9zjvc  1/1    Darbojas  0         3h25m
loki-promtail-f6brf  1/1    Darbojas  0         11h
loki-promtail-hdcj7  1/1    Darbojas  0         3h23m
loki-promtail-jbqhc  1/1    Darbojas  0         11h
loki-promtail-mj642  1/1    Darbojas  0         62m
loki-promtail-nm64g  1/1    Darbojas  0         24m

Visi podi ir palaisti. Tagad ir laiks veikt dažus testus!

Savienojums ar Grafanu

Lai pieslēgtos Grafanai izmantojot Kubernetes, nepieciešams atvērt tuneli uz tās podu. Zemāk ir komanda, lai atvērtu portu 3000 Grafanas podam:

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

Vēl viens svarīgs moments ir nepieciešamība atjaunot Grafanas administratora paroli. Parole tiek glabāta slepenībā loki-grafana lauku .data.admin-user base64 formātā.

Lai to atjaunotu, jāizpilda sekojoša 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).

Datu avota Loki definēšana Grafanā

Pirmkārt, pārliecinieties, ka ir izveidots datu avots Loki (Configuration / Datasource).
Lūk, piemērs:

Loki — žurnālu vākšana, izmantojot Prometheus pieeju
Datu avota iestatīšanas piemērs Loki

Noklikšķinot uz “Test”, var pārbaudīt savienojumu ar Loki.

Veicot pieprasījumus uz Loki

Tagad dodieties uz Grafanu sadaļā “Explore”. Saņemot žurnālus no konteineriem, Loki pievieno metadatus no Kubernetes. Tādējādi kļūst iespējams apskatīt konkrēta konteineru žurnālus.

Piemēram, lai izvēlētos promtail konteineru žurnālus, varat izmantot sekojošu pieprasījumu: {container_name = "promtail"}.
Šeit arī neaizmirstiet izvēlēties datu avotu Loki.

Šis pieprasījums atgriezīs konteineru aktivitāti sekojošā formā:

Loki — žurnālu vākšana, izmantojot Prometheus pieeju
Pieprasījuma rezultāts Grafanā

Pievienošana paneļa

Sākot ar Grafanu 6.4, var ievietot žurnālu informāciju tieši panelī. Pēc tam lietotājs varēs ātri pārlēkt starp pieprasījumu skaitu savā vietnē un aplikācijas izsekošanu.

Zemāk ir piemērs paneļa, kas realizē šo mijiedarbību:

Loki — žurnālu vākšana, izmantojot Prometheus pieeju
Paraugs instrumenta panelim ar mērījumiem no Prometheus un Loki žurnāliem

Loki nākotne

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

Jāatzīst, ka versija 0.1 nebija pietiekami stabila. Bet 0.3 jau parādīja reālas gatavības pazīmes, bet nākamās versijas (0.4, tad 1.0) tikai pastiprināja šo iespaidu.

Pēc 1.0.0 nevienam vairs nevar būt attaisnojumu, kāpēc neizmantot šo brīnišķīgo rīku.

Turpmākajiem uzlabojumiem būtu jāattiecas nevis uz Loki, bet drīzāk uz tā integrāciju ar izcilo Grafana. Patiesībā, Grafana 6.4 jau piedāvāja labu integrāciju ar paneļiem.

Grafana 6.5, kas nesen tika izlaista, vēl vairāk uzlabo šo integrāciju, automātiski atpazīstot žurnālu saturu JSON formātā.

Tālāk ir sniegts neliels šī mehānisma piemērs video:

Loki — žurnālu vākšana, izmantojot Prometheus pieeju
Loki rindas izmantošana, parādot Grafana

Ir iespējams izmantot vienu no JSON laukiem, piemēram, lai:

  • saite uz ārējo rīku
  • filtrētu žurnālu saturu

Piemēram, jūs varat noklikšķināt uz traceId, lai pārietu uz Zipkin vai Jaeger.

Tradicionāli gaidām jūsu komentārus un aicinām uz atklāto tiešsaistes semināru, kur parunāsim par to, kā ir attīstījusies DevOps nozare 2019. gadā un apspriedīsim iespējamos attīstības ceļus 2020. gadam.

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster