Sveiki, hābri! Pirms jaunā kursa uzsākšanas mēs esam sagatavojuši jums interesanta materiāla tulkojumu. Šis raksts ir īss ievads Loki. Loki projekts
tiek atbalstīts ar Grafana Galvenais iedvesmas avots Loki bija
ideja par tā pieeju žurnālu pārvaldībai: 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:

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.

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.gitTad jums jāpāriet uz production katalogu:
$ cd productionPēc tam varat saņemt jaunāko Docker attēlu versiju:
$ docker-compose pullVisbeidzot, 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 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 psJa 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_1Mē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/chartsPēc tam var meklēt pakotnes ar nosaukumu "loki":
$ helm search lokiRezultā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 monitoringLai saglabātu diskā, pievienojiet parametru --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=truePiezī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=lokiRezultā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 24mVisi 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:80Vē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}}'; echoIzmantojiet š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:

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ā:

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:

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