Loki - mkusanyiko wa kumbukumbu kwa kutumia mbinu ya Prometheus

Salamu, wakazi wa Khabrovsk! Katika mkesha wa kuanza kwa uandikishaji mpya wa kozi hiyo "Mazoea na zana za DevOps" Tumekuandalia tafsiri ya nyenzo za kuvutia.

Makala haya ni utangulizi mfupi wa Loki. Mradi wa Loki kuungwa mkono na Grafana na inalenga ukusanyaji wa kati wa kumbukumbu (kutoka kwa seva au vyombo).

Msukumo mkuu kwa Loki ulikuwa Prometheus na wazo la kutumia mbinu zake za usimamizi wa magogo:

  • kutumia lebo kuhifadhi data
  • matumizi ya rasilimali chache

Tutarejea jinsi Prometheus hufanya kazi na kutoa baadhi ya mifano ya matumizi yake katika muktadha wa Kubernetes.

Maneno machache kuhusu Prometheus

Ili kuelewa kikamilifu jinsi Loki hufanya kazi, ni muhimu kuchukua hatua nyuma na kukumbuka kidogo kuhusu Prometheus.

Mojawapo ya vipengele bainifu vya Prometheus ni uchimbaji wa vipimo kutoka sehemu za kukusanya (kupitia wauzaji bidhaa nje) na kuzihifadhi katika TSDB (Time Series Data Base), pamoja na kuongezwa kwa metadata katika mfumo wa lebo.

Kwa nini ni muhimu

Hivi majuzi, Prometheus imekuwa kiwango cha ukweli katika ulimwengu wa vyombo na Kubernetes: usakinishaji wake ni rahisi sana, na nguzo ya Kubernetes inakuja na mwisho wa asili wa Prometheus. Prometheus pia inaweza kutoa metriki kutoka kwa programu zilizotumwa kwenye kontena huku ikihifadhi lebo mahususi. Kwa hiyo, ufuatiliaji wa maombi ni rahisi sana kutekeleza.

Kwa bahati mbaya, bado hakuna suluhisho la ufunguo wa usimamizi wa logi, na lazima utafute suluhisho mwenyewe:

  • huduma ya wingu inayosimamiwa kwa kuweka kumbukumbu kati (AWS, Azure au Google)
  • huduma ya ufuatiliaji "ufuatiliaji kama huduma" (kwa mfano, Datadog)
  • kuunda huduma yako ya kukusanya kumbukumbu.

Kwa chaguo la tatu, kwa jadi nilitumia Elasticsearch, licha ya ukweli kwamba sikuwa na furaha kila wakati (haswa uzito wake na ugumu wa usanidi).

Loki iliundwa ili kurahisisha utekelezaji kulingana na kanuni zifuatazo:

  • kuwa rahisi kuanza
  • hutumia rasilimali chache
  • kazi kwa kujitegemea bila matengenezo yoyote maalum
  • kutumika kama nyongeza kwa Prometheus kusaidia na uchunguzi wa mdudu

Walakini, unyenyekevu huu unakuja kwa gharama ya maelewano kadhaa. Moja wapo sio kuorodhesha yaliyomo. Kwa hiyo, utafutaji wa maandishi sio ufanisi sana au tajiri na hairuhusu takwimu juu ya maudhui ya maandishi. Lakini kwa kuwa Loki anataka kuwa sawa na grep na inayosaidia Prometheus, hii sio hasara.

Uchunguzi wa Tukio

Ili kuelewa vyema kwa nini Loki haitaji kuorodhesha, hebu turudi kwenye mbinu ya uchunguzi wa matukio ambayo wasanidi wa Loki walitumia:

Loki - mkusanyiko wa kumbukumbu kwa kutumia mbinu ya Prometheus
Tahadhari 1 β†’ Dashibodi 2 β†’ Hoja 3 ya Adhoc β†’ 4 Ukusanyaji wa Kumbukumbu β†’ 5 Ufuatiliaji Uliosambazwa β†’ 6 Rekebisha!
(Onyo 1 β†’ Dashibodi 2 β†’ Hoja 3 ya Adhoc β†’ Mkusanyiko wa Kumbukumbu 4 β†’ Ufuatiliaji 5 Uliosambazwa β†’ 6 Urekebishaji!)

Wazo ni kwamba tunapokea aina fulani ya tahadhari (Arifa ya Uvivu, SMS, n.k.) na baada ya hapo:

  • angalia dashibodi za Grafana
  • angalia vipimo vya huduma (kwa mfano, katika Prometheus)
  • angalia maingizo ya kumbukumbu (kwa mfano, katika Elasticsearch)
  • labda uangalie athari zilizosambazwa (Jaeger, Zipkin, nk.)
  • na hatimaye kurekebisha tatizo la awali.

Hapa, katika kesi ya Grafana + Prometheus + Elasticsearch + Zipkin stack, utakuwa na kutumia zana nne tofauti. Ili kupunguza muda, itakuwa nzuri kuweza kufanya hatua hizi zote kwa kutumia zana moja: Grafana. Ni vyema kutambua kwamba mbinu hii ya utafiti imetekelezwa katika Grafana tangu toleo la 6. Kwa hivyo, inakuwa inawezekana kupata data ya Prometheus moja kwa moja kutoka Grafana.

Loki - mkusanyiko wa kumbukumbu kwa kutumia mbinu ya Prometheus
Skrini ya Explorer iligawanyika kati ya Prometheus na Loki

Kutoka skrini hii unaweza kuona kumbukumbu za Loki zinazohusiana na metriki za Prometheus kwa kutumia dhana ya skrini iliyogawanyika. Tangu toleo la 6.5, Grafana hukuruhusu kuchanganua kitambulisho cha ufuatiliaji katika maingizo ya kumbukumbu ya Loki ili kufuata viungo vya zana unazopenda za ufuatiliaji zilizosambazwa (Jaeger).

Mtihani wa Loki wa ndani

Njia rahisi ya kujaribu Loki ndani ya nchi ni kutumia docker-compose. Faili ya kutunga docker iko kwenye hazina ya Loki. Unaweza kupata hazina kwa kutumia amri ifuatayo git:

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

Kisha unahitaji kwenda kwenye saraka ya uzalishaji:

$ cd production

Baada ya hii unaweza kupata toleo la hivi karibuni la picha za Docker:

$ docker-compose pull

Mwishowe, safu ya Loki inazinduliwa na amri ifuatayo:

$ docker-compose up

Usanifu wa Loki

Hapa kuna mchoro mdogo na usanifu wa Loki:

Loki - mkusanyiko wa kumbukumbu kwa kutumia mbinu ya Prometheus
Kanuni za Usanifu wa Loki

Mteja wa wavuti huendesha programu kwenye seva, Promtail hukusanya kumbukumbu na kuzituma kwa Loki, mteja wa wavuti pia hutuma metadata kwa Loki. Loki anajumlisha kila kitu na kukisambaza hadi Grafana.
Loki imezinduliwa. Ili kuona vipengele vinavyopatikana, endesha amri ifuatayo:

$ docker ps

Kwa upande wa Docker iliyosanikishwa upya, amri inapaswa kurudisha matokeo yafuatayo:

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

Tunaona viungo vifuatavyo:

  • Promtail: wakala anayehusika na kuweka kumbukumbu kati
  • Grafana: zana maarufu ya dashibodi
  • Loki: Data Centralization Daemon

Kama sehemu ya muundo msingi (kwa mfano, kulingana na mashine pepe), wakala wa Promtail lazima atumiwe kwenye kila mashine. Grafana na Loki zinaweza kusanikishwa kwenye mashine moja.

Kupelekwa kwa Kubernetes

Kufunga vipengele vya Loki kwenye Kubernetes itakuwa kama ifuatavyo:

  • daemonSet ya kupeleka wakala wa Promtail kwenye kila mashine kwenye kundi la seva.
  • Usambazaji Loki
  • na ya mwisho ni kupelekwa kwa Grafana.

Kwa bahati nzuri, Loki inapatikana kama kifurushi cha Helm, na kuifanya iwe rahisi kusambaza.

Ufungaji kupitia Heml

Unapaswa kuwa tayari Heml imewekwa. Inaweza kupakuliwa kutoka kwa hazina ya mradi wa GitHub. Imesakinishwa kwa kufungua kumbukumbu inayolingana na usanifu wako na kuongeza usukani $PATH.

Kumbuka: toleo la 3.0.0 la Helm lilitolewa hivi karibuni. Kwa kuwa kumekuwa na mabadiliko mengi kwake, msomaji anashauriwa kusubiri kidogo kabla ya kuitumia..

Inaongeza chanzo cha Helm

Hatua ya kwanza ni kuongeza hazina ya "loki" kwa kutumia amri ifuatayo:

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

Baada ya hayo, unaweza kutafuta vifurushi vinavyoitwa "loki":

$ helm search loki

Matokeo:

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

Vifurushi hivi vina sifa zifuatazo:

  • mfuko loki/loki inalingana na seva ya Loki pekee
  • mfuko loki/fasaha-kidogo hukuruhusu kupeleka DaemonSet kwa kutumia bin fasaha kukusanya kumbukumbu badala ya Promtail
  • mfuko loki/promtail ina wakala wa kukusanya faili za kumbukumbu
  • mfuko loki/loki-stack, hukuruhusu kusambaza Loki pamoja na Promtail mara moja.

Inasakinisha Loki

Ili kupeleka Loki kwa Kubernetes, endesha amri ifuatayo katika nafasi ya majina ya "kufuatilia":

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

Ili kuhifadhi kwenye diski, ongeza kigezo --set loki.persistence.enabled = true:

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

Kumbuka: ikiwa unataka kupeleka Grafana kwa wakati mmoja, kisha ongeza parameter --set grafana.enabled = true

Unapoendesha amri hii unapaswa kupata pato lifuatalo:

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.

Kuangalia hali ya maganda kwenye nafasi ya majina ya "kufuatilia", tunaweza kuona kuwa kila kitu kimetumwa:

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

Matokeo:

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

Maganda yote yanaendesha. Sasa ni wakati wa kufanya majaribio kadhaa!

Inaunganishwa na Grafana

Ili kuunganisha kwa Grafana chini ya Kubernetes, unahitaji kufungua handaki kwenye ganda lake. Ifuatayo ni amri ya kufungua bandari 3000 kwa ganda la Grafana:

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

Jambo lingine muhimu ni hitaji la kurejesha nenosiri la msimamizi wa Grafana. Nenosiri linawekwa siri loki-grafana shambani .data.admin-user katika muundo wa base64.

Ili kuirejesha, unahitaji kuendesha amri ifuatayo:

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

Tumia nenosiri hili kwa kushirikiana na akaunti ya msimamizi chaguo-msingi (admin).

Kufafanua chanzo cha data cha Loki huko Grafana

Kwanza kabisa, hakikisha kwamba chanzo cha data cha Loki kimeundwa (Usanidi/Chanzo cha Data).
Hapa ni mfano:

Loki - mkusanyiko wa kumbukumbu kwa kutumia mbinu ya Prometheus
Mfano wa kusanidi chanzo cha data kwa Loki

Kwa kubofya "Jaribio" unaweza kuangalia muunganisho na Loki.

Kufanya maombi kwa Loki

Sasa nenda kwa Grafana hadi sehemu ya "Gundua". Wakati wa kupokea kumbukumbu kutoka kwa vyombo, Loki huongeza metadata kutoka Kubernetes. Kwa hivyo, inawezekana kutazama magogo ya chombo maalum.

Kwa mfano, ili kuchagua kumbukumbu za kontena za promtail, unaweza kutumia hoja ifuatayo: {container_name = "promtail"}.
Hapa pia kumbuka kuchagua chanzo cha data cha Loki.

Hoja hii itarudisha shughuli ya kontena kama ifuatavyo:

Loki - mkusanyiko wa kumbukumbu kwa kutumia mbinu ya Prometheus
Matokeo ya swali katika Grafana

Ongeza kwenye dashibodi

Kuanzia na Grafana 6.4, unaweza kuweka maelezo ya kumbukumbu moja kwa moja kwenye dashibodi. Baada ya hayo, mtumiaji ataweza kubadili haraka kati ya idadi ya maombi kwenye tovuti yake na athari za maombi.

Ifuatayo ni mfano wa dashibodi inayotekelezea mwingiliano huu:

Loki - mkusanyiko wa kumbukumbu kwa kutumia mbinu ya Prometheus
Sampuli ya dashibodi iliyo na vipimo vya Prometheus na kumbukumbu za Loki

Mustakabali wa Loki

Nilianza kutumia Loki nyuma mnamo Mei/Juni na toleo la 0.1. Leo toleo la 1, na hata 1.1 na 1.2 tayari zimetolewa.

Ni lazima ikubalike kuwa toleo la 0.1 halikuwa thabiti vya kutosha. Lakini 0.3 tayari ilionyesha dalili halisi za ukomavu, na matoleo yaliyofuata (0.4, kisha 1.0) yaliimarisha tu hisia hii.

Baada ya 1.0.0, hakuna mtu anayeweza kuwa na udhuru wa kutotumia zana hii nzuri.

Uboreshaji zaidi haupaswi kuwa juu ya Loki, lakini ujumuishaji wake na Grafana bora. Kwa kweli, Grafana 6.4 tayari ina ushirikiano mzuri na dashibodi.

Grafana 6.5, ambayo ilitolewa hivi majuzi, inaboresha zaidi muunganisho huu kwa kutambua kiotomatiki maudhui ya kumbukumbu katika umbizo la JSON.

Video hapa chini inaonyesha mfano mdogo wa utaratibu huu:

Loki - mkusanyiko wa kumbukumbu kwa kutumia mbinu ya Prometheus
Kutumia kamba za Loki zilizofichuliwa huko Grafana

Inawezekana kutumia moja ya uwanja wa JSON, kwa mfano, kwa:

  • viungo kwa zana ya nje
  • kuchuja yaliyomo kwenye kumbukumbu

Kwa mfano, unaweza kubofya traceId kwenda Zipkin au Jaeger.

Kama kawaida, tunatarajia maoni yako na kukualika fungua wavuti, ambapo tutazungumzia jinsi tasnia ya DevOps ilivyokua mwaka wa 2019 na kujadili njia zinazowezekana za maendeleo za 2020.

Chanzo: mapenzi.com