Բարև, հաբռովցիներ! Նոր դասընթացի մեկնարկից առաջ ամբողջական նյութի թարգմանությունն ենք պատրաստել ձեզ համար:
Այս հոդվածը Լոկիի մուտքի համար կարճ ներկայացում է։ Լոկի նախագծի և ուղղված է լոգերի կենտրոնացված հավաքման (սերվերներից կամ կոնտեյներներից):
Լոկիի հիմնականInspirations-ը առաջացվել է լոգերի կառավարման մոտեցումների կիրառման գաղափարից.
- մետամարկերների (labels) օգտագործում, որպեսզի տվյալները
- կենտրոնացվածորեն պահպանվեն,
մի քիչ ռեսուրս սպառման անցկացնել սկսնակների համար:
Վերադարձանք Prometheus-ի աշխատանքի սկզբունքներին և բերենք նրա օգտագործման մի քանի օրինակներ Kubernetes-ի համատեքստում:
Մի քանի խոսք Prometheus-ի մասին:
Լոկիի աշխատանքն ամբողջովին հասկանալու համար կարևոր է մի քայլ ետ անել և թեթև մոռանալ Prometheus-ի մոտեցումները:
Prometheus-ի հիմնորոշ առանձնահատկություններից մեկը տվյալների հավաքածուներից (էքսպորտերից) մետրիկները դուրս բերելու և պահպանելու հարցում է TSDB (Time Series Data Base) հիման վրա, հավելելով մետամարդիկ:
Ինչու է դա անհրաժեշտ:
Վերջին շրջանում Prometheus-ը դարձել է դե-ֆակտո ստանդարտ կոնտեյների և Kubernetes-ի աշխարհում. դրա տեղադրումը շատ հեշտ է, իսկ Kubernetes-ի խմբում սկզբունքորեն գոյություն ունի Prometheus-ի պորտ:
- Prometheus-ը կարող է նաև մետրիկները հավաքել կոնտեյներին տեղադրված ծրագրերից և պահպանել որոշակի մետամարկերներ:
- Այսպիսով, ծրագրերի մոնիտորինգը շատ հեշտ է իրականացնել:
- Ցավոք, լոգերի կառավարման համար դեռևս չկա «արդար» լուծում, և պետք է ինքնուրույն որոշումը գտնել:
Մանրամասն ծառայություն կենտրոնացված լոգերի համար (AWS, Azure կամ Google)
Լոգերի ախտորոշման ծառայություն («մոնիտորինգ որպես ծառայություն») (օրինակ, Datadog)
- որոնք իրենց լոգերի հավաքման ծառայությունը ստեղծել:
- Երրորդ տարբերակի համար սովորաբար օգտագործել եմ Elasticsearch, չնայած ես միշտ էլ գոհ չեի նրանից (մասնավորապես դրա ծանրության և կարգավորումների բարդության պատճառով):
- Լոկի նախագծվել է որպես ավելի հեշտ իրականացման համար հետևյալ սկզբունքների համաձայն.
- լինել հեշտ սկսել՝
յա սպառման շահագործման մեջ
աշխատել ինքնուրույն՝ որևէ հատուկ սպասարկմամբ,
ծառայել որպես լրացում Prometheus-ին՝ արտադրանքի մանրամասներ բանալու համար:

Բայց այս պարզությունը ձեռք է բերվում որոշ կոմպրոմիսների հաշվին:
Ավելի լավ հասկանալու համար, թե ինչու է Լոկիին անհրաժեշտ չէ ինդեքսավորում, վերադառնանք Լոկի-ի մշտադիտարկման մեթոդի վրա, որը օգտագործվել է նրանց կողմից:
Իդեան այն է, որ մենք ստանում ենք որևէ ծանուցում (Slack Notification, SMS և այլն) և հետո՝
- դիտարկում ենք Grafana-ի դաշնամուրը
- դիտարկում ենք ծառայությունների մետրիկաները ( օրինակ, Prometheus-ում)
- դիտարկում ենք օր(Log) գրառումները (օրինակ, Elasticsearch-ում)
- շուրջը նայում ենք տարածված հետքեր (Jaeger, Zipkin և այլն)
- և, վերջապես, ուղղում ենք սկզբնական պրոբլեմը։
Այստեղ, Grafana + Prometheus + Elasticsearch + Zipkin ստեկի դեպքում, անհրաժեշտ է օգտագործել չորս տարբեր գործիքներ։ Ժամանակը կրճատելու համար լավ կլինի հնարավորություն ունենալ բոլոր այս փուլերը կատարելու մի գործիքի միջոցով՝ Grafana։ Նշելու է, որ նման հետազոտությունների մոտեցում իրականացվում է Grafana-ում 6-րդ տարբերակից սկսած։ Արդյունքում, հնարավոր է ուղիղ դիմել Prometheus-ի տվյալներին Grafana-ից։

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 upLoki-ի ճարտարապետությունը
Այստեղ փոքրիկ նկարագրություն է Loki-ի ճարտարապետության մասին։

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)։
Ահա օրինակ․

Loki-ի տվյալների աղբյուրի կարգավորումների օրինակ
«Test» վրա սեղմելով կարող եք ստուգել կապը Loki-ի հետ։
Հարցումներ կատարում ենք Loki-ին
Այժմ անցեք Grafana-ի “Explore” բաժին։ Երբ ընդունում է կոնտեյներով տեղեկություններ, Loki-ն ավելացնում է մետադատաին տվյալներ Kubernetes-ից։ Այսպիսով, հնարավոր է դիտել կոնկրետ կոնտեյների տեղեկությունները։
Օրինակ, promtail կոնտեյների տեղեկություններ ընտրելու համար կարելի է օգտագործել հետևյալ հարցումը: {container_name = "promtail"}.
Այստեղ նաև մի մոռացեք ընտրել տվյալների աղբյուր Loki։
Այս հարցումը կվերադարձնի կոնտեյների ակտիվությունը հետևյալ տեսքով:

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

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 ֆորմատով բովանդակությունը։
Ստորև ներկայացված է տեսանյութ, որը ցույց է տալիս այս մեխանիզմի փոքր օրինակ:

Grafana-ում ցուցադրվող Loki տեղեկությունների օգտագործումը
Այսպիսով, կարելի է օգտագործել JSON-ի տվյալներից մեկը, օրինակ՝
- արտաքին գործիքի հղում
- լոգերի բովանդակության ֆիլտրացիա
Օրինակ, կարող եք կտտացնել traceId-ի վրա, որպեսզի անցնի Zipkin կամ Jaeger։
Traditionally we await your comments and invite you to , որտեղ խոսելու ենք, թե ինչպես է DevOps արդյունաբերությունը զարգացել 2019 թվականին և կքննարկենք զարգացման հնարավոր ճանապարհները 2020 թվականին։
Ընտանիք: habr.com
