Loki - safna annálum með Prometheus nálguninni

Heilsið, Khabrovítar! Í aðdraganda nýrrar innritunar á námskeiðið „DevOps venjur og verkfæri“ útbjó þýðingu á áhugaverðu efni fyrir þig.

Þessi grein er stutt kynning á Loka. Verkefni Loki studd af Grafana og miðar að miðlægri söfnun annála (frá netþjónum eða gámum).

Aðalinnblástur Loka var Prometheus með hugmyndina um að beita aðferðum sínum við annálastjórnun:

  • nota merki til að geyma gögn
  • lítil auðlindanotkun

Við munum snúa aftur að meginreglum Prometheus og gefa nokkur dæmi um notkun þess í tengslum við Kubernetes.

Nokkur orð um Prometheus

Til að skilja til hlítar hvernig Loki virkar er mikilvægt að taka skref til baka og skoða Prometheus aðeins aftur.

Eitt af sérkennum Prometheus er útdráttur mæligilda frá söfnunarstöðum (í gegnum útflytjendur) og vistun þeirra í TSDB (Time Series Data Base, tímaraðagagnagrunnur) að viðbættum lýsigögnum í formi merkimiða.

Af hverju þarftu það

Nýlega hefur Prometheus orðið raunverulegur staðall í heimi gáma og Kubernetes: uppsetning hans er mjög einföld og Kubernetes þyrping hefur upphaflega endapunkt fyrir Prometheus. Prometheus getur einnig dregið út mælikvarða úr forritum sem eru settir í gám á meðan viðhalda tilteknum merkimiðum. Þess vegna er eftirlit með forritum mjög auðvelt í framkvæmd.

Því miður er enn engin turnkey lausn fyrir annálastjórnun og þú verður að finna lausn fyrir sjálfan þig:

  • stýrð skýjaþjónusta fyrir miðstýringu annála (AWS, Azure eða Google)
  • eftirlitsþjónusta „eftirlit sem þjónusta“ (til dæmis Datadog)
  • búa til þína eigin skráasafnsþjónustu.

Fyrir þriðja valmöguleikann hef ég venjulega notað Elasticsearch, þrátt fyrir að ég hafi ekki alltaf verið ánægður með það (sérstaklega þyngd hans og flókið uppsetning).

Loki var hannaður til að vera auðveldur í framkvæmd samkvæmt eftirfarandi reglum:

  • vera auðvelt að byrja
  • neyta fárra auðlinda
  • vinna sjálfstætt án sérstaks viðhalds
  • þjóna sem viðbót við Prometheus til að hjálpa við villurannsóknir

Hins vegar kemur þessi einfaldleiki á kostnað sumra málamiðlana. Eitt af því er að skrá innihaldið ekki. Þess vegna er textaleit ekki mjög skilvirk eða rík og gerir þér ekki kleift að halda tölfræði um innihald textans. En þar sem Loki vill vera grep jafngildi og viðbót við Prometheus, þá er þetta ekki ókostur.

Atviksrannsókn

Til að skilja betur hvers vegna Loki þarf ekki flokkun, skulum við fara aftur í atviksrannsóknaraðferðina sem Loki verktaki:

Loki - safna annálum með Prometheus nálguninni
1 Alert → 2 Mælaborð → 3 Adhoc Query → 4 Log Aggregation → 5 Dreifð rakning → 6 Lagfæring!
(1 Viðvörun → 2 Mælaborð → 3 Adhoc fyrirspurn → 4 Logasamsöfnun → 5 Dreifð rakning → 6 Lagfæring!)

Hugmyndin er sú að við fáum einhvers konar viðvörun (Slack Notification, SMS, osfrv.) og eftir það:

  • skoða mælaborð Grafana
  • skoða þjónustumælingar (til dæmis í Prometheus)
  • skoðaðu skráningarfærslur (til dæmis í Elasticsearch)
  • kíktu kannski á dreifðar ummerki (Jaeger, Zipkin, osfrv.)
  • og lagaðu að lokum upprunalega vandamálið.

Hér, þegar um er að ræða Grafana + Prometheus + Elasticsearch + Zipkin stafla, verður þú að nota fjögur mismunandi verkfæri. Til að spara tíma væri gaman að geta gert öll þessi skref með einu verkfæri: Grafana. Þess má geta að þessi nálgun við rannsóknir hefur verið innleidd í Grafana frá útgáfu 6. Þannig verður hægt að nálgast Prometheus gögn beint úr Grafana.

Loki - safna annálum með Prometheus nálguninni
Explorer skjár skipt á milli Prometheus og Loka

Frá þessum skjá geturðu skoðað annála í Loki sem tengjast Prometheus mæligildum með því að nota klofna skjáhugtakið. Frá útgáfu 6.5 gerir Grafana þér kleift að flokka rakningarauðkennið í Loka færslum til að fylgja tenglum á uppáhalds dreifða rakningartólin þín (Jaeger).

Loki staðbundið próf

Auðveldasta leiðin til að prófa Loka á staðnum er að nota docker-compose. Docker-compose skráin er staðsett í Loki geymslunni. Þú getur fengið geymsluna með eftirfarandi skipun git:

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

Þá þarftu að skipta yfir í framleiðsluskrána:

$ cd production

Eftir það geturðu fengið nýjustu Docker myndirnar:

$ docker-compose pull

Að lokum er Loki staflan ræstur með eftirfarandi skipun:

$ docker-compose up

Loki arkitektúr

Hér er smá skýringarmynd með Loka arkitektúr:

Loki - safna annálum með Prometheus nálguninni
Loki arkitektúrreglur

Vefbiðlarinn keyrir forrit á þjóninum, Promtail safnar logs og sendir til Loka, vefbiðlarinn sendir líka lýsigögn til Loka. Loki safnar öllu saman og gefur til Grafana.
Loki hleypur. Til að skoða tiltæka íhluti skaltu keyra eftirfarandi skipun:

$ docker ps

Ef um er að ræða nýuppsettan Docker ætti skipunin að skila eftirfarandi niðurstöðu:

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

Við sjáum eftirfarandi þætti:

  • Promtail: umboðsmaður sem ber ábyrgð á miðstýringu annála
  • Grafana: hið fræga mælaborðsverkfæri
  • Loki: miðstýringarpúki gagna

Sem hluti af klassískum innviðum (til dæmis byggt á sýndarvélum) verður að setja Promtail umboðsmanninn á hverja vél. Grafana og Loka er hægt að setja á sömu vél.

Dreifing á Kubernetes

Uppsetning Loki íhluta í Kubernetes verður sem hér segir:

  • daemonSet til að senda Promtail umboðsmanninn á hverja vél í netþjónaklasanum
  • Loki dreifing
  • og sú síðasta er dreifing Grafana.

Sem betur fer er Loki fáanlegur sem Helm pakki, sem gerir það auðvelt að dreifa honum.

Uppsetning um Heml

Þú ættir nú þegar að hafa Heml uppsett. Það er hægt að hlaða niður úr GitHub geymslu verkefnisins. Það er sett upp með því að draga út skjalasafnið sem hentar arkitektúrnum þínum og bæta við stýrinu $PATH.

Ath: útgáfa 3.0.0 af Helm var gefin út nýlega. Þar sem miklar breytingar hafa orðið á því er lesandanum bent á að bíða aðeins áður en byrjað er að nota það..

Bætir við heimild fyrir Helm

Fyrsta skrefið er að bæta við „loki“ geymslunni með eftirfarandi skipun:

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

Eftir það geturðu leitað að pökkum sem heita „loki“:

$ helm search loki

Niðurstaða:

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

Þessir pakkar hafa eftirfarandi eiginleika:

  • pakki loki/loki passar aðeins við Loka þjóninn
  • pakki loki/fluent-bit gerir þér kleift að dreifa DaemonSet með því að nota fluent-bin til að safna annálum í stað Promtail
  • pakki loki/promtail inniheldur umboðsmann til að safna annálum
  • pakki loki/loka-stafla, gerir þér kleift að senda Loki strax ásamt Promtail.

Að setja upp Loka

Til að dreifa Loki á Kubernetes skaltu keyra eftirfarandi skipun í „vöktun“ nafnrýminu:

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

Til að vista á disk skaltu bæta við valkostinum --set loki.persistence.enabled = true:

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

Ath: ef þú vilt nota Grafana á sama tíma skaltu bæta við færibreytunni --set grafana.enabled = true

Þegar þú keyrir þessa skipun ættirðu að fá eftirfarandi úttak:

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.

Þegar litið er á stöðu fræbelganna í „eftirlits“ nafnrýminu getum við séð að allt er notað:

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

Niðurstaða:

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

Allir beljur eru í gangi. Nú er kominn tími til að gera nokkrar prófanir!

Tengist Grafana

Til þess að tengjast Grafana undir Kubernetes þarftu að opna göng að belg þess. Eftirfarandi er skipunin til að opna gátt 3000 fyrir Grafana belg:

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

Annar mikilvægur punktur er þörfin á að endurheimta Grafana stjórnanda lykilorðið. Lykilorðið er haldið leyndu loki-grafana á sviði .data.admin-user í base64 sniði.

Til að endurheimta það þarftu að keyra eftirfarandi skipun:

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

Notaðu þetta lykilorð í tengslum við sjálfgefna stjórnandareikninginn (admin).

Skilgreining Loka gagnagjafa í Grafana

Fyrst af öllu, vertu viss um að Loki gagnagjafinn (Configuration / Datasource) sé búinn til.
Hér er dæmi:

Loki - safna annálum með Prometheus nálguninni
Dæmi um uppsetningu gagnagjafa fyrir Loka

Með því að smella á „Test“ geturðu prófað tenginguna við Loka.

Gerir beiðnir til Loka

Farðu nú til Grafana og farðu í „Kanna“ hlutann. Þegar hann tekur á móti annálum frá gámum bætir Loki við lýsigögnum frá Kubernetes. Þannig verður hægt að skoða annála tiltekins gáms.

Til dæmis, til að velja promtail gámaskrár, geturðu notað eftirfarandi fyrirspurn: {container_name = "promtail"}.
Ekki gleyma að velja Loki gagnagjafa hér líka.

Þessi fyrirspurn mun skila gámavirkni sem hér segir:

Loki - safna annálum með Prometheus nálguninni
Niðurstaða fyrirspurnar í Grafana

Bætir við mælaborðið

Frá og með Grafana 6.4 er hægt að setja log upplýsingar beint á mælaborðið. Eftir það mun notandinn fljótt geta skipt á milli fjölda beiðna á síðunni sinni yfir í umsóknarspor.

Hér að neðan er dæmi um mælaborð sem útfærir þessa samspilun:

Loki - safna annálum með Prometheus nálguninni
Dæmi um mælaborð með Prometheus mælingum og Loki logs

Framtíð Loka

Ég byrjaði að nota Loki aftur í maí/júní með útgáfu 0.1. Útgáfa 1 hefur þegar verið gefin út í dag, og jafnvel 1.1 og 1.2.

Það verður að viðurkennast að útgáfa 0.1 var ekki nógu stöðug. En 0.3 sýndi þegar raunveruleg merki um þroska og næstu útgáfur (0.4, síðan 1.0) styrktu aðeins þessa tilfinningu.

Eftir 1.0.0 getur enginn haft afsökun fyrir því að nota ekki þetta frábæra tól.

Frekari endurbætur ættu ekki að snúast um Loka, heldur samþættingu hans við hið frábæra Grafana. Raunar hefur Grafana 6.4 nú þegar góða samþættingu við mælaborð.

Grafana 6.5, sem kom út nýlega, bætir þessa samþættingu enn frekar með því að þekkja sjálfkrafa innihald annála á JSON sniði.

Myndbandið hér að neðan sýnir lítið dæmi um þetta kerfi:

Loki - safna annálum með Prometheus nálguninni
Notkun Loka strengja sem gerðir eru í Grafana

Það verður mögulegt að nota eitt af JSON-reitunum, til dæmis til að:

  • tenglar á utanaðkomandi tól
  • skrá efnissíun

Til dæmis geturðu smellt á traceId til að fara í Zipkin eða Jaeger.

Eins og venjulega, hlökkum við til athugasemda þinna og bjóðum þér opið vefnámskeið, þar sem við munum tala um hvernig DevOps iðnaðurinn hefur þróast á árinu 2019 og ræða mögulegar þróunarleiðir fyrir árið 2020.

Heimild: www.habr.com