ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

እኛ Badoo ያለማቋረጥ አዳዲስ ቴክኖሎጂዎችን እየተከታተልን እና በስርዓታችን ውስጥ ለመጠቀም ወይም ላለመጠቀም እንገመግማለን። ከእነዚህ ጥናቶች ውስጥ አንዱን ለማህበረሰቡ ማካፈል እንፈልጋለን። ለሎኪ፣ የሎግ ማሰባሰብ ሥርዓት ተወስኗል።

ሎኪ መዝገቦችን ለማከማቸት እና ለመመልከት መፍትሄ ነው, እና ይህ ቁልል እነሱን ለመተንተን እና ወደ ፕሮሜቲየስ ውሂብ ለመላክ ተለዋዋጭ ስርዓት ያቀርባል. በግንቦት ውስጥ፣ ሌላ ዝማኔ ተለቋል፣ እሱም በፈጣሪዎች በንቃት ያስተዋወቀው። ሎኪ ምን ማድረግ እንደሚችል፣ ምን አይነት እድሎችን እንደሚሰጥ እና ምን ያህል ከ ELK ጋር እንደ አማራጭ መስራት እንደሚችል ፍላጎት ነበረን፣ አሁን የምንጠቀመው ቁልል።

ሎኪ ምንድን ነው?

ግራፋና ሎኪ ለተሟላ የምዝግብ ማስታወሻ ስርዓት የአካል ክፍሎች ስብስብ ነው። ከሌሎች ተመሳሳይ ስርዓቶች በተለየ ሎኪ የምዝግብ ማስታወሻ ሜታዳታ ብቻ - መለያዎችን (ልክ እንደ ፕሮሜቲየስ) እና ምዝግቦቹን ጎን ለጎን ወደ ተለያዩ ቁርጥራጮች በመጠቅለል ላይ የተመሠረተ ነው።

መነሻ ገጽ, የፊልሙ

ከሎኪ ጋር ምን ማድረግ እንደምትችል ከመግባቴ በፊት፣ "ሜታዳታ ብቻ የማውጣት ሀሳብ" ምን ማለት እንደሆነ ግልጽ ማድረግ እፈልጋለሁ። ከ nginx ሎግ የመስመር ምሳሌን በመጠቀም እንደ Elasticsearch ባሉ ባህላዊ መፍትሄዎች ውስጥ የሎኪን አካሄድ እና የመረጃ ጠቋሚ አቀራረብን እናወዳድር፡-

172.19.0.4 - - [01/Jun/2020:12:05:03 +0000] "GET /purchase?user_id=75146478&item_id=34234 HTTP/1.1" 500 8102 "-" "Stub_Bot/3.0" "0.001"

ባህላዊ ስርዓቶች ብዙ ልዩ የተጠቃሚ_መታወቂያ እና የንጥል_መታወቂያ እሴቶች ያሏቸውን መስኮች ጨምሮ መላውን ረድፍ ይተነትኑታል እና ሁሉንም ነገር በትልልቅ ኢንዴክሶች ያከማቹ። የዚህ አቀራረብ ጥቅማጥቅሞች ሁሉም መረጃዎች በመረጃ ጠቋሚ ውስጥ ስላሉ ውስብስብ ጥያቄዎችን በፍጥነት ማካሄድ ይችላሉ. ነገር ግን ለዚህ መክፈል አለብዎት ኢንዴክስ ትልቅ ይሆናል, ይህም ወደ ማህደረ ትውስታ መስፈርቶች ይተረጉመዋል. በውጤቱም, የምዝግብ ማስታወሻዎች ሙሉ-ጽሑፍ መረጃ ጠቋሚ በመጠን ከሎጎቹ ጋር ይመሳሰላል. በእሱ ውስጥ በፍጥነት ለመፈለግ, ጠቋሚው ወደ ማህደረ ትውስታ መጫን አለበት. እና ብዙ ምዝግብ ማስታወሻዎች, መረጃ ጠቋሚው በፍጥነት ይጨምራል እና ብዙ ማህደረ ትውስታን ይጠቀማል.

የሎኪ አቀራረብ ከሕብረቁምፊው ውስጥ አስፈላጊው መረጃ ብቻ እንዲወጣ ይፈልጋል ፣ የእሴቶቹ ብዛት ትንሽ ነው። በዚህ መንገድ ትንሽ ኢንዴክስ እናገኛለን እና ውሂቡን በጊዜ እና በመረጃ ጠቋሚዎች በማጣራት እና በመቀጠል የቀረውን በመደበኛ መግለጫዎች ወይም በንዑስ ሕብረቁምፊ ፍለጋዎች መፈለግ እንችላለን. ሂደቱ በጣም ፈጣን አይመስልም, ነገር ግን ሎኪ ጥያቄውን ወደ ብዙ ክፍሎች ከፍሎ በትይዩ ያስፈጽማል, በአጭር ጊዜ ውስጥ ከፍተኛ መጠን ያለው መረጃን ያዘጋጃል. በውስጣቸው የሻርዶች እና ትይዩ ጥያቄዎች ብዛት ሊዋቀር የሚችል ነው; ስለዚህ በአንድ ጊዜ ሊሰራ የሚችል የውሂብ መጠን የሚወሰነው በተሰጡት ሀብቶች መጠን ላይ ነው።

በትልቅ ፈጣን ኢንዴክስ እና በትንሽ ትይዩ ብሩት ሃይል ኢንዴክስ መካከል ያለው ይህ የንግድ ልውውጥ ሎኪ የስርዓቱን ወጪ እንዲቆጣጠር ያስችለዋል። እንደ ፍላጎቶችዎ በተለዋዋጭ ሊዋቀር እና ሊሰፋ ይችላል።

የሎኪ ቁልል ሶስት አካላትን ያቀፈ ነው፡- ፕሮምቴይል፣ ሎኪ፣ ግራፋና Promtail ምዝግብ ማስታወሻዎችን ይሰበስባል፣ ያስኬዳቸዋል እና ወደ ሎኪ ይልካቸዋል። ሎኪ ይጠብቃቸዋል. እና Grafana ውሂብን ከሎኪ ጠይቆ ማሳየት ይችላል። በአጠቃላይ, Loki ምዝግብ ማስታወሻዎችን ለማከማቸት እና በእነሱ ውስጥ ለመፈለግ ብቻ ጥቅም ላይ ሊውል ይችላል. አጠቃላይ ቁልል የፕሮሜቲየስ መንገድን በመጠቀም ገቢ መረጃዎችን ለመስራት እና ለመተንተን ጥሩ እድሎችን ይሰጣል።
የመጫን ሂደቱ መግለጫ ሊገኝ ይችላል እዚህ.

የምዝግብ ማስታወሻ ፍለጋ

ምዝግብ ማስታወሻዎቹን በልዩ በይነገጽ ውስጥ መፈለግ ይችላሉ Grafana — Explorer. መጠይቆቹ የLogQL ቋንቋን ይጠቀማሉ፣ ይህም ፕሮሜቲየስ ከሚጠቀምበት PromQL ጋር በጣም ተመሳሳይ ነው። በመርህ ደረጃ, እንደ የተከፋፈለ ግሬፕ ተደርጎ ሊወሰድ ይችላል.

የፍለጋ በይነገጽ ይህንን ይመስላል።

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

መጠይቁ ራሱ ሁለት ክፍሎችን ያቀፈ ነው-መራጭ እና ማጣሪያ. መራጭ (መለያዎች) በመረጃ ጠቋሚ (መለያዎች) ለመዝገቦች የተመደቡ ፍለጋ ሲሆን ማጣሪያ ደግሞ በመራጩ የተገለጹትን መዝገቦች የሚያጣራ የፍለጋ ሕብረቁምፊ ወይም regexp ነው። በተሰጠው ምሳሌ ውስጥ: በጥምጥም ቅንፎች - መራጩ, ሁሉም ነገር በኋላ - ማጣሪያው.

{image_name="nginx.promtail.test"} |= "index"

ሎኪ በሚሠራበት መንገድ ምክንያት፣ ያለ መራጭ ጥያቄዎችን ማቅረብ አይችሉም፣ ነገር ግን መለያዎች በዘፈቀደ ሁሉን አቀፍ ሊደረጉ ይችላሉ።

መራጩ በተጠማዘዙ ቅንፎች ውስጥ ያለው የእሴቱ ቁልፍ እሴት ነው። መራጮችን በማጣመር =, != ኦፕሬተሮችን ወይም መደበኛ መግለጫዎችን በመጠቀም የተለያዩ የፍለጋ ሁኔታዎችን መግለጽ ይችላሉ:

{instance=~"kafka-[23]",name!="kafka-dev"} 
// Найдёт логи с лейблом instance, имеющие значение kafka-2, kafka-3, и исключит dev 

ማጣሪያ በመራጩ የተቀበሉትን ሁሉንም መረጃዎች የሚያጣራ ጽሑፍ ወይም regexp ነው።

በመለኪያ ሁነታ ላይ በተቀበለው መረጃ መሰረት የማስታወቂያ-ግራፎችን ማግኘት ይቻላል. ለምሳሌ፣ የኢንዴክስ ሕብረቁምፊን በያዘው ግቤት በ nginx ምዝግብ ማስታወሻዎች ውስጥ የተከሰቱትን ድግግሞሽ ማወቅ ትችላለህ፡-

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

ስለ ባህሪያቱ ሙሉ መግለጫ በሰነዱ ውስጥ ሊገኝ ይችላል LogQL.

የምዝግብ ማስታወሻ መተንተን

ምዝግብ ማስታወሻዎችን ለመሰብሰብ ብዙ መንገዶች አሉ-

  • ምዝግብ ማስታወሻዎችን ለመሰብሰብ የቁልል መደበኛ አካል በፕሮምቴይል እገዛ።
  • በቀጥታ ከዶከር መያዣው በመጠቀም Loki Docker የምዝግብ ማስታወሻ ሾፌር.
  • ወደ Loki ውሂብ መላክ የሚችል Fluentd ወይም Fluent Bit ይጠቀሙ። እንደ ፕሮምቴይል በተለየ መልኩ ለማንኛውም የምዝግብ ማስታወሻ አይነት ዝግጁ የሆኑ ተንታኞች አሏቸው እና ባለብዙ መሾመር ምዝግብ ማስታወሻዎችንም ማስተናገድ ይችላሉ።

አብዛኛውን ጊዜ ፕሮምቴል ለመተንተን ጥቅም ላይ ይውላል። ሶስት ነገሮችን ያደርጋል፡-

  • የውሂብ ምንጮችን ያገኛል.
  • መለያዎችን ከነሱ ጋር ያያይዙ።
  • ውሂብ ወደ Loki ይልካል።

በአሁኑ ጊዜ ፕሮምቴል ከአካባቢያዊ ፋይሎች እና ከስርዓተ ጆርናል የምዝግብ ማስታወሻዎችን ማንበብ ይችላል። ምዝግብ ማስታወሻዎች በሚሰበሰቡበት በእያንዳንዱ ማሽን ላይ መጫን አለበት.

ከ Kubernetes ጋር ውህደት አለ፡ ፕሮምቴይል የክላስተርን ሁኔታ በKubernetes REST ኤፒአይ በኩል በራስ-ሰር ያገኛል እና ምዝግብ ማስታወሻዎችን ከአንድ መስቀለኛ መንገድ፣ አገልግሎት ወይም ፖድ ይሰበስባል፣ ወዲያውኑ ከኩበርኔትስ ሜታዳታ (የፖድ ስም፣ የፋይል ስም፣ ወዘተ) ላይ የተመሰረቱ መለያዎችን ይለጥፋል።

እንዲሁም ፒፔላይን በመጠቀም በምዝግብ ማስታወሻው ላይ ባለው መረጃ ላይ በመመስረት መለያዎችን መስቀል ይችላሉ። Pipeline Promtail አራት ዓይነት ደረጃዎችን ሊያካትት ይችላል. ተጨማሪ ዝርዝሮች - ውስጥ ኦፊሴላዊ ሰነዶች, ወዲያውኑ አንዳንድ ጥቃቅን ነገሮችን አስተውያለሁ.

  1. የመተንተን ደረጃዎች. ይህ የ RegEx እና JSON ደረጃ ነው። በዚህ ደረጃ, ውሂብን ከምዝግብ ማስታወሻዎች ውስጥ ወደ ተጠራው ካርታ እናወጣለን. በቀላሉ የምንፈልጋቸውን መስኮች ወደተወጣው ካርታ በመገልበጥ ወይም በመደበኛ አገላለጾች (RegEx) አማካኝነት ከJSON ማውጣት ትችላላችሁ፣ ስማቸው የተሰየሙ ቡድኖች በተዘጋጀው ካርታ ላይ “ካርታ” ተዘጋጅተዋል። የተቀነጨበ ካርታ የቁልፍ-እሴት ማከማቻ ነው፣ቁልፉ የመስክ ስም እና እሴቱ ከሎግዎች ነው።
  2. ደረጃዎችን መለወጥ. ይህ ደረጃ ሁለት አማራጮች አሉት: ትራንስፎርሜሽን, የትራንስፎርሜሽን ደንቦችን የምናስቀምጥበት, እና ምንጭ - ከተገኘው ካርታ ለመለወጥ የመረጃ ምንጭ. በተወጣው ካርታ ውስጥ እንደዚህ ያለ መስክ ከሌለ, ከዚያም ይፈጠራል. ስለዚህ, በተወጣው ካርታ ላይ ያልተመሠረቱ መለያዎችን መፍጠር ይቻላል. በዚህ ደረጃ፣ በተወጣው ካርታ ውስጥ ያለውን መረጃ በትክክል ኃይለኛ በመጠቀም ማቀናበር እንችላለን የጎላንግ አብነት. በተጨማሪም፣ በመተንተን ወቅት የወጣው ካርታ ሙሉ በሙሉ እንደተጫነ ማስታወስ አለብን፣ ይህም ለምሳሌ በውስጡ ያለውን ዋጋ ለመፈተሽ ያስችለዋል፡- “{{if .tag}tag value exists{end}}»። አብነት ሁኔታዎችን፣ ዑደቶችን እና አንዳንድ የሕብረቁምፊ ተግባራትን እንደ መተካት እና መከርከም ይደግፋል።
  3. የድርጊት ደረጃዎች. በዚህ ደረጃ ፣ ከተመረተው ጋር አንድ ነገር ማድረግ ይችላሉ-
    • ከተገኘው ውሂብ ላይ መለያ ይፍጠሩ፣ እሱም በሎኪ ይጠቁማል።
    • ከምዝግብ ማስታወሻው ላይ የክስተቱን ጊዜ ይለውጡ ወይም ያዘጋጁ።
    • ወደ Loki የሚሄደውን ውሂብ (የመዝገብ ጽሑፍ) ይቀይሩ.
    • መለኪያዎችን ይፍጠሩ።
  4. የማጣሪያ ደረጃዎች. የግጥሚያው ደረጃ፣ የማያስፈልጉንን መዝገቦች ለ/dev/ null የምንልክበት፣ ወይም ለቀጣይ ሂደት የምንልክበት።

ተራ የ nginx ሎግዎችን የማስኬድ ምሳሌን በመጠቀም፣ Promtailን በመጠቀም እንዴት ምዝግብ ማስታወሻዎችን መተንተን እንደሚችሉ አሳይሻለሁ።

ለፈተናው፣ የተሻሻለው nginx image jwilder/nginx-proxy:alpine as nginx-proxy እና እራሱን በኤችቲቲፒ ሊጠይቅ የሚችል ትንሽ ዴሞን እንውሰድ። ዴሞን የተለያዩ የኤችቲቲፒ ሁኔታዎች እና የተለያዩ መዘግየቶች የተለያየ መጠን ያላቸውን ምላሾች ሊሰጥባቸው የሚችሉ በርካታ የመጨረሻ ነጥቦች አሉት።

በመንገዱ /var/lib/docker/containers/ ላይ ሊገኙ የሚችሉ ምዝግቦችን ከዶከር ኮንቴይነሮች እንሰበስባለን / -json.log

በ docker-compose.yml ውስጥ Promtail አዘጋጀን እና ወደ ውቅሩ የሚወስደውን መንገድ እንገልፃለን፡-

promtail:
  image: grafana/promtail:1.4.1
 // ...
 volumes:
   - /var/lib/docker/containers:/var/lib/docker/containers:ro
   - promtail-data:/var/lib/promtail/positions
   - ${PWD}/promtail/docker.yml:/etc/promtail/promtail.yml
 command:
   - '-config.file=/etc/promtail/promtail.yml'
 // ...

ወደ ምዝግብ ማስታወሻዎች የሚወስደውን መንገድ ወደ promtail.yml ያክሉ (በማዋቀሩ ውስጥ "ዶከር" በአንድ መስመር ውስጥ ተመሳሳይ የሚያደርግ አማራጭ አለ ነገር ግን በጣም ግልጽ አይሆንም)

scrape_configs:
 - job_name: containers

   static_configs:
       labels:
         job: containerlogs
         __path__: /var/lib/docker/containers/*/*log  # for linux only

ይህ ውቅር ሲነቃ ሎኪ ከሁሉም ኮንቴይነሮች ምዝግብ ማስታወሻዎችን ይቀበላል። ይህንን ለማስቀረት የሙከራ nginx ቅንብሮችን በ docker-compose.yml ውስጥ እንለውጣለን - በመለያ መስኩ ላይ መግባትን ይጨምሩ

proxy:
 image: nginx.test.v3
//…
 logging:
   driver: "json-file"
   options:
     tag: "{{.ImageName}}|{{.Name}}"

promtail.yml ያርትዑ እና Pipelineን ያዋቅሩ። የምዝግብ ማስታወሻዎቹ እንደሚከተለው ናቸው.

{"log":"u001b[0;33;1mnginx.1    | u001b[0mnginx.test 172.28.0.3 - - [13/Jun/2020:23:25:50 +0000] "GET /api/index HTTP/1.1" 200 0 "-" "Stub_Bot/0.1" "0.096"n","stream":"stdout","attrs":{"tag":"nginx.promtail.test|proxy.prober"},"time":"2020-06-13T23:25:50.66740443Z"}
{"log":"u001b[0;33;1mnginx.1    | u001b[0mnginx.test 172.28.0.3 - - [13/Jun/2020:23:25:50 +0000] "GET /200 HTTP/1.1" 200 0 "-" "Stub_Bot/0.1" "0.000"n","stream":"stdout","attrs":{"tag":"nginx.promtail.test|proxy.prober"},"time":"2020-06-13T23:25:50.702925272Z"}

የቧንቧ መስመር ደረጃዎች;

 - json:
     expressions:
       stream: stream
       attrs: attrs
       tag: attrs.tag

ዥረቱን, attrs, attrs.tag መስኮችን (ካለ) ከሚመጣው JSON አውጥተን ወደተወጣው ካርታ እናስገባቸዋለን።

 - regex:
     expression: ^(?P<image_name>([^|]+))|(?P<container_name>([^|]+))$
     source: "tag"

በተወጣው ካርታ ውስጥ የመለያ መስኩን ማስቀመጥ ከተቻለ ሬጅክስክስን በመጠቀም የምስሉን እና የእቃውን ስም እናወጣለን ።

 - labels:
     image_name:
     container_name:

መለያዎችን እንመድባለን. የምስሉ_ስም እና የመያዣ_ስም ቁልፎቹ በተወጣው መረጃ ውስጥ ከተገኙ እሴቶቻቸው ለተገቢው መለያዎች ይመደባሉ ።

 - match:
     selector: '{job="docker",container_name="",image_name=""}'
     action: drop

የምስል_ስም እና የመያዣ_ስም ስብስብ የሌላቸውን ሁሉንም ምዝግብ ማስታወሻዎች እናስወግዳለን።

  - match:
     selector: '{image_name="nginx.promtail.test"}'
     stages:
       - json:
           expressions:
             row: log

የምስሉ_ስማቸው ከnginx.promtail.test ጋር እኩል ለሆኑ ሎግዎች ሁሉ የምዝግብ ማስታወሻ መስኩን ከምንጩ ምዝግብ ማስታወሻ አውጥተን በተወጣው ካርታ ውስጥ በረድፍ ቁልፉ ውስጥ እናስቀምጣለን።

  - regex:
         # suppress forego colors
         expression: .+nginx.+|.+[0m(?P<virtual_host>[a-z_.-]+) +(?P<nginxlog>.+)
         source: logrow

የግቤት ሕብረቁምፊውን በመደበኛ መግለጫዎች እናጸዳለን እና የ nginx ምናባዊ አስተናጋጅ እና የ nginx ሎግ መስመርን እናወጣለን።

     - regex:
         source: nginxlog
         expression: ^(?P<ip>[w.]+) - (?P<user>[^ ]*) [(?P<timestamp>[^ ]+).*] "(?P<method>[^ ]*) (?P<request_url>[^ ]*) (?P<request_http_protocol>[^ ]*)" (?P<status>[d]+) (?P<bytes_out>[d]+) "(?P<http_referer>[^"]*)" "(?P<user_agent>[^"]*)"( "(?P<response_time>[d.]+)")?

በመደበኛ አገላለጾች የ nginx ሎግ ን ይንኩ።

    - regex:
           source: request_url
           expression: ^.+.(?P<static_type>jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$
     - regex:
           source: request_url
           expression: ^/photo/(?P<photo>[^/?.]+).*$
       - regex:
           source: request_url
           expression: ^/api/(?P<api_request>[^/?.]+).*$

ጥያቄ_ዩአርኤልን ተንትን። በ regexp እገዛ የጥያቄውን ዓላማ እንወስናለን፡ ወደ ስታቲስቲክስ፣ ወደ ፎቶዎች፣ ወደ ኤፒአይ እና በተወጣው ካርታ ውስጥ ያለውን ተዛማጅ ቁልፍ እናዘጋጃለን።

       - template:
           source: request_type
           template: "{{if .photo}}photo{{else if .static_type}}static{{else if .api_request}}api{{else}}other{{end}}"

ሁኔታዊ ኦፕሬተሮችን በአብነት ውስጥ በመጠቀም በተወጣው ካርታ ውስጥ የተጫኑትን መስኮች እንፈትሻለን እና ለጥያቄው ዓይነት መስክ አስፈላጊዎቹን እሴቶች እናዘጋጃለን-ፎቶ ፣ስታቲክ ፣ኤፒአይ። ካልተሳካ ሌላ ይመድቡ። አሁን request_type የጥያቄ አይነት ይዟል።

       - labels:
           api_request:
           virtual_host:
           request_type:
           status:

መለያዎቹን api_request፣ virtual_host፣ request_type እና status (HTTP status) ያዘጋጀነው በወጣው ካርታ ላይ ባስቀመጥነው መሰረት ነው።

       - output:
           source: nginx_log_row

ውፅኢት ቀይር። አሁን የጸዳው nginx ሎግ ከተወጣው ካርታ ወደ ሎኪ ይሄዳል።

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

ከላይ ያለውን ውቅረት ካከናወኑ በኋላ እያንዳንዱ ግቤት በምዝግብ ማስታወሻው ላይ ባለው መረጃ ላይ ተመስርቷል ።

ብዙ ቁጥር ያላቸውን እሴቶች (ካርዲናዊነት) ያላቸውን መለያዎች ማውጣት ሎኪን በከፍተኛ ሁኔታ ሊያዘገየው እንደሚችል ያስታውሱ። ማለትም ፣ በመረጃ ጠቋሚው ውስጥ ማስገባት የለብዎትም ፣ ለምሳሌ ፣ user_id። በጽሁፉ ውስጥ ስለዚህ ጉዳይ የበለጠ ያንብቡበሎኪ ውስጥ ያሉ መለያዎች እንዴት የምዝግብ ማስታወሻ ጥያቄዎችን ፈጣን እና ቀላል እንደሚያደርጋቸው". ይህ ማለት ግን ያለ ኢንዴክሶች በተጠቃሚ_መፈለግ አይችሉም ማለት አይደለም። ሲፈልጉ ማጣሪያዎችን መጠቀም አስፈላጊ ነው (በመረጃው መሰረት "ያዝ"), እና እዚህ ያለው ኢንዴክስ እንደ ዥረት መለያ ሆኖ ይሠራል.

የምዝግብ ማስታወሻ እይታ

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

Loki LogQLን በመጠቀም ለግራፋና ገበታዎች እንደ የውሂብ ምንጭ ሆኖ መስራት ይችላል። የሚከተሉት ባህሪያት ይደገፋሉ:

  • መጠን - በሴኮንድ የመመዝገቢያ ብዛት;
  • በጊዜ መቁጠር - በተሰጠው ክልል ውስጥ ያሉ መዝገቦች ብዛት.

እንዲሁም የማዋሃድ ተግባራት Sum, Avg እና ሌሎችም አሉ. በጣም ውስብስብ ግራፎችን መገንባት ይችላሉ ፣ ለምሳሌ ፣ የኤችቲቲፒ ስህተቶች ብዛት ግራፍ።

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

የሎኪ ነባሪ የውሂብ ምንጭ ከPrometheus የውሂብ ምንጭ ትንሽ ያነሰ ነው (ለምሳሌ አፈ ታሪክ መቀየር አትችልም)፣ ነገር ግን ሎኪ እንደ ፕሮሜቴየስ አይነት ምንጭ ሊገናኝ ይችላል። ይህ በሰነድ የተደገፈ ባህሪ ስለመሆኑ እርግጠኛ አይደለሁም፣ ነገር ግን በገንቢዎቹ ምላሽ በመመዘን “ሎኪን እንደ Prometheus የውሂብ ምንጭ እንዴት ማዋቀር ይቻላል? · እትም # 1222 · grafana/loki”፣ ለምሳሌ፣ ፍፁም ህጋዊ ነው እና ሎኪ ከPromQL ጋር ሙሉ በሙሉ ተኳሃኝ ነው።

ሎኪን እንደ የውሂብ ምንጭ ከፕሮሜቲየስ አይነት ያክሉ እና ዩአርኤል /lokiን ይጨምሩ፡

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

እና ከPrometheus መለኪያዎች ጋር እየሰራን ይመስል ግራፎችን መስራት ይችላሉ፡

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

በተግባራዊነት ላይ ያለው ልዩነት ጊዜያዊ ነው ብዬ አስባለሁ እና ገንቢዎቹ ወደፊት ያስተካክላሉ.

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

መለኪያዎች

ሎኪ የቁጥር መለኪያዎችን ከምዝግብ ማስታወሻዎች ለማውጣት እና ወደ ፕሮሜቴየስ የመላክ ችሎታን ይሰጣል። ለምሳሌ፣ የ nginx ሎግ በምላሹ የባይቶች ብዛት ይይዛል፣ እና እንዲሁም በተወሰነ ደረጃ መደበኛ የምዝግብ ማስታወሻ ቅርጸት ለውጥ ፣ ምላሽ ለመስጠት የወሰደበት ጊዜ በሰከንዶች ውስጥ። ይህ ውሂብ ወደ Prometheus ሊወጣ እና ሊላክ ይችላል።

ወደ promtail.yml ሌላ ክፍል አክል፡

- match:
   selector: '{request_type="api"}'
   stages:
     - metrics:
         http_nginx_response_time:
           type: Histogram
           description: "response time ms"
           source: response_time
           config:
             buckets: [0.010,0.050,0.100,0.200,0.500,1.0]
- match:
   selector: '{request_type=~"static|photo"}'
   stages:
     - metrics:
         http_nginx_response_bytes_sum:
           type: Counter
           description: "response bytes sum"
           source: bytes_out
           config:
             action: add
         http_nginx_response_bytes_count:
           type: Counter
           description: "response bytes count"
           source: bytes_out
           config:
             action: inc

አማራጩ ከተወጣው ካርታ ላይ ባለው መረጃ ላይ በመመስረት መለኪያዎችን እንዲገልጹ እና እንዲያዘምኑ ያስችልዎታል። እነዚህ መለኪያዎች ወደ ሎኪ አልተላኩም - በፕሮምቴል/ሜትሪክስ መጨረሻ ነጥብ ላይ ይታያሉ። ፕሮሜቲየስ ከዚህ ደረጃ መረጃን ለመቀበል መዋቀር አለበት። ከላይ ባለው ምሳሌ ለጥያቄ_type = "api" ሂስቶግራም መለኪያ እንሰበስባለን:: በዚህ አይነት መለኪያዎች ፐርሰንትሎችን ለማግኘት ምቹ ነው. ለስታቲስቲክስ እና ለፎቶዎች፣ አማካዩን ለማስላት ባይት የተቀበልንበትን የረድፎች ድምር እና የረድፎች ብዛት እንሰበስባለን።

ስለ መለኪያዎች የበለጠ ያንብቡ እዚህ.

በፕሮምቴል ላይ ወደብ ይክፈቱ፡-

promtail:
     image: grafana/promtail:1.4.1
     container_name: monitoring.promtail
     expose:
       - 9080
     ports:
       - "9080:9080"

የ promtail_custom ቅድመ ቅጥያ ያለው ሜትሪክስ መታየቱን እናረጋግጣለን።

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

ፕሮሜቲየስን በማዘጋጀት ላይ. የስራ ማስተዋወቂያ አክል፡

- job_name: 'promtail'
 scrape_interval: 10s
 static_configs:
   - targets: ['promtail:9080']

እና ግራፍ ይሳሉ:

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

በዚህ መንገድ ለምሳሌ አራቱን በጣም ቀርፋፋ መጠይቆችን ማወቅ ይችላሉ። ለእነዚህ መለኪያዎች ክትትልን ማዋቀርም ይችላሉ።

ማመጣጠን

ሎኪ በሁለቱም በነጠላ ሁለትዮሽ ሁነታ እና በሸርተድ (አግድም-ሊሰፋ የሚችል ሁነታ) ሊሆን ይችላል። በሁለተኛው ጉዳይ ላይ, መረጃን ወደ ደመናው ማስቀመጥ ይችላል, እና ቁርጥራጮቹ እና ኢንዴክስ ለየብቻ ይቀመጣሉ. በስሪት 1.5 ውስጥ በአንድ ቦታ ላይ የማከማቸት ችሎታ ተተግብሯል, ነገር ግን በምርት ውስጥ ለመጠቀም ገና አልተመከረም.

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

ቁርጥራጮች በS3-ተኳሃኝ ማከማቻ ውስጥ ሊቀመጡ ይችላሉ፣ ኢንዴክሶችን ለማከማቸት፣ በአግድም ሊለወጡ የሚችሉ የውሂብ ጎታዎችን ይጠቀሙ፡ ካሳንድራ፣ ቢግ ታርብል ወይም ዳይናሞዲቢ። ሌሎች የሎኪ ክፍሎች - አከፋፋዮች (ለመጻፍ) እና Querier (ለመጠይቆች) - አገር አልባ ናቸው እና እንዲሁም በአግድም የሚመዘኑ ናቸው።

በዴቭኦፕስ ዴይስ ቫንኮቨር 2019 ኮንፈረንስ ላይ ከተሳታፊዎቹ አንዱ Callum Styan ከሎኪ ጋር ፕሮጄክቱ ከጠቅላላው መጠን ከ 1% ያነሰ መረጃ ጠቋሚ ያለው ፔታባይት ምዝግብ ማስታወሻ እንዳለው አስታውቋል።ሎኪ መለኪያዎችን እና ምዝግብ ማስታወሻዎችን እንዴት እንደሚዛመድ — እና ገንዘብ ይቆጥብልዎታል".

የሎኪ እና ኤልኬ ማነፃፀር

የመረጃ ጠቋሚ መጠን

የተገኘውን የመረጃ ጠቋሚ መጠን ለመፈተሽ ከላይ ያለው ፓይላይን ከተዋቀረበት የ nginx ኮንቴይነር የምዝግብ ማስታወሻዎችን ወሰድኩ። የምዝግብ ማስታወሻው 406 መስመሮች በድምሩ 624 ሜባ መጠን ይዟል። ምዝግብ ማስታወሻዎች በአንድ ሰዓት ውስጥ ተፈጥረዋል, በግምት 109 ሪከርዶች በሰከንድ.

ከመዝገቡ ውስጥ የሁለት መስመሮች ምሳሌ፡-

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

በELK ሲጠቆም፣ ይህ 30,3 ሜባ መረጃ ጠቋሚ ሰጠ፡-

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

በሎኪ ሁኔታ፣ ይህ ወደ 128 ኪባ ኢንዴክስ እና ወደ 3,8 ሜባ ያህል መረጃ በቡች ሰጠ። ምዝግብ ማስታወሻው ሰው ሰራሽ በሆነ መንገድ የተፈጠረ እና ብዙ አይነት መረጃዎችን ያልያዘ መሆኑ ልብ ሊባል ይገባል። በዋናው የዶከር JSON መዝገብ ላይ ያለው ቀላል gzip ከውሂብ ጋር 95,4% ጨምሯል፣ እና የጸዳው nginx ሎግ ብቻ ወደ ሎኪ እንደተላከ ሲታሰብ፣ ወደ 4 ሜባ መጨመሪያው መረዳት የሚቻል ነው። ለሎኪ መለያዎች አጠቃላይ የልዩ ዋጋዎች ብዛት 35 ነበር ፣ ይህም የመረጃ ጠቋሚውን አነስተኛ መጠን ያብራራል። ለኤልኬ፣ ምዝግብ ማስታወሻው እንዲሁ ጸድቷል። ስለዚህም ሎኪ ዋናውን መረጃ በ96%፣ እና ELK በ70% ጨመቀ።

የማህደረ ትውስታ ፍጆታ

ከሎኪ ምዝግብ ማስታወሻዎችን መሰብሰብ

ሙሉውን የፕሮሜቲየስ እና የኤልኬን ቁልል ካነፃፅር ሎኪ ብዙ ጊዜ "ይበላል"። የ Go አገልግሎት የሚፈጀው ከጃቫ አገልግሎት ያነሰ እንደሆነ ግልፅ ነው ፣ እና የ Heap Elasticsearch JVM መጠን እና ለሎኪ የተመደበው ማህደረ ትውስታ ማነፃፀር ትክክል አይደለም ፣ ግን ሎኪ በጣም ያነሰ ማህደረ ትውስታን እንደሚጠቀም ልብ ሊባል ይገባል። የሲፒዩ ጥቅሙ ያን ያህል ግልጽ አይደለም፣ ግን ደግሞ አለ።

ፍጥነት

Loki በፍጥነት "ይበላል" ምዝግብ ማስታወሻዎች. ፍጥነቱ በብዙ ነገሮች ላይ የተመሰረተ ነው - ምን ዓይነት ምዝግቦች, ምን ያህል ውስብስብ እንደምናደርጋቸው, አውታረ መረብ, ዲስክ, ወዘተ - ግን በእርግጠኝነት ከ ELK (በእኔ ሙከራ - ሁለት ጊዜ ያህል) ከፍ ያለ ነው. ይህ የሚገለፀው ሎኪ መረጃን ወደ መረጃ ጠቋሚው ውስጥ ስለሚያስቀምጠው እና በዚህ መሠረት በመረጃ ጠቋሚ ላይ ያነሰ ጊዜን ስለሚያጠፋ ነው። በዚህ ሁኔታ ሁኔታው ​​​​ከፍለጋው ፍጥነት ጋር ተቀይሯል-ሎኪ ከጥቂት ጊጋባይት በላይ የሆነ መረጃን በከፍተኛ ሁኔታ ይቀንሳል, ለ ELK ግን የፍለጋ ፍጥነቱ በመረጃው መጠን ላይ የተመሰረተ አይደለም.

የምዝግብ ማስታወሻ ፍለጋ

ሎኪ በሎግ ፍለጋ ችሎታ ከኤልኬ በእጅጉ ያነሰ ነው። ከመደበኛ አገላለጾች ጋር ​​መግጠም ጠንካራ ነገር ነው፣ ነገር ግን ከአዋቂዎች የውሂብ ጎታ ያነሰ ነው። የክልሎች መጠይቆች እጥረት፣ በመሰየሚያዎች ብቻ ማጠቃለል፣ ያለ መለያዎች መፈለግ አለመቻል - ይህ ሁሉ በሎኪ ላይ ፍላጎት ያለው መረጃ በመፈለግ ላይ ይገድበናል። ይህ ሎኪን በመጠቀም ምንም ነገር ሊገኝ እንደማይችል አያመለክትም, ነገር ግን ከመዝገቦች ጋር የሚሰራውን ፍሰት ይገልፃል, በመጀመሪያ በፕሮሜቲየስ ገበታዎች ላይ ችግር ሲያገኙ እና ከዚያም እነዚህን መለያዎች በመጠቀም በምዝግብ ማስታወሻዎች ውስጥ ምን እንደተፈጠረ ይፈልጉ.

በይነገጽ

በመጀመሪያ፣ ቆንጆ ነው (ይቅርታ፣ መቃወም አልቻልኩም)። ግራፋና ጥሩ የሚመስል በይነገጽ አለው፣ ግን ኪባና የበለጠ የሚሰራ ነው።

የሎኪ ጥቅሞች እና ጉዳቶች

ከፕላስዎቹ ውስጥ, ሎኪ ከፕሮሜቲየስ ጋር እንደሚዋሃድ ልብ ሊባል ይችላል, በቅደም ተከተል, መለኪያዎችን እናገኛለን እና ከሳጥኑ ውስጥ ማስጠንቀቅ. ምዝግብ ማስታወሻዎችን ለመሰብሰብ እና በ Kubernetes Pods ለማከማቸት አመቺ ነው, ምክንያቱም ከፕሮሜቴየስ የተወረሰ የአገልግሎት ግኝት ስላለው እና መለያዎችን በራስ-ሰር በማያያዝ.

ከመቀነሱ - ደካማ ሰነዶች. አንዳንድ ነገሮች፣ እንደ የፕሮምቴይል ባህሪያት እና ችሎታዎች፣ ኮዱን በማጥናት ሂደት ውስጥ ብቻ፣ የክፍት ምንጭን ጥቅም አገኘሁ። ሌላው ጉዳት ደካማ የመተንተን ችሎታዎች ነው. ለምሳሌ፣ ሎኪ ባለብዙ መስመር ምዝግብ ማስታወሻዎችን መተንተን አይችልም። እንዲሁም ጉዳቶቹ ሎኪ በአንጻራዊ ወጣት ቴክኖሎጂ የመሆኑን እውነታ ያጠቃልላል (የተለቀቀው 1.0 በኖቬምበር 2019 ነበር)።

መደምደሚያ

ሎኪ ለትንሽ እና መካከለኛ ፕሮጀክቶች ተስማሚ የሆነ 100% አስደሳች ቴክኖሎጂ ነው, ይህም ብዙ የሎግ ማሰባሰብ, የምዝግብ ማስታወሻ ፍለጋ, የክትትል እና የምዝግብ ማስታወሻዎች ትንተና ችግሮችን ለመፍታት ያስችላል.

ሎኪን በባዶ አንጠቀምም ምክንያቱም ለእኛ የሚስማማን እና በተለያዩ ብጁ መፍትሄዎች የተሞላ የ ELK ቁልል ስላለን ለዓመታት። ለእኛ, ማሰናከያው በሎግ ውስጥ መፈለግ ነው. በቀን ወደ 100 ጂቢ የምዝግብ ማስታወሻዎች, ሁሉንም ነገር እና ትንሽ ተጨማሪ ለማግኘት እና በፍጥነት ለመስራት አስፈላጊ ነው. ለቻርት እና ለክትትል፣ ከፍላጎታችን ጋር የተጣጣሙ እና እርስ በርስ የተዋሃዱ ሌሎች መፍትሄዎችን እንጠቀማለን። የሎኪ ቁልል ተጨባጭ ጥቅሞች አሉት፣ ነገር ግን ካለን ነገር በላይ አይሰጠንም፣ እና ጥቅሙ በትክክል ከስደት ዋጋ አይበልጥም።

እና ምንም እንኳን ከምርምር በኋላ ሎኪን መጠቀም እንደማንችል ግልጽ ቢሆንም, ይህ ልጥፍ ለመምረጥ ይረዳዎታል ብለን ተስፋ እናደርጋለን.

በአንቀጹ ውስጥ ጥቅም ላይ የዋለው ኮድ ያለው ማከማቻው ይገኛል። እዚህ.

ምንጭ: hab.com

አስተያየት ያክሉ