Sveiciens, habrovskas iedzÄ«votÄji! Jaunas pieteikÅ”anÄs kursam sÄkuma priekÅ”vakarÄ
Å is raksts ir Ä«ss ievads par Loki. Projekts Loki
Loki galvenÄ iedvesma bija
- 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:
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.
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 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 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:
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.
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:
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
Avots: www.habr.com