Loki - տեղեկամատյանների հավաքածու՝ օգտագործելով Պրոմեթևսի մոտեցումը

Ողջույն, Խաբրովսկի բնակիչներ։ Դասընթացի նոր գրանցման մեկնարկի նախօրեին «DevOps պրակտիկա և գործիքներ» Ձեզ համար պատրաստել ենք հետաքրքիր նյութերի թարգմանություն։

Այս հոդվածը Լոկիի հակիրճ ներածություն է: Նախագիծ Loki աջակցում է Grafana-ն և ուղղված է տեղեկամատյանների կենտրոնացված հավաքմանը (սերվերներից կամ բեռնարկղերից):

Լոկիի հիմնական ոգեշնչումը եղել է Պրոմեթեւս լոգերի կառավարման հարցում իր մոտեցումները կիրառելու գաղափարով.

  • օգտագործելով պիտակներ տվյալների պահպանման համար
  • քիչ ռեսուրսների սպառում

Մենք կվերադառնանք, թե ինչպես է աշխատում Պրոմեթևսը և կբերենք դրա օգտագործման մի քանի օրինակ Kubernetes-ի համատեքստում:

Մի քանի խոսք Պրոմեթևսի մասին

Լիովին հասկանալու համար, թե ինչպես է աշխատում Լոկին, կարևոր է մի քայլ հետ գնալ և մի փոքր հիշել Պրոմեթևսի մասին:

Պրոմեթևսի տարբերակիչ առանձնահատկություններից է չափումների արդյունահանումը հավաքման կետերից (արտահանողների միջոցով) և դրանք պահելը TSDB-ում (Time Series Data Base)՝ պիտակների տեսքով մետատվյալների ավելացմամբ:

Ինչու է դա անհրաժեշտ

Վերջերս Պրոմեթևսը դարձել է դե ֆակտո ստանդարտ բեռնարկղերի և Kubernetes աշխարհում. դրա տեղադրումը շատ պարզ է, և Kubernetes կլաստերը գալիս է Prometheus-ի համար բնիկ վերջնակետով: Պրոմեթևսը կարող է նաև չափումներ հանել կոնտեյների մեջ տեղադրված հավելվածներից՝ պահպանելով հատուկ պիտակներ: Հետեւաբար, հավելվածի մոնիտորինգը շատ հեշտ է իրականացնել:

Ցավոք, տեղեկամատյանների կառավարման համար դեռևս չկա բանտապահ լուծում, և դուք պետք է լուծում գտնեք ինքներդ ձեզ համար.

  • կառավարվող ամպային ծառայություն՝ տեղեկամատյանների կենտրոնացման համար (AWS, Azure կամ Google)
  • «Մոնիտորինգը որպես ծառայություն» մոնիտորինգի ծառայություն (օրինակ՝ Datadog)
  • ստեղծելով ձեր սեփական տեղեկամատյանների հավաքագրման ծառայությունը:

Երրորդ տարբերակի համար ես ավանդաբար օգտագործում էի Elasticsearch-ը, չնայած այն հանգամանքին, որ միշտ չէ, որ գոհ էի դրանից (հատկապես դրա ծանրությունն ու կազմաձևման բարդությունը):

Loki-ն նախագծվել է պարզեցնելու իրականացումը հետևյալ սկզբունքների համաձայն.

  • պարզ եղիր սկսելու համար
  • սպառում է քիչ ռեսուրսներ
  • աշխատել ինքնուրույն՝ առանց որևէ հատուկ պահպանման
  • ծառայել որպես հավելում Պրոմեթևսի համար՝ օգնելու վրիպակների հետաքննությանը

Այնուամենայնիվ, այս պարզությունը գալիս է որոշ փոխզիջումների հաշվին: Դրանցից մեկը բովանդակությունը չինդեքսավորելն է։ Հետևաբար, տեքստի որոնումը այնքան էլ արդյունավետ կամ հարուստ չէ և թույլ չի տալիս տեքստի բովանդակության վիճակագրություն: Բայց քանի որ Լոկին ցանկանում է լինել grep-ի համարժեքը և լրացնել Պրոմեթևսին, սա թերություն չէ:

Միջադեպի հետաքննություն

Ավելի լավ հասկանալու համար, թե ինչու Loki-ն ինդեքսավորման կարիք չունի, եկեք վերադառնանք միջադեպի հետաքննության մեթոդին, որն օգտագործել են Loki-ի մշակողները.

Loki - տեղեկամատյանների հավաքածու՝ օգտագործելով Պրոմեթևսի մոտեցումը
1 Զգուշացում → 2 Վահանակ → 3 Adhoc հարցում → 4 մատյանների համախմբում → 5 բաշխված հետագծում → 6 ուղղում:
(1 Զգուշացում → 2 Վահանակ → 3 Adhoc հարցում → 4 մատյանների համախմբում → 5 բաշխված հետագծում → 6 շտկում!)

Գաղափարն այն է, որ մենք ստանում ենք ինչ-որ ահազանգ (Slack Notification, SMS և այլն) և դրանից հետո.

  • նայեք Grafana վահանակներին
  • նայեք ծառայության չափանիշներին (օրինակ, Պրոմեթևսում)
  • դիտեք գրանցամատյանների գրառումները (օրինակ, Elasticsearch-ում)
  • միգուցե նայեք տարածված հետքերին (Jaeger, Zipkin և այլն)
  • և վերջապես շտկելով սկզբնական խնդիրը:

Այստեղ, Grafana + Prometheus + Elasticsearch + Zipkin stack-ի դեպքում, դուք պետք է օգտագործեք չորս տարբեր գործիքներ: Ժամանակը կրճատելու համար լավ կլիներ, որ կարողանայիք կատարել այս բոլոր քայլերը՝ օգտագործելով մեկ գործիք՝ Grafana: Հարկ է նշել, որ հետազոտության այս մոտեցումը ներդրվել է Grafana-ում 6-րդ տարբերակից: Այսպիսով, Պրոմեթևսի տվյալների հասանելիությունը հնարավոր է դառնում անմիջապես Grafana-ից:

Loki - տեղեկամատյանների հավաքածու՝ օգտագործելով Պրոմեթևսի մոտեցումը
Explorer-ի էկրանը բաժանվել է Պրոմեթևսի և Լոկիի միջև

Այս էկրանից դուք կարող եք դիտել Loki տեղեկամատյանները՝ կապված Պրոմեթևսի չափումների հետ՝ օգտագործելով պառակտված էկրանի հայեցակարգը: 6.5 տարբերակից ի վեր, Grafana-ն թույլ է տալիս վերլուծել հետքի id-ը Loki-ի մատյանների գրառումներում՝ հետևելու ձեր սիրած բաշխված հետագծման գործիքների հղումներին (Jaeger):

Տեղական Loki թեստ

Loki-ին տեղական փորձարկման ամենադյուրին ճանապարհը docker-compose-ն օգտագործելն է: Docker-compose ֆայլը գտնվում է Loki-ի պահոցում: Դուք կարող եք ստանալ պահեստը, օգտագործելով հետևյալ հրամանը git:

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

Այնուհետև դուք պետք է գնաք արտադրության գրացուցակ.

$ cd production

Դրանից հետո դուք կարող եք ստանալ Docker պատկերների վերջին տարբերակը.

$ docker-compose pull

Վերջապես, Loki stack-ը գործարկվում է հետևյալ հրամանով.

$ docker-compose up

Լոկիի ճարտարապետություն

Ահա մի փոքրիկ դիագրամ Լոկիի ճարտարապետությամբ.

Loki - տեղեկամատյանների հավաքածու՝ օգտագործելով Պրոմեթևսի մոտեցումը
Լոկիի ճարտարապետության սկզբունքները

Վեբ հաճախորդը գործարկում է հավելվածներ սերվերի վրա, Promtail-ը հավաքում է տեղեկամատյանները և ուղարկում դրանք Loki-ին, վեբ հաճախորդը նաև մետատվյալներ է ուղարկում Loki-ին։ Լոկին համախմբում է ամեն ինչ և փոխանցում Գրաֆանային:
Loki-ն գործարկվում է: Առկա բաղադրիչները դիտելու համար գործարկեք հետևյալ հրամանը.

$ docker ps

Թարմ տեղադրված Docker-ի դեպքում հրամանը պետք է վերադարձնի հետևյալ արդյունքը.

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

Մենք տեսնում ենք հետևյալ բաղադրիչները.

  • Promtail. գործակալ, որը պատասխանատու է տեղեկամատյանների կենտրոնացման համար
  • Գրաֆանա՝ վահանակի հայտնի գործիք
  • Loki: Տվյալների կենտրոնացման Daemon

Որպես դասական ենթակառուցվածքի մաս (օրինակ՝ հիմնված վիրտուալ մեքենաների վրա), Promtail գործակալը պետք է տեղակայվի յուրաքանչյուր մեքենայի վրա: Grafana-ն և Loki-ն կարող են տեղադրվել նույն մեքենայի վրա:

Տեղակայում Kubernetes-ում

Loki բաղադրիչների տեղադրումը Kubernetes-ում կլինի հետևյալը.

  • daemonSet՝ Promtail գործակալը սերվերի կլաստերի յուրաքանչյուր մեքենայի վրա տեղակայելու համար
  • Տեղակայման Loki
  • իսկ վերջինը Grafana-ի տեղակայումն է։

Բարեբախտաբար, Loki-ն հասանելի է որպես Helm փաթեթ, ինչը հեշտացնում է դրա տեղակայումը:

Տեղադրում Heml-ի միջոցով

Դուք պետք է արդեն տեղադրեք Heml-ը: Այն կարելի է ներբեռնել նախագծի GitHub պահոցից: Այն տեղադրվում է՝ բացելով ձեր ճարտարապետությանը համապատասխան արխիվը և ավելացնելով ղեկը $PATH.

Նշում: Վերջերս թողարկվել է Helm-ի 3.0.0 տարբերակը: Քանի որ դրա մեջ շատ փոփոխություններ են եղել, ընթերցողին խորհուրդ է տրվում օգտագործել մի փոքր սպասել:.

Հելմի համար աղբյուրի ավելացում

Առաջին քայլը «loki» պահոցն ավելացնելն է՝ օգտագործելով հետևյալ հրամանը.

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

Դրանից հետո դուք կարող եք որոնել «loki» անունով փաթեթներ.

$ helm search loki

Արդյունքը:

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

Այս փաթեթներն ունեն հետևյալ հատկանիշները.

  • փաթեթը loki/loki համապատասխանում է միայն Loki սերվերին
  • փաթեթը loki/fluent-bit թույլ է տալիս տեղակայել DaemonSet՝ օգտագործելով fluent-bin՝ Promtail-ի փոխարեն տեղեկամատյաններ հավաքելու համար
  • փաթեթը loki/promtail պարունակում է գրանցամատյանների ֆայլերի հավաքման գործակալ
  • փաթեթը loki/loki-stack, թույլ է տալիս անմիջապես տեղակայել Loki-ն Promtail-ի հետ միասին:

Loki-ի տեղադրում

Loki-ն Kubernetes-ում տեղակայելու համար գործարկեք հետևյալ հրամանը «մոնիթորինգ» անվանման տարածքում.

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

Սկավառակում պահելու համար ավելացրեք պարամետրը --set loki.persistence.enabled = true:

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

Նշում: եթե ցանկանում եք միաժամանակ տեղակայել Grafana-ն, ապա ավելացրեք պարամետրը --set grafana.enabled = true

Այս հրամանը գործարկելիս պետք է ստանաք հետևյալ արդյունքը.

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.

Նայելով «մոնիթորինգի» անվանատարածքում գտնվող պատերի վիճակին, մենք կարող ենք տեսնել, որ ամեն ինչ տեղակայված է.

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

Արդյունքը:

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

Բոլոր պատյաններն աշխատում են: Հիմա ժամանակն է մի քանի թեստեր անելու:

Միացում Grafana-ին

Kubernetes-ի տակ Grafana-ին միանալու համար դուք պետք է բացեք թունել դեպի դրա պատիճ: Ստորև բերված է Grafana pod-ի համար 3000 նավահանգիստը բացելու հրամանը.

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

Մեկ այլ կարևոր կետ է Grafana-ի ադմինիստրատորի գաղտնաբառը վերականգնելու անհրաժեշտությունը: Գաղտնաբառը գաղտնի է պահվում loki-grafana դաշտում .data.admin-user base64 ձևաչափով։

Այն վերականգնելու համար հարկավոր է գործարկել հետևյալ հրամանը.

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

Օգտագործեք այս գաղտնաբառը լռելյայն ադմինիստրատորի հաշվի (admin) հետ համատեղ:

Loki տվյալների աղբյուրի սահմանում Grafana-ում

Նախ համոզվեք, որ Loki տվյալների աղբյուրը ստեղծվել է (Կազմաձևում/Տվյալների աղբյուր):
Ահա մի օրինակ.

Loki - տեղեկամատյանների հավաքածու՝ օգտագործելով Պրոմեթևսի մոտեցումը
Loki-ի համար տվյալների աղբյուր ստեղծելու օրինակ

Սեղմելով «Թեստ»՝ կարող եք ստուգել կապը Loki-ի հետ:

Լոկիին հարցումներ կատարելը

Այժմ անցեք Grafana դեպի «Ուսումնասիրել» բաժինը: Կոնտեյներներից տեղեկամատյաններ ստանալիս Լոկին ավելացնում է մետատվյալներ Kubernetes-ից: Այսպիսով, հնարավոր է դառնում դիտել կոնկրետ կոնտեյների տեղեկամատյանները։

Օրինակ, promtail կոնտեյների տեղեկամատյանները ընտրելու համար կարող եք օգտագործել հետևյալ հարցումը. {container_name = "promtail"}.
Այստեղ նաև հիշեք ընտրել Loki տվյալների աղբյուրը:

Այս հարցումը կվերադարձնի կոնտեյների գործունեությունը հետևյալ կերպ.

Loki - տեղեկամատյանների հավաքածու՝ օգտագործելով Պրոմեթևսի մոտեցումը
Հարցման արդյունքը Grafana-ում

Ավելացնել վահանակին

Սկսած Grafana 6.4-ից՝ դուք կարող եք տեղեկամատյանների մասին տեղեկությունները տեղադրել անմիջապես վահանակի վրա: Դրանից հետո օգտատերը կկարողանա արագ անցնել իր կայքի հարցումների քանակի և հավելվածի հետքերի միջև:

Ստորև բերված է այս փոխազդեցությունն իրականացնող վահանակի օրինակ.

Loki - տեղեկամատյանների հավաքածու՝ օգտագործելով Պրոմեթևսի մոտեցումը
Նմուշի վահանակ Պրոմեթևսի չափորոշիչներով և Loki տեղեկամատյաններով

Լոկիի ապագան

Ես սկսել եմ Loki-ն օգտագործել դեռ մայիս/հունիսին՝ 0.1 տարբերակով: Այսօր արդեն թողարկվել է 1-ին տարբերակը և նույնիսկ 1.1-ը և 1.2-ը:

Պետք է խոստովանել, որ 0.1 տարբերակը բավականաչափ կայուն չէր։ Բայց 0.3-ն արդեն հասունության իրական նշաններ էր ցույց տալիս, իսկ հետագա տարբերակները (0.4, ապա 1.0) միայն ամրապնդեցին այս տպավորությունը։

1.0.0-ից հետո ոչ ոք չի կարող որևէ արդարացում ունենալ չօգտագործելու այս հրաշալի գործիքը։

Հետագա բարելավումները չպետք է վերաբերվեն Loki-ին, այլ դրա ինտեգրմանը գերազանց Grafana-ին: Փաստորեն, Grafana 6.4-ն արդեն լավ ինտեգրված է վահանակների հետ:

Grafana 6.5-ը, որը թողարկվել է վերջերս, ավելի է բարելավում այս ինտեգրումը` ավտոմատ կերպով ճանաչելով գրանցամատյանի բովանդակությունը JSON ձևաչափով:

Ստորև բերված տեսանյութը ցույց է տալիս այս մեխանիզմի փոքր օրինակը.

Loki - տեղեկամատյանների հավաքածու՝ օգտագործելով Պրոմեթևսի մոտեցումը
Օգտագործելով Grafana-ում բացահայտված Loki լարերը

Հնարավոր է դառնում օգտագործել JSON դաշտերից մեկը, օրինակ՝

  • հղումներ դեպի արտաքին գործիք
  • տեղեկամատյանի բովանդակության զտում

Օրինակ, կարող եք սեղմել traceId-ի վրա՝ Zipkin կամ Jaeger գնալու համար:

Ինչպես միշտ, մենք անհամբեր սպասում ենք ձեր մեկնաբանություններին և հրավիրում ենք ձեզ բաց վեբինար, որտեղ մենք կխոսենք այն մասին, թե ինչպես է զարգացել DevOps արդյունաբերությունը 2019 թվականի ընթացքում և կքննարկենք 2020 թվականի զարգացման հնարավոր ուղիները:

Source: www.habr.com