Loki - ప్రోమేతియస్ విధానాన్ని ఉపయోగించి లాగ్ సేకరణ

ఖబ్రోవ్స్క్ నివాసితులకు వందనం! కోర్సు కోసం కొత్త నమోదు ప్రారంభం సందర్భంగా "DevOps అభ్యాసాలు మరియు సాధనాలు" మేము మీ కోసం ఆసక్తికరమైన విషయాల అనువాదాన్ని సిద్ధం చేసాము.

ఈ వ్యాసం లోకీకి చిన్న పరిచయం. ప్రాజెక్ట్ Loki గ్రాఫానా మద్దతు మరియు లాగ్‌ల యొక్క కేంద్రీకృత సేకరణ (సర్వర్‌లు లేదా కంటైనర్‌ల నుండి) లక్ష్యంగా ఉంది.

లోకీకి ప్రధాన ప్రేరణ ప్రోమేతియస్ లాగ్ నిర్వహణకు తన విధానాలను వర్తింపజేయాలనే ఆలోచనతో:

  • డేటాను నిల్వ చేయడానికి లేబుల్‌లను ఉపయోగించడం
  • కొన్ని వనరుల వినియోగం

మేము ప్రోమేతియస్ ఎలా పని చేస్తాడు అనేదానికి తిరిగి వస్తాము మరియు కుబెర్నెటెస్ సందర్భంలో దాని ఉపయోగం యొక్క కొన్ని ఉదాహరణలను ఇస్తాము.

ప్రోమేతియస్ గురించి కొన్ని మాటలు

Loki ఎలా పని చేస్తుందో పూర్తిగా అర్థం చేసుకోవడానికి, ప్రోమేతియస్ గురించి కొంచెం గుర్తుపెట్టుకోవడం చాలా ముఖ్యం.

సేకరణ పాయింట్ల నుండి (ఎగుమతిదారుల ద్వారా) కొలమానాలను సంగ్రహించడం మరియు వాటిని లేబుల్‌ల రూపంలో మెటాడేటాతో కలిపి TSDB (టైమ్ సిరీస్ డేటా బేస్)లో నిల్వ చేయడం ప్రోమేతియస్ యొక్క విలక్షణమైన లక్షణాలలో ఒకటి.

ఎందుకు అవసరం

ఇటీవల, ప్రోమేతియస్ కంటైనర్లు మరియు కుబెర్నెట్‌ల ప్రపంచంలో వాస్తవ ప్రమాణంగా మారింది: దీని ఇన్‌స్టాలేషన్ చాలా సులభం, మరియు కుబెర్నెట్స్ క్లస్టర్ ప్రోమేతియస్ కోసం స్థానిక ముగింపు బిందువుతో వస్తుంది. ప్రోమేతియస్ నిర్దిష్ట లేబుల్‌లను నిల్వ చేస్తున్నప్పుడు కంటైనర్‌లో అమర్చబడిన అప్లికేషన్‌ల నుండి కొలమానాలను కూడా సంగ్రహించవచ్చు. అందువల్ల, అప్లికేషన్ పర్యవేక్షణ అమలు చేయడం చాలా సులభం.

దురదృష్టవశాత్తూ, లాగ్ నిర్వహణ కోసం ఇప్పటికీ టర్న్‌కీ పరిష్కారం లేదు మరియు మీరు మీ కోసం ఒక పరిష్కారాన్ని కనుగొనాలి:

  • కేంద్రీకృత లాగ్‌ల కోసం నిర్వహించబడే క్లౌడ్ సేవ (AWS, Azure లేదా Google)
  • పర్యవేక్షణ సేవ “ఒక సేవగా పర్యవేక్షణ” (ఉదాహరణకు, డేటాడాగ్)
  • మీ స్వంత లాగ్ సేకరణ సేవను సృష్టించడం.

మూడవ ఎంపిక కోసం, నేను సంప్రదాయబద్ధంగా ఎలాస్టిక్‌సెర్చ్‌ని ఉపయోగించాను, నేను ఎల్లప్పుడూ దానితో సంతోషంగా లేనప్పటికీ (ముఖ్యంగా దాని భారం మరియు కాన్ఫిగరేషన్ యొక్క సంక్లిష్టత).

కింది సూత్రాల ప్రకారం అమలును సులభతరం చేయడానికి Loki రూపొందించబడింది:

  • ప్రారంభించడం సులభం
  • కొన్ని వనరులను వినియోగిస్తుంది
  • ప్రత్యేక నిర్వహణ లేకుండా స్వతంత్రంగా పని చేయండి
  • బగ్ పరిశోధనలలో సహాయం చేయడానికి ప్రోమేథియస్‌కి అదనంగా ఉపయోగపడుతుంది

అయితే, ఈ సరళత కొన్ని రాజీల వ్యయంతో వస్తుంది. వాటిలో ఒకటి కంటెంట్‌ని ఇండెక్స్ చేయకూడదు. అందువల్ల, టెక్స్ట్ శోధన చాలా సమర్థవంతంగా లేదా గొప్పది కాదు మరియు టెక్స్ట్ యొక్క కంటెంట్‌పై గణాంకాలను అనుమతించదు. కానీ Loki grepకి సమానమైనది మరియు ప్రోమేతియస్‌కు అనుబంధంగా ఉండాలని కోరుకుంటున్నందున, ఇది ప్రతికూలత కాదు.

సంఘటన విచారణ

Lokiకి ఇండెక్సింగ్ ఎందుకు అవసరం లేదో బాగా అర్థం చేసుకోవడానికి, Loki డెవలపర్‌లు ఉపయోగించిన సంఘటన పరిశోధన పద్ధతికి తిరిగి వెళ్దాం:

Loki - ప్రోమేతియస్ విధానాన్ని ఉపయోగించి లాగ్ సేకరణ
1 హెచ్చరిక → 2 డాష్‌బోర్డ్ → 3 Adhoc ప్రశ్న → 4 లాగ్ అగ్రిగేషన్ → 5 పంపిణీ చేయబడిన ట్రేసింగ్ → 6 పరిష్కరించండి!
(1 హెచ్చరిక → 2 డాష్‌బోర్డ్ → 3 Adhoc ప్రశ్న → 4 లాగ్ అగ్రిగేషన్ → 5 పంపిణీ చేయబడిన ట్రేసింగ్ → 6 ఫిక్సింగ్!)

ఆలోచన ఏమిటంటే, మేము ఒక రకమైన హెచ్చరికను (స్లాక్ నోటిఫికేషన్, SMS, మొదలైనవి) అందుకుంటాము మరియు ఆ తర్వాత:

  • గ్రాఫానా డాష్‌బోర్డ్‌లను చూడండి
  • సేవా కొలమానాలను చూడండి (ఉదాహరణకు, ప్రోమేతియస్‌లో)
  • లాగ్ ఎంట్రీలను చూడండి (ఉదాహరణకు, సాగే శోధనలో)
  • పంపిణీ చేయబడిన జాడలను పరిశీలించండి (జాగర్, జిప్కిన్, మొదలైనవి)
  • చివరకు అసలు సమస్యను పరిష్కరించడం.

ఇక్కడ, Grafana + Prometheus + Elasticsearch + Zipkin స్టాక్ విషయంలో, మీరు నాలుగు విభిన్న సాధనాలను ఉపయోగించాల్సి ఉంటుంది. సమయాన్ని తగ్గించడానికి, గ్రాఫానా అనే ఒక సాధనాన్ని ఉపయోగించి ఈ దశలన్నింటినీ నిర్వహించడం మంచిది. ఈ రీసెర్చ్ విధానం వెర్షన్ 6 నుండి గ్రాఫానాలో అమలు చేయబడిందని గమనించాలి. అందువలన, గ్రాఫానా నుండి నేరుగా ప్రోమేతియస్ డేటాను యాక్సెస్ చేయడం సాధ్యమవుతుంది.

Loki - ప్రోమేతియస్ విధానాన్ని ఉపయోగించి లాగ్ సేకరణ
ఎక్స్‌ప్లోరర్ స్క్రీన్ ప్రోమేతియస్ మరియు లోకి మధ్య విభజించబడింది

ఈ స్క్రీన్ నుండి మీరు స్ప్లిట్ స్క్రీన్ కాన్సెప్ట్‌ని ఉపయోగించి ప్రోమేతియస్ మెట్రిక్‌లకు సంబంధించిన Loki లాగ్‌లను వీక్షించవచ్చు. వెర్షన్ 6.5 నుండి, మీకు ఇష్టమైన పంపిణీ చేయబడిన ట్రేసింగ్ టూల్స్ (జాగర్) లింక్‌లను అనుసరించడానికి Loki లాగ్ ఎంట్రీలలో ట్రేస్ ఐడిని అన్వయించడానికి గ్రాఫానా మిమ్మల్ని అనుమతిస్తుంది.

స్థానిక లోకీ పరీక్ష

Lokiని స్థానికంగా పరీక్షించడానికి సులభమైన మార్గం డాకర్-కంపోజ్‌ని ఉపయోగించడం. డాకర్-కంపోజ్ ఫైల్ Loki రిపోజిటరీలో ఉంది. కింది ఆదేశాన్ని ఉపయోగించి మీరు రిపోజిటరీని పొందవచ్చు git:

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

అప్పుడు మీరు ప్రొడక్షన్ డైరెక్టరీకి వెళ్లాలి:

$ cd production

దీని తర్వాత మీరు డాకర్ చిత్రాల తాజా వెర్షన్‌ను పొందవచ్చు:

$ docker-compose pull

చివరగా, Loki స్టాక్ కింది ఆదేశంతో ప్రారంభించబడింది:

$ docker-compose up

లోకీ ఆర్కిటెక్చర్

లోకీ ఆర్కిటెక్చర్‌తో కూడిన చిన్న రేఖాచిత్రం ఇక్కడ ఉంది:

Loki - ప్రోమేతియస్ విధానాన్ని ఉపయోగించి లాగ్ సేకరణ
లోకి ఆర్కిటెక్చర్ సూత్రాలు

వెబ్ క్లయింట్ సర్వర్‌లో అప్లికేషన్‌లను అమలు చేస్తుంది, ప్రోమ్‌టైల్ లాగ్‌లను సేకరించి వాటిని Lokiకి పంపుతుంది, వెబ్ క్లయింట్ కూడా మెటాడేటాను 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

మేము ఈ క్రింది భాగాలను చూస్తాము:

  • ప్రోమ్‌టైల్: లాగ్‌లను కేంద్రీకరించడానికి బాధ్యత వహించే ఏజెంట్
  • గ్రాఫానా: ఒక ప్రసిద్ధ డాష్‌బోర్డ్ సాధనం
  • లోకి: డేటా సెంట్రలైజేషన్ డెమోన్

క్లాసిక్ ఇన్‌ఫ్రాస్ట్రక్చర్‌లో భాగంగా (ఉదాహరణకు, వర్చువల్ మెషీన్‌ల ఆధారంగా), ప్రతి మెషీన్‌లో ప్రోమ్‌టైల్ ఏజెంట్ తప్పనిసరిగా అమలు చేయబడాలి. గ్రాఫానా మరియు లోకి ఒకే మెషీన్‌లో ఇన్‌స్టాల్ చేయవచ్చు.

కుబెర్నెట్‌లకు విస్తరణ

కుబెర్నెట్స్‌లో Loki భాగాలను ఇన్‌స్టాల్ చేయడం క్రింది విధంగా ఉంటుంది:

  • సర్వర్ క్లస్టర్‌లోని ప్రతి మెషీన్‌పై ప్రోమ్‌టైల్ ఏజెంట్‌ని అమలు చేయడానికి డెమోన్‌సెట్
  • విస్తరణ Loki
  • మరియు చివరిది గ్రాఫానా విస్తరణ.

అదృష్టవశాత్తూ, Loki హెల్మ్ ప్యాకేజీగా అందుబాటులో ఉంది, ఇది అమలు చేయడం సులభం చేస్తుంది.

Heml ద్వారా సంస్థాపన

మీరు ఇప్పటికే Hemlని ఇన్‌స్టాల్ చేసి ఉండాలి. ఇది ప్రాజెక్ట్ యొక్క GitHub రిపోజిటరీ నుండి డౌన్‌లోడ్ చేసుకోవచ్చు. ఇది మీ ఆర్కిటెక్చర్‌కు సంబంధించిన ఆర్కైవ్‌ను అన్‌ప్యాక్ చేయడం ద్వారా మరియు హెల్మ్‌ను జోడించడం ద్వారా ఇన్‌స్టాల్ చేయబడుతుంది $PATH.

గమనిక: హెల్మ్ యొక్క వెర్షన్ 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 ప్రోమ్‌టైల్‌కు బదులుగా లాగ్‌లను సేకరించడానికి ఫ్లూయెంట్-బిన్‌ని ఉపయోగించి డెమోన్‌సెట్‌ని అమలు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది
  • ప్యాకేజీ loki/promtail లాగ్ ఫైల్ సేకరణ ఏజెంట్‌ను కలిగి ఉంది
  • ప్యాకేజీ loki/loki-stack, లోకీని ప్రోమ్‌టైల్‌తో కలిపి వెంటనే అమలు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.

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

గమనిక: మీరు అదే సమయంలో గ్రాఫానాను అమలు చేయాలనుకుంటే, పరామితిని జోడించండి --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

అన్ని పాడ్‌లు నడుస్తున్నాయి. ఇప్పుడు కొన్ని పరీక్షలు చేయాల్సిన సమయం వచ్చింది!

గ్రాఫానాకు కనెక్ట్ అవుతోంది

కుబెర్నెటెస్ కింద ఉన్న గ్రాఫానాకి కనెక్ట్ చేయడానికి, మీరు దాని పాడ్‌కి సొరంగం తెరవాలి. గ్రాఫానా పాడ్ కోసం పోర్ట్ 3000ని తెరవడానికి దిగువ ఆదేశం ఉంది:

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

మరో ముఖ్యమైన విషయం ఏమిటంటే గ్రాఫానా అడ్మినిస్ట్రేటర్ పాస్‌వర్డ్‌ను పునరుద్ధరించాల్సిన అవసరం ఉంది. పాస్వర్డ్ రహస్యంగా ఉంచబడుతుంది loki-grafana రంగంలో .data.admin-user బేస్ 64 ఆకృతిలో.

దీన్ని పునరుద్ధరించడానికి, మీరు కింది ఆదేశాన్ని అమలు చేయాలి:

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

డిఫాల్ట్ అడ్మినిస్ట్రేటర్ ఖాతా (అడ్మిన్)తో కలిపి ఈ పాస్‌వర్డ్‌ని ఉపయోగించండి.

గ్రాఫానాలో లోకీ డేటా మూలాన్ని నిర్వచించడం

అన్నింటిలో మొదటిది, Loki డేటా మూలం సృష్టించబడిందని నిర్ధారించుకోండి (కాన్ఫిగరేషన్/డేటాసోర్స్).
ఇక్కడ ఒక ఉదాహరణ:

Loki - ప్రోమేతియస్ విధానాన్ని ఉపయోగించి లాగ్ సేకరణ
Loki కోసం డేటా సోర్స్‌ని సెటప్ చేయడానికి ఉదాహరణ

"పరీక్ష"పై క్లిక్ చేయడం ద్వారా మీరు Lokiతో కనెక్షన్‌ని తనిఖీ చేయవచ్చు.

లోకి అభ్యర్థనలు చేయడం

ఇప్పుడు గ్రాఫానాకు "అన్వేషించు" విభాగానికి వెళ్లండి. కంటైనర్ల నుండి లాగ్‌లను స్వీకరించినప్పుడు, Loki కుబెర్నెట్స్ నుండి మెటాడేటాను జోడిస్తుంది. అందువలన, నిర్దిష్ట కంటైనర్ యొక్క లాగ్లను వీక్షించడం సాధ్యమవుతుంది.

ఉదాహరణకు, ప్రోమ్‌టైల్ కంటైనర్ లాగ్‌లను ఎంచుకోవడానికి, మీరు ఈ క్రింది ప్రశ్నను ఉపయోగించవచ్చు: {container_name = "promtail"}.
ఇక్కడ కూడా Loki డేటా మూలాన్ని ఎంచుకోవాలని గుర్తుంచుకోండి.

ఈ ప్రశ్న కింది విధంగా కంటైనర్ కార్యాచరణను అందిస్తుంది:

Loki - ప్రోమేతియస్ విధానాన్ని ఉపయోగించి లాగ్ సేకరణ
గ్రాఫానాలో ప్రశ్న ఫలితం

డాష్‌బోర్డ్‌కి జోడించండి

గ్రాఫానా 6.4తో ప్రారంభించి, మీరు లాగ్ సమాచారాన్ని నేరుగా డాష్‌బోర్డ్‌లో ఉంచవచ్చు. దీని తర్వాత, వినియోగదారు తన సైట్‌లోని అభ్యర్థనల సంఖ్య మరియు అప్లికేషన్ ట్రేస్‌ల మధ్య త్వరగా మారగలరు.

ఈ పరస్పర చర్యను అమలు చేసే డ్యాష్‌బోర్డ్ యొక్క ఉదాహరణ క్రింద ఉంది:

Loki - ప్రోమేతియస్ విధానాన్ని ఉపయోగించి లాగ్ సేకరణ
ప్రోమేతియస్ కొలమానాలు మరియు Loki లాగ్‌లతో నమూనా డాష్‌బోర్డ్

లోకీ భవిష్యత్తు

నేను లోకీని వెర్షన్ 0.1తో మే/జూన్‌లో ఉపయోగించడం ప్రారంభించాను. ఈరోజు వెర్షన్ 1, మరియు 1.1 మరియు 1.2 కూడా ఇప్పటికే విడుదలయ్యాయి.

సంస్కరణ 0.1 తగినంత స్థిరంగా లేదని అంగీకరించాలి. కానీ 0.3 ఇప్పటికే పరిపక్వత యొక్క నిజమైన సంకేతాలను చూపించింది మరియు తదుపరి సంస్కరణలు (0.4, ఆపై 1.0) ఈ అభిప్రాయాన్ని మాత్రమే బలపరిచాయి.

1.0.0 తర్వాత, ఈ అద్భుతమైన సాధనాన్ని ఉపయోగించకుండా ఉండటానికి ఎవరూ ఎటువంటి కారణం చెప్పలేరు.

మరిన్ని మెరుగుదలలు Loki గురించి కాదు, కానీ అద్భుతమైన గ్రాఫానాతో దాని ఏకీకరణ. వాస్తవానికి, గ్రాఫానా 6.4 ఇప్పటికే డాష్‌బోర్డ్‌లతో మంచి ఇంటిగ్రేషన్‌ను కలిగి ఉంది.

ఇటీవల విడుదలైన గ్రాఫానా 6.5, JSON ఆకృతిలో లాగ్ కంటెంట్‌లను స్వయంచాలకంగా గుర్తించడం ద్వారా ఈ ఏకీకరణను మరింత మెరుగుపరుస్తుంది.

దిగువ వీడియో ఈ యంత్రాంగానికి చిన్న ఉదాహరణను చూపుతుంది:

Loki - ప్రోమేతియస్ విధానాన్ని ఉపయోగించి లాగ్ సేకరణ
గ్రాఫానాలో బహిర్గతమైన లోకి తీగలను ఉపయోగించడం

JSON ఫీల్డ్‌లలో ఒకదాన్ని ఉపయోగించడం సాధ్యమవుతుంది, ఉదాహరణకు, దీని కోసం:

  • బాహ్య సాధనానికి లింక్‌లు
  • లాగ్ కంటెంట్‌లను ఫిల్టర్ చేస్తోంది

ఉదాహరణకు, మీరు Zipkin లేదా Jaegerకి వెళ్లడానికి traceIdపై క్లిక్ చేయవచ్చు.

ఎప్పటిలాగే, మేము మీ వ్యాఖ్యల కోసం ఎదురుచూస్తున్నాము మరియు మిమ్మల్ని ఆహ్వానిస్తున్నాము ఓపెన్ వెబ్నార్, మేము 2019లో DevOps పరిశ్రమ ఎలా అభివృద్ధి చెందింది మరియు 2020కి సాధ్యమయ్యే అభివృద్ధి మార్గాల గురించి చర్చిస్తాము.

మూలం: www.habr.com