Ողջույն, Խաբրովսկի բնակիչներ։ Դասընթացի նոր գրանցման մեկնարկի նախօրեին
Այս հոդվածը Լոկիի հակիրճ ներածություն է: Նախագիծ Loki
Լոկիի հիմնական ոգեշնչումը եղել է
- օգտագործելով պիտակներ տվյալների պահպանման համար
- քիչ ռեսուրսների սպառում
Մենք կվերադառնանք, թե ինչպես է աշխատում Պրոմեթևսը և կբերենք դրա օգտագործման մի քանի օրինակ Kubernetes-ի համատեքստում:
Մի քանի խոսք Պրոմեթևսի մասին
Լիովին հասկանալու համար, թե ինչպես է աշխատում Լոկին, կարևոր է մի քայլ հետ գնալ և մի փոքր հիշել Պրոմեթևսի մասին:
Պրոմեթևսի տարբերակիչ առանձնահատկություններից է չափումների արդյունահանումը հավաքման կետերից (արտահանողների միջոցով) և դրանք պահելը TSDB-ում (Time Series Data Base)՝ պիտակների տեսքով մետատվյալների ավելացմամբ:
Ինչու է դա անհրաժեշտ
Վերջերս Պրոմեթևսը դարձել է դե ֆակտո ստանդարտ բեռնարկղերի և Kubernetes աշխարհում. դրա տեղադրումը շատ պարզ է, և Kubernetes կլաստերը գալիս է Prometheus-ի համար բնիկ վերջնակետով: Պրոմեթևսը կարող է նաև չափումներ հանել կոնտեյների մեջ տեղադրված հավելվածներից՝ պահպանելով հատուկ պիտակներ: Հետեւաբար, հավելվածի մոնիտորինգը շատ հեշտ է իրականացնել:
Ցավոք, տեղեկամատյանների կառավարման համար դեռևս չկա բանտապահ լուծում, և դուք պետք է լուծում գտնեք ինքներդ ձեզ համար.
- կառավարվող ամպային ծառայություն՝ տեղեկամատյանների կենտրոնացման համար (AWS, Azure կամ Google)
- «Մոնիտորինգը որպես ծառայություն» մոնիտորինգի ծառայություն (օրինակ՝ Datadog)
- ստեղծելով ձեր սեփական տեղեկամատյանների հավաքագրման ծառայությունը:
Երրորդ տարբերակի համար ես ավանդաբար օգտագործում էի Elasticsearch-ը, չնայած այն հանգամանքին, որ միշտ չէ, որ գոհ էի դրանից (հատկապես դրա ծանրությունն ու կազմաձևման բարդությունը):
Loki-ն նախագծվել է պարզեցնելու իրականացումը հետևյալ սկզբունքների համաձայն.
- պարզ եղիր սկսելու համար
- սպառում է քիչ ռեսուրսներ
- աշխատել ինքնուրույն՝ առանց որևէ հատուկ պահպանման
- ծառայել որպես հավելում Պրոմեթևսի համար՝ օգնելու վրիպակների հետաքննությանը
Այնուամենայնիվ, այս պարզությունը գալիս է որոշ փոխզիջումների հաշվին: Դրանցից մեկը բովանդակությունը չինդեքսավորելն է։ Հետևաբար, տեքստի որոնումը այնքան էլ արդյունավետ կամ հարուստ չէ և թույլ չի տալիս տեքստի բովանդակության վիճակագրություն: Բայց քանի որ Լոկին ցանկանում է լինել grep-ի համարժեքը և լրացնել Պրոմեթևսին, սա թերություն չէ:
Միջադեպի հետաքննություն
Ավելի լավ հասկանալու համար, թե ինչու 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-ից:
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
Լոկիի ճարտարապետություն
Ահա մի փոքրիկ դիագրամ Լոկիի ճարտարապետությամբ.
Լոկիի ճարտարապետության սկզբունքները
Վեբ հաճախորդը գործարկում է հավելվածներ սերվերի վրա, 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-ի հետ:
Լոկիին հարցումներ կատարելը
Այժմ անցեք Grafana դեպի «Ուսումնասիրել» բաժինը: Կոնտեյներներից տեղեկամատյաններ ստանալիս Լոկին ավելացնում է մետատվյալներ Kubernetes-ից: Այսպիսով, հնարավոր է դառնում դիտել կոնկրետ կոնտեյների տեղեկամատյանները։
Օրինակ, promtail կոնտեյների տեղեկամատյանները ընտրելու համար կարող եք օգտագործել հետևյալ հարցումը. {container_name = "promtail"}
.
Այստեղ նաև հիշեք ընտրել Loki տվյալների աղբյուրը:
Այս հարցումը կվերադարձնի կոնտեյների գործունեությունը հետևյալ կերպ.
Հարցման արդյունքը Grafana-ում
Ավելացնել վահանակին
Սկսած Grafana 6.4-ից՝ դուք կարող եք տեղեկամատյանների մասին տեղեկությունները տեղադրել անմիջապես վահանակի վրա: Դրանից հետո օգտատերը կկարողանա արագ անցնել իր կայքի հարցումների քանակի և հավելվածի հետքերի միջև:
Ստորև բերված է այս փոխազդեցությունն իրականացնող վահանակի օրինակ.
Նմուշի վահանակ Պրոմեթևսի չափորոշիչներով և 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 ձևաչափով:
Ստորև բերված տեսանյութը ցույց է տալիս այս մեխանիզմի փոքր օրինակը.
Օգտագործելով Grafana-ում բացահայտված Loki լարերը
Հնարավոր է դառնում օգտագործել JSON դաշտերից մեկը, օրինակ՝
- հղումներ դեպի արտաքին գործիք
- տեղեկամատյանի բովանդակության զտում
Օրինակ, կարող եք սեղմել traceId-ի վրա՝ Zipkin կամ Jaeger գնալու համար:
Ինչպես միշտ, մենք անհամբեր սպասում ենք ձեր մեկնաբանություններին և հրավիրում ենք ձեզ
Source: www.habr.com