Լոխի — լոգերի հավաքում Prometheus մոտեցմամբ

Բարև, հաբռովցիներ! Նոր դասընթացի մեկնարկից առաջ «DevOps պրակտիկաներ և գործիքներ» ամբողջական նյութի թարգմանությունն ենք պատրաստել ձեզ համար:

Այս հոդվածը Լոկիի մուտքի համար կարճ ներկայացում է։ Լոկի նախագծի հովանավորությունն իրականացնում է Գրոֆանա, և ուղղված է լոգերի կենտրոնացված հավաքման (սերվերներից կամ կոնտեյներներից):

Լոկիի հիմնականInspirations-ը KDB առաջացվել է լոգերի կառավարման մոտեցումների կիրառման գաղափարից.

  • մետամարկերների (labels) օգտագործում, որպեսզի տվյալները
  • կենտրոնացվածորեն պահպանվեն,

մի քիչ ռեսուրս սպառման անցկացնել սկսնակների համար:

Վերադարձանք Prometheus-ի աշխատանքի սկզբունքներին և բերենք նրա օգտագործման մի քանի օրինակներ Kubernetes-ի համատեքստում:

Մի քանի խոսք Prometheus-ի մասին:

Լոկիի աշխատանքն ամբողջովին հասկանալու համար կարևոր է մի քայլ ետ անել և թեթև մոռանալ Prometheus-ի մոտեցումները:

Prometheus-ի հիմնորոշ առանձնահատկություններից մեկը տվյալների հավաքածուներից (էքսպորտերից) մետրիկները դուրս բերելու և պահպանելու հարցում է TSDB (Time Series Data Base) հիման վրա, հավելելով մետամարդիկ:

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

Վերջին շրջանում Prometheus-ը դարձել է դե-ֆակտո ստանդարտ կոնտեյների և Kubernetes-ի աշխարհում. դրա տեղադրումը շատ հեշտ է, իսկ Kubernetes-ի խմբում սկզբունքորեն գոյություն ունի Prometheus-ի պորտ:

  • Prometheus-ը կարող է նաև մետրիկները հավաքել կոնտեյներին տեղադրված ծրագրերից և պահպանել որոշակի մետամարկերներ:
  • Այսպիսով, ծրագրերի մոնիտորինգը շատ հեշտ է իրականացնել:
  • Ցավոք, լոգերի կառավարման համար դեռևս չկա «արդար» լուծում, և պետք է ինքնուրույն որոշումը գտնել:

Մանրամասն ծառայություն կենտրոնացված լոգերի համար (AWS, Azure կամ Google)

Լոգերի ախտորոշման ծառայություն («մոնիտորինգ որպես ծառայություն») (օրինակ, Datadog)

  • որոնք իրենց լոգերի հավաքման ծառայությունը ստեղծել:
  • Երրորդ տարբերակի համար սովորաբար օգտագործել եմ Elasticsearch, չնայած ես միշտ էլ գոհ չեի նրանից (մասնավորապես դրա ծանրության և կարգավորումների բարդության պատճառով):
  • Լոկի նախագծվել է որպես ավելի հեշտ իրականացման համար հետևյալ սկզբունքների համաձայն.
  • լինել հեշտ սկսել՝

յա սպառման շահագործման մեջ

աշխատել ինքնուրույն՝ որևէ հատուկ սպասարկմամբ,

ծառայել որպես լրացում Prometheus-ին՝ արտադրանքի մանրամասներ բանալու համար:

Լոխի — լոգերի հավաքում Prometheus մոտեցմամբ
Բայց այս պարզությունը ձեռք է բերվում որոշ կոմպրոմիսների հաշվին:
Ավելի լավ հասկանալու համար, թե ինչու է Լոկիին անհրաժեշտ չէ ինդեքսավորում, վերադառնանք Լոկի-ի մշտադիտարկման մեթոդի վրա, որը օգտագործվել է նրանց կողմից:

Իդեան այն է, որ մենք ստանում ենք որևէ ծանուցում (Slack Notification, SMS և այլն) և հետո՝

  • դիտարկում ենք Grafana-ի դաշնամուրը
  • դիտարկում ենք ծառայությունների մետրիկաները ( օրինակ, Prometheus-ում)
  • դիտարկում ենք օր(Log) գրառումները (օրինակ, Elasticsearch-ում)
  • շուրջը նայում ենք տարածված հետքեր (Jaeger, Zipkin և այլն)
  • և, վերջապես, ուղղում ենք սկզբնական պրոբլեմը։

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

Լոխի — լոգերի հավաքում Prometheus մոտեցմամբ
Explorer էկրանն բաժանված է Prometheus և Loki-ի միջև

Այս էկրանին կարելի է դիտարկել Loki-ում ոլորտում գրառումները, որոնք կապված են Prometheus-ի մետրիկաների հետ, օգտագործելով էկրանային բաժանման գաղափարը։ 6.5-րդ տարբերակից սկսած, Grafana-ն թույլ տա մշակել հետքի նույնականացուցիչը (trace 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 ստեկը սկսել է հետևյալ հրամանով․

$ docker-compose up

Loki-ի ճարտարապետությունը

Այստեղ փոքրիկ նկարագրություն է Loki-ի ճարտարապետության մասին։

Լոխի — լոգերի հավաքում Prometheus մոտեցմամբ
Loki-ի ճարտարապետության սկզբունքները

Վեբ-հեռացուցիչը գործարկում է ծրագիրը սերվերում, Promtail-ը հավաքում է օրագրերը և ուղարկում դրանք Loki-ին, վեբ-հեռացուցիչը նույնպես ուղարկում է մետադոլեր Loki-ին։ Loki-ն բոլորն агрегացնում է և փոխանցում Grafana-ին։
Loki-ն գործարկված է։ Պերցելու համար գոյություն ունեցող կոմպոնենտները կատարեք հետևյալ հրամանը՝

$ docker ps

Նոր տեղադրված Դոկերի դեպքում հրամանը պետք է վերադարձնի հետևյալ արդյունքը՝

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: օրագրերի կենտրոնացման պատասխանատու գործակալ
  • Grafana: հայտնի գործիք դաշնամուրների համար
  • Loki: տվյալների կենտրոնացման դիշտու

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

Kubernetes-ում տեղադրում

Loki կոմպոնենտները Kubernetes-ում տեղադրելու գործընթացն այսօր հետեւյալն է։

  • daemonSet Promtail գործակալի տեղադրման համար յուրաքանչյուր սերվերի մեքենաների վրա
  • Loki-ի տեղադրում (Deployment)
  • և վերջում՝ Grafana-ի տեղադրում։

Ուրախություն է, որ Loki-ն հասանելի է Helm փաթեթի տեսքով, ինչի շնորհիվ հեշտանում է դրա տեղավորումը։

Տեղադրում через Heml

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

注释: 3.0.0 Helm-ի տարբերակը վերջերս է թողարկվել։ Այդ պատճառով, քանի որ դրա մեջ շատ փոփոխություններ են եղել, նրա օգտագործմանը սկսելուց առաջ ցանկալի է մի փոքր սպասել.

Helm-ի համար աղբյուր ավելացնել

Առաջին քայլը կլինի “loki” պահոցի ավելացումը հետևյալ հրամանի միջոցով՝

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

Այնուհետև կարելի է որոնել “loki” անվան փաթեթներ․

$ helm search loki

Համ परिणाम։

loki/loki       0.17.2 v0.4.0 Loki։ նման Prometheus-ի, բայց համար լոգերի։
loki/loki-stack 0.19.1 v0.4.0 Loki։ նման Prometheus-ի, բայց համար լոգերի։
loki/fluent-bit 0.0.2  v0.0.1 Օգտագործում է fluent-bit Loki go պլագինը...
loki/promtail   0.13.1 v0.4.0 Պատասխանատու է հավաքելու լոգերը և...

Այս փաթեթները ունեն հետևյալ ֆունկցիաները․

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

Loki տեղադրումը

Լոկին Kubernetes-ում տեղադրելու համար կատարեք հետևյալ հրամանը “monitoring” անվան տարածությունում․

$ 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

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

ԱՎԵԼԻ ՀՆԱՐԱՎՈՐ. Հինգշաբթի Նոյեմբերյան 19, 15:56:54, 2019
ՏՈՒՆ: հետևում
ՎԱՐԴԱԲԱԺՆ: ՏԵՍԱԿ
ԱՌԱՆՔՆԵՐ:
==> v1/ClusterRole
ԱՄԾ ԵՐԱՇԽՈՒԹՅԱՄ
loki-promtail-clusterrole 189d
…
ՆՏՈՒՄՆԵՐ:
Loki մաքուր բաղադրատոմսը տեղադրվել է ձեր կլաստերում։ Այժմ Loki-ն կարելի է ավելացնել որպես տվյալների աղբյուր Grafana-ում։
Տես <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> մի ավելի մանրամասն:

Եթե նայեք “monitoring” տարածքում փոդերի վիճակին, մենք կտեսնենք, որ բոլորը տեղադրված են․

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

Համ परिणाम։

Անվանում                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-ին միացում

Grafana-ի հետ Kubernetes-ին միանալու համար անհրաժեշտ է բացել թունել նրա փոդի մոտ։ Հետո ներկայացված է հրաման՝ 3000 պորտը բացելու համար Grafana-ի փոդի համար․

$ 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)։

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

Ամեն առավոտ համոզվեք, որ Loki-ի տվյալների աղբյուրը ստեղծված է (Configuration / Datasource)։
Ահա օրինակ․

Լոխի — լոգերի հավաքում Prometheus մոտեցմամբ
Loki-ի տվյալների աղբյուրի կարգավորումների օրինակ

«Test» վրա սեղմելով կարող եք ստուգել կապը Loki-ի հետ։

Հարցումներ կատարում ենք Loki-ին

Այժմ անցեք Grafana-ի “Explore” բաժին։ Երբ ընդունում է կոնտեյներով տեղեկություններ, Loki-ն ավելացնում է մետադատաին տվյալներ Kubernetes-ից։ Այսպիսով, հնարավոր է դիտել կոնկրետ կոնտեյների տեղեկությունները։

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

Այս հարցումը կվերադարձնի կոնտեյների ակտիվությունը հետևյալ տեսքով:

Լոխի — լոգերի հավաքում Prometheus մոտեցմամբ
Հարցման արդյունքը Grafana-ում

Ավելացում դաշբորդին

Grafana 6.4-ից սկսած, կարելի է տեղադրել տեղեկություններ directamente դաշբորդում։ Հետաքրքիր է, որ օգտագործողը կարող է արագ փոփոխել որոնումների քանակը իր կայքում դեպի հավելվածի տեղեկությունը։

Ստորև ներկայացված է դաշբորդի օրինակ, որը իրականացնում է այս փոխգործակցությունը:

Լոխի — լոգերի հավաքում Prometheus մոտեցմամբ
Prometheus մետրիկաների և Loki տեղեկությունների դաշբորդի օրինակ

Loki-ի ապագան

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

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

1.0.0-ից հետո, ոչ ոք լիարժեք ոչինչ չունի, որպեսզի չօգտագործի այս հրաշալի գործիքը։

Այլ բարելավումները պետք է վերաբերվեն ոչ թե Loki-ին, այլ դրա ինտեգրմանը գերազանց Grafana-ի հետ։ Իրականում, Grafana 6.4-ում արդեն լավ ինտեգրում հայտնվեց դաշբորդների հետ։

Բերումը 6.5-ին, որը վերջերս թողարկվեց, լրացուցիչ բարելավում է այս ինտեգրումը, ավտոմատ կերպով ճանաչելով լոգերի JSON ֆորմատով բովանդակությունը։

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

Լոխի — լոգերի հավաքում Prometheus մոտեցմամբ
Grafana-ում ցուցադրվող Loki տեղեկությունների օգտագործումը

Այսպիսով, կարելի է օգտագործել JSON-ի տվյալներից մեկը, օրինակ՝

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

Օրինակ, կարող եք կտտացնել traceId-ի վրա, որպեսզի անցնի Zipkin կամ Jaeger։

Traditionally we await your comments and invite you to բաց վեբինար, որտեղ խոսելու ենք, թե ինչպես է DevOps արդյունաբերությունը զարգացել 2019 թվականին և կքննարկենք զարգացման հնարավոր ճանապարհները 2020 թվականին։

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster