Pagkolekta og mga troso gikan sa Loki

Pagkolekta og mga troso gikan sa Loki

Sa Badoo, kanunay namong gimonitor ang mga bag-ong teknolohiya ug gisusi kung angayan ba kini gamiton sa among sistema. Gusto namon nga ipaambit ang usa niini nga mga pagtuon sa komunidad. Gipahinungod kini sa Loki, usa ka sistema sa paghugpong sa log.

Ang Loki usa ka solusyon alang sa pagtipig ug pagtan-aw sa mga troso, ug kini nga stack naghatag usab usa ka flexible nga sistema alang sa pag-analisar niini ug pagpadala data sa Prometheus. Niadtong Mayo, laing update ang gipagawas, nga aktibong gipasiugdahan sa mga tiglalang. Interesado kami kung unsa ang mahimo ni Loki, unsa nga mga kapabilidad nga gihatag niini, ug kung unsa ang gidak-on nga mahimo kini nga alternatibo sa ELK, ang stack nga among gigamit karon.

Unsa ni Loki

Ang Grafana Loki usa ka hugpong sa mga sangkap alang sa usa ka kompleto nga sistema alang sa pagtrabaho sa mga troso. Dili sama sa ubang susama nga mga sistema, ang Loki gibase sa ideya sa pag-index lamang sa log metadata - mga label (sama sa Prometheus), ug pag-compress sa mga troso sa ilang kaugalingon ngadto sa lain nga mga tipak.

Panid sa panid, GitHub

Sa wala pa kami moadto kung unsa ang mahimo nimo sa Loki, gusto nako nga ipatin-aw kung unsa ang among gipasabut sa "ideya sa pag-index lamang sa metadata." Atong itandi ang Loki nga pamaagi ug ang pamaagi sa pag-index sa tradisyonal nga mga solusyon sama sa Elasticsearch, gamit ang panig-ingnan sa usa ka linya gikan sa nginx log:

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"

Gi-parse sa tradisyonal nga mga sistema ang tibuok row, lakip ang mga field nga adunay daghang talagsaon nga user_id ug item_id values, ug tipigan ang tanan sa dagkong mga index. Ang bentaha sa kini nga pamaagi mao nga dali ka makadagan sa komplikado nga mga pangutana, tungod kay hapit tanan nga datos naa sa indeks. Apan kini moabut sa usa ka gasto tungod kay ang indeks mahimong dako, nga gihubad ngadto sa mga kinahanglanon sa memorya. Ingon nga resulta, ang full-text log index ikatandi sa gidak-on sa mga log mismo. Aron dali nga makapangita niini, ang indeks kinahanglan i-load sa memorya. Ug ang daghang mga troso, mas paspas nga motubo ang index ug mas daghang memorya ang gigamit niini.

Ang pamaagi sa Loki nanginahanglan nga ang kinahanglan nga datos lamang ang makuha gikan sa usa ka hilo, ang gidaghanon sa mga kantidad nga gamay. Niining paagiha makakuha kami usa ka gamay nga indeks ug makapangita sa datos pinaagi sa pagsala niini sa oras ug pinaagi sa gi-index nga mga natad, ug dayon gi-scan ang nahabilin nga adunay regular nga mga ekspresyon o pagpangita sa substring. Ang proseso dili ingon sa labing paspas, apan gibahin ni Loki ang hangyo sa daghang mga bahin ug gipatuman kini nga managsama, pagproseso sa daghang mga datos sa mubo nga panahon. Ang gidaghanon sa mga shards ug parallel nga mga hangyo niini ma-configure; sa ingon, ang gidaghanon sa datos nga mahimong maproseso kada yunit sa panahon nagdepende sa linearly sa gidaghanon sa mga kapanguhaan nga gihatag.

Kini nga trade-off tali sa usa ka dako, paspas nga indeks ug usa ka gamay, parallel brute-force index nagtugot sa Loki sa pagkontrolar sa gasto sa sistema. Mahimo kini nga flexible nga ma-configure ug mapalapad sumala sa mga panginahanglanon.

Ang stack sa Loki naglangkob sa tulo ka mga sangkap: Promtail, Loki, Grafana. Gikolekta sa Promtail ang mga troso, giproseso kini ug gipadala kini sa Loki. Gibantayan sila ni Loki. Ug si Grafana makahangyo ug datos gikan kang Loki ug ipakita kini. Sa kinatibuk-an, ang Loki mahimong magamit dili lamang sa pagtipig sa mga troso ug pagpangita pinaagi niini. Ang tibuuk nga stack naghatag daghang mga oportunidad alang sa pagproseso ug pag-analisar sa umaabot nga datos gamit ang Prometheus nga paagi.
Makita ang usa ka paghulagway sa proseso sa pag-instalar dinhi.

Pangitaa pinaagi sa mga troso

Mahimo nimong pangitaon ang mga troso sa usa ka espesyal nga interface sa Grafana - Explorer. Ang mga pangutana naggamit sa LogQL nga pinulongan, nga susama kaayo sa PromQL nga gigamit sa Prometheus. Sa prinsipyo, kini mahimong isipon nga usa ka gipang-apod-apod nga grep.

Ang interface sa pagpangita ingon niini:

Pagkolekta og mga troso gikan sa Loki

Ang hangyo mismo naglangkob sa duha ka bahin: selector ug filter. Ang Selector usa ka pagpangita gamit ang gi-index nga metadata (mga label) nga gi-assign sa mga log, ug ang filter usa ka search string o regexp nga nagsala sa mga rekord nga gihubit sa nagpili. Sa gihatag nga pananglitan: Sa mga kulot nga braces adunay usa ka tigpili, ang tanan pagkahuman usa ka filter.

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

Tungod sa paagi sa pagtrabaho ni Loki, dili ka makahimo og mga pangutana nga walay tigpili, apan ang mga label mahimong himoon nga kinatibuk-an sama sa imong gusto.

Ang usa ka tigpili usa ka hinungdanon nga kantidad nga kantidad sa mga kulot nga braces. Mahimo nimong isagol ang mga tigpili ug ipiho ang lainlaing mga kondisyon sa pagpangita gamit ang mga operator =, != o mga regular nga ekspresyon:

{instance=~"kafka-[23]",name!="kafka-dev"} 
// Найдёт Π»ΠΎΠ³ΠΈ с Π»Π΅ΠΉΠ±Π»ΠΎΠΌ instance, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ kafka-2, kafka-3, ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ dev 

Ang usa ka filter mao ang teksto o regexp nga magsala sa tanang datos nga nadawat sa tigpili.

Posible nga makakuha og ad-hoc graphs base sa nadawat nga datos sa metrics mode. Pananglitan, mahibal-an nimo kung unsa ka sagad ang usa ka entry nga adunay sulud nga indeks sa string nga makita sa nginx logs:

Pagkolekta og mga troso gikan sa Loki

Ang bug-os nga paghulagway sa mga kapabilidad makita sa dokumentasyon LogQL.

Pag-parse sa log

Adunay daghang mga paagi sa pagkolekta sa mga troso:

  • Gigamit ang Promtail, usa ka sukaranan nga sangkap sa stack alang sa pagkolekta sa mga troso.
  • Direkta gikan sa docker container gamit Driver sa Loki Docker Logging.
  • Gamita ang Fluentd o Fluent Bit, nga makapadala ug datos sa Loki. Dili sama sa Promtail, aduna silay andam nga mga parser para sa halos bisan unsang matang sa log ug mahimo usab nga magdumala sa multiline logs.

Kasagaran ang Promtail gigamit alang sa pag-parse. Naghimo kini og tulo ka butang:

  • Pangitag mga tinubdan sa datos.
  • Nagbutang og mga label ngadto kanila.
  • Nagpadala ug data ngadto kang Loki.

Sa pagkakaron ang Promtail makabasa sa mga log gikan sa lokal nga mga file ug gikan sa systemd journal. Kini kinahanglan nga i-install sa matag makina diin ang mga troso gikolekta.

Adunay integrasyon sa Kubernetes: Awtomatiko nga Promtail, pinaagi sa Kubernetes REST API, makaila sa kahimtang sa cluster ug mangolekta og mga log gikan sa usa ka node, serbisyo o pod, mag-post dayon og mga label base sa metadata gikan sa Kubernetes (pod name, file name, etc.) .

Mahimo usab nimo ibitay ang mga label base sa datos gikan sa log gamit ang Pipeline. Ang Pipeline Promtail mahimong naglangkob sa upat ka matang sa mga yugto. Dugang detalye sa opisyal nga dokumentasyon, Mamatikdan dayon nako ang pipila ka mga nuances.

  1. Mga yugto sa pag-parse. Kini ang yugto sa RegEx ug JSON. Niini nga yugto, among gikuha ang datos gikan sa mga troso ngadto sa gitawag nga kinuha nga mapa. Makuha nato gikan sa JSON pinaagi sa pagkopya lang sa mga field nga atong gikinahanglan ngadto sa gikuha nga mapa, o pinaagi sa regular nga mga ekspresyon (RegEx), diin ang ginganlan nga mga grupo "mapa" ngadto sa gikuha nga mapa. Ang Extracted map kay key-value store, diin ang key mao ang ngalan sa field, ug ang value mao ang value niini gikan sa logs.
  2. Pag-usab sa mga yugto. Kini nga yugto adunay duha ka kapilian: pagbag-o, diin among gibutang ang mga lagda sa pagbag-o, ug gigikanan - ang gigikanan sa datos alang sa pagbag-o gikan sa gikuha nga mapa. Kung walay ingon nga field sa gikuha nga mapa, kini pagabuhaton. Niining paagiha posible ang paghimo og mga label nga wala gibase sa nakuha nga mapa. Niini nga yugto mahimo natong manipulahon ang datos sa gikuha nga mapa gamit ang medyo gamhanan Golang Template. Dugang pa, kinahanglan natong hinumdoman nga ang gikuha nga mapa bug-os nga gikarga sa panahon sa pag-parse, nga nagpaposible, pananglitan, sa pagsusi sa bili niini: "{{if .tag}tag value anaa{end}}". Gisuportahan sa template ang mga kondisyon, mga loop, ug pipila ka mga function sa string sama sa Replace ug Trim.
  3. Mga yugto sa aksyon. Niini nga punto mahimo nimo ang usa ka butang sa nakuha nga sulud:
    • Paghimo usa ka label gikan sa nakuha nga datos, nga ma-indeks ni Loki.
    • Usba o itakda ang oras sa panghitabo gikan sa log.
    • Usba ang data (log text) nga moadto sa Loki.
    • Paghimo ug metrics.
  4. Mga yugto sa pagsala. Ang yugto sa duwa, diin mahimo natong ipadala ang mga entries nga dili na nato kinahanglan /dev/null o ipasa kini para sa dugang pagproseso.

Gamit ang usa ka pananglitan sa pagproseso sa mga regular nga nginx log, akong ipakita kung giunsa nimo ma-parse ang mga troso gamit ang Promtail.

Alang sa pagsulay, atong kuhaon isip nginx-proxy ang usa ka giusab nga nginx image jwilder/nginx-proxy:alpine ug usa ka gamay nga daemon nga makapangutana sa kaugalingon pinaagi sa HTTP. Ang daemon adunay daghang mga endpoint, diin makahatag kini og mga tubag sa lain-laing mga gidak-on, uban sa lain-laing mga HTTP status ug uban sa lain-laing mga paglangan.

Mangolekta kami og mga troso gikan sa mga sudlanan sa docker, nga makita sa dalan /var/lib/docker/containers/ / -json.log

Sa docker-compose.yml among gi-configure ang Promtail ug gitino ang dalan sa config:

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'
 // ...

Idugang ang agianan sa mga log sa promtail.yml (adunay kapilian nga "docker" sa config, nga parehas nga butang sa usa ka linya, apan dili kini klaro):

scrape_configs:
 - job_name: containers

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

Kung kini nga pag-configure mahimo, ang mga troso gikan sa tanan nga mga sudlanan ipadala sa Loki. Aron malikayan kini, usbon namo ang mga setting sa test nginx sa docker-compose.yml - pagdugang og logging tag field:

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

Pag-edit sa promtail.yml ug pag-set up sa Pipeline. Ang input naglakip sa mga log sa mosunod nga matang:

{"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"}

Yugto sa pipeline:

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

Gikuha namo ang fields stream, attrs, attrs.tag (kon anaa) gikan sa umaabot nga JSON ug gibutang kini sa gikuha nga mapa.

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

Kung nakahimo kami sa pagbutang sa tag field sa nakuha nga mapa, unya gamit ang regexp among gikuha ang mga ngalan sa imahe ug sudlanan.

 - labels:
     image_name:
     container_name:

Naghatag kami og mga label. Kung ang mga yawe sa image_name ug container_name makit-an sa nakuha nga datos, nan ang ilang mga kantidad itudlo sa katugbang nga mga label.

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

Among gilabay ang tanang mga troso nga walay gibutang nga label nga image_name ug container_name.

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

Para sa tanang log kansang image_name mao ang nginx.promtail.test, kuhaa ang log field gikan sa source log ug ibutang kini sa gikuha nga mapa gamit ang row key.

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

Atong gilimpyohan ang input line nga adunay regular nga mga ekspresyon ug gibira ang nginx virtual host ug ang nginx log line.

     - 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.]+)")?

Parse nginx log gamit ang regular nga mga ekspresyon.

    - 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>[^/?.]+).*$

Atong i-parse ang request_url. Gamit ang regexp atong mahibal-an ang katuyoan sa hangyo: sa static nga datos, sa mga litrato, sa API ug gibutang ang katugbang nga yawe sa nakuha nga mapa.

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

Gamit ang mga conditional operators sa Template, gisusi namo ang mga na-install nga field sa gikuha nga mapa ug gitakda ang gikinahanglang values ​​para sa request_type field: photo, static, API. I-assign ang uban kung kini mapakyas. request_type karon naglangkob sa hangyo matang.

       - labels:
           api_request:
           virtual_host:
           request_type:
           status:

Gibutang namo ang mga label nga api_request, virtual_host, request_type ug status (HTTP status) base sa among nahimo nga gibutang sa gikuha nga mapa.

       - output:
           source: nginx_log_row

Usba ang output. Karon ang nalimpyo nga nginx log gikan sa nakuha nga mapa moadto sa Loki.

Pagkolekta og mga troso gikan sa Loki

Human sa pagpadagan sa config sa ibabaw, imong makita nga ang matag entry gi-assign nga mga label base sa datos gikan sa log.

Usa ka butang nga hinumdoman mao nga ang pagkuha sa mga label nga adunay daghang mga kantidad (cardinality) mahimo’g makapahinay sa Loki. Kana mao, dili nimo ibutang, pananglitan, user_id sa index. Basaha ang dugang bahin niini sa artikulo nga "Giunsa sa mga label sa Loki ang paghimo sa mga pangutana sa log nga mas paspas ug dali" Apan wala kini magpasabot nga dili ka makapangita pinaagi sa user_id nga walay mga indeks. Kinahanglan nga mogamit ka og mga filter kung mangita ("grab" ang data), ug ang indeks dinhi naglihok isip usa ka stream identifier.

Pagtan-aw sa mga log

Pagkolekta og mga troso gikan sa Loki

Ang Loki mahimong molihok isip tinubdan sa datos alang sa mga grapiko sa Grafana gamit ang LogQL. Ang mosunod nga mga bahin gisuportahan:

  • rate β€” gidaghanon sa mga rekord matag segundo;
  • ihap sa paglabay sa panahon β€” ang gidaghanon sa mga rekord sa gitakda nga range.

Adunay usab aggregation function Sum, Avg ug uban pa. Makahimo ka og medyo komplikado nga mga graph, pananglitan usa ka graph sa gidaghanon sa mga sayup sa HTTP:

Pagkolekta og mga troso gikan sa Loki

Ang standard nga tinubdan sa datos nga si Loki medyo gipakunhod sa pagpaandar kumpara sa Prometheus data source (pananglitan, dili nimo mabag-o ang leyenda), apan ang Loki mahimong konektado isip tinubdan sa Prometheus type. Dili ko sigurado kung kini usa ka dokumentado nga pamatasan, apan sa paghukom sa tubag sa mga developer "Giunsa i-configure ang Loki ingon Prometheus datasource? Β· Isyu #1222 Β· grafana/loki”, pananglitan, hingpit nga ligal, ug ang Loki hingpit nga nahiuyon sa PromQL.

Idugang ang Loki isip tinubdan sa datos nga adunay tipo nga Prometheus ug idugang ang URL /loki:

Pagkolekta og mga troso gikan sa Loki

Ug makahimo kami og mga graph, ingon nga nagtrabaho kami sa mga sukatan gikan sa Prometheus:

Pagkolekta og mga troso gikan sa Loki

Sa akong hunahuna nga ang kalainan sa pag-andar temporaryo ug ang mga developer magtul-id niini sa umaabot.

Pagkolekta og mga troso gikan sa Loki

Mga sukatan

Naghatag si Loki og abilidad sa pagkuha sa mga numerical metrics gikan sa mga troso ug ipadala kini sa Prometheus. Pananglitan, ang nginx log naglangkob sa gidaghanon sa mga byte matag tubag, ingon man, uban sa usa ka piho nga pagbag-o sa standard nga format sa log, ang oras sa mga segundo nga gikinahanglan sa pagtubag. Kini nga datos mahimong makuha ug ipadala sa Prometheus.

Pagdugang og laing seksyon sa 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

Gitugotan ka sa kapilian nga ipasabut ug i-update ang mga sukatan base sa datos gikan sa gikuha nga mapa. Kini nga mga sukatan wala ipadala sa Loki - kini makita sa Promtail /metrics endpoint. Ang Prometheus kinahanglan nga ma-configure aron makadawat sa datos nga nadawat sa kini nga yugto. Sa pananglitan sa ibabaw, para sa request_type=β€œapi” nangolekta mi ug histogram metric. Uban niini nga matang sa metrics sayon ​​​​ang pagkuha sa mga porsyento. Alang sa static ug litrato, among gikolekta ang sumada sa mga byte ug ang gidaghanon sa mga laray diin among nadawat ang mga byte aron makalkulo ang kasagaran.

Basaha ang dugang bahin sa mga sukatan dinhi.

Ablihi ang port sa Promtail:

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

Siguruha nga ang mga sukatan nga adunay prefix nga promtail_custom makita:

Pagkolekta og mga troso gikan sa Loki

Pagpahimutang sa Prometheus. Idugang ang job promtail:

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

Ug nagdrowing kami og graph:

Pagkolekta og mga troso gikan sa Loki

Niining paagiha mahibal-an nimo, pananglitan, ang upat nga labing hinay nga mga pangutana. Mahimo ka usab nga mag-set up sa pagmonitor alang niini nga mga sukatan.

Pag-scale

Ang Loki mahimong anaa sa single binary mode o sa sharded mode (horizontally-scalable mode). Sa ikaduha nga kaso, kini makatipig sa datos sa panganod, ug ang mga tipak ug indeks gitipigan nga gilain. Ang Bersyon 1.5 nagpaila sa abilidad sa pagtipig sa usa ka lugar, apan wala pa girekomenda nga gamiton kini sa produksiyon.

Pagkolekta og mga troso gikan sa Loki

Ang mga tipik mahimong tipigan sa S3-compatible storage, ug horizontally scalable databases mahimong gamiton sa pagtipig sa mga index: Cassandra, BigTable o DynamoDB. Ang ubang mga bahin sa Loki - Mga Distributor (para sa pagsulat) ug Querier (para sa mga pangutana) - walay estado ug usab pinahigda ang sukod.

Sa komperensya sa DevOpsDays Vancouver 2019, usa sa mga partisipante nga si Callum Styan nagpahibalo nga kauban si Loki ang iyang proyekto adunay mga petabytes sa mga troso nga adunay indeks nga dili mubu sa 1% sa kinatibuk-ang gidak-on: "Giunsa Pag-ayo ni Loki ang Mga Sukatan ug Mga Log - Ug Makatipig Ka sa Kuwarta".

Pagtandi sa Loki ug ELK

Gidak-on sa indeks

Aron sulayan ang resulta nga gidak-on sa indeks, gikuha nako ang mga troso gikan sa nginx nga sudlanan diin ang Pipeline sa ibabaw gi-configure. Ang log file adunay 406 ka linya nga adunay total volume nga 624 MB. Ang mga log nahimo sulod sa usa ka oras, gibana-bana nga 109 ka mga entry kada segundo.

Pananglitan sa duha ka linya gikan sa log:

Pagkolekta og mga troso gikan sa Loki

Kung gi-index sa ELK, naghatag kini usa ka gidak-on sa indeks nga 30,3 MB:

Pagkolekta og mga troso gikan sa Loki

Sa kaso ni Loki, miresulta kini sa gibana-bana nga 128 KB nga indeks ug gibana-bana nga 3,8 MB nga datos sa mga tipak. Angay nga hinumdoman nga ang log gihimo sa artipisyal nga paagi ug wala’y daghang lainlain nga datos. Ang usa ka yano nga gzip sa orihinal nga Docker JSON log nga adunay data naghatag usa ka compression nga 95,4%, ug gikonsiderar ang kamatuoran nga ang nalimpyo nga nginx log lamang ang gipadala sa Loki mismo, ang compression hangtod sa 4 MB masabtan. Ang kinatibuk-ang gidaghanon sa talagsaon nga mga kantidad alang sa mga label sa Loki mao ang 35, nga nagpatin-aw sa gamay nga gidak-on sa indeks. Alang sa ELK ang log gi-clear usab. Sa ingon, gi-compress ni Loki ang orihinal nga datos sa 96%, ug ELK sa 70%.

Pagkonsumo sa memorya

Pagkolekta og mga troso gikan sa Loki

Kung atong itandi ang tibuok Prometheus ug ELK stack, nan si Loki "mokaon" sa daghang mga higayon nga dili kaayo. Klaro nga ang usa ka serbisyo sa Go mokonsumo og gamay kaysa usa ka serbisyo sa Java, ug ang pagtandi sa gidak-on sa JVM Heap Elasticsearch ug ang gigahin nga panumduman alang sa Loki dili husto, apan bisan pa niana angay nga hinumdoman nga ang Loki naggamit labi ka gamay nga memorya. Ang bentaha sa CPU niini dili kaayo dayag, apan anaa usab kini.

Dali

Si Loki "naglamoy" sa mga troso nga mas paspas. Ang katulin nagdepende sa daghang mga hinungdan - kung unsa nga klase sa mga troso, kung unsa kita ka sopistikado sa pag-parse kanila, network, disk, ug uban pa - apan siguradong mas taas kini kaysa ELK (sa akong pagsulay - mga doble nga mas daghan). Gipatin-aw kini sa kamatuoran nga si Loki nagbutang ug mas gamay nga datos sa indeks ug, sumala niana, naggugol ug gamay nga panahon sa pag-indeks. Sa katulin sa pagpangita, sukwahi ang kahimtang: Ang Loki mamatikdan nga nagpahinay sa datos nga mas dako kaysa daghang gigabytes, samtang ang katulin sa pagpangita sa ELK wala magdepende sa kadako sa datos.

Pangitaa pinaagi sa mga troso

Ang Loki labi ka ubos sa ELK sa mga termino sa mga kapabilidad sa pagpangita sa log. Ang Grep nga adunay regular nga mga ekspresyon gamhanan, apan kini mas ubos sa usa ka hamtong nga database. Ang kakulang sa mga pangutana sa hanay, pagtipon lamang pinaagi sa mga label, ang kawalay katakus sa pagpangita nga walay mga label - kining tanan naglimite kanamo sa pagpangita sa impormasyon nga interesado sa Loki. Wala kini magpasabot nga walay bisan unsa nga makit-an gamit ang Loki, apan kini naghubit sa dagan sa pagtrabaho uban sa mga troso sa diha nga ikaw una nga makakita og problema sa Prometheus nga mga tsart, ug dayon gamita kini nga mga label sa pagpangita kon unsay nahitabo sa mga troso.

interface

Una sa tanan, kini matahum (sorry, dili makasukol). Ang Grafana adunay nindot tan-awon nga interface, apan ang Kibana mas daghan nga bahin nga adunahan.

Mga bentaha ug disbentaha sa Loki

Usa sa mga bentaha mao nga ang Loki nag-uban sa Prometheus, mao nga nakakuha kami mga sukatan ug nagpaalerto sa gawas sa kahon. Kombenyente alang sa pagkolekta sa mga troso ug pagtipig niini gikan sa Kubernetes Pods, tungod kay kini adunay pagdiskobre sa serbisyo nga napanunod gikan sa Prometheus ug awtomatiko nga nag-attach sa mga label.

Ang downside mao ang huyang nga dokumentasyon. Ang pipila ka mga butang, pananglitan, ang mga bahin ug mga kapabilidad sa Promtail, akong nadiskobrehan lamang sa proseso sa pagtuon sa code, maayo na lang kay open-source kini. Ang laing disbentaha mao ang huyang nga mga kapabilidad sa pag-parse. Pananglitan, si Loki dili maka-parse sa multiline logs. Ang laing disbentaha mao nga ang Loki usa ka medyo batan-on nga teknolohiya (pagpagawas sa 1.0 kaniadtong Nobyembre 2019).

konklusyon

Ang Loki usa ka 100% nga makapaikag nga teknolohiya nga angay alang sa gagmay ug medium nga kadako nga mga proyekto, nga gitugotan ka nga masulbad ang daghang mga problema sa paghugpong sa log, pagpangita sa log, pag-monitor ug pagtuki sa log.

Wala kami mogamit sa Loki sa Badoo tungod kay kami adunay usa ka ELK stack nga angay kanamo ug nga napuno sa lainlaing mga naandan nga solusyon sa daghang mga tuig. Alang kanamo, ang babag mao ang pagpangita pinaagi sa mga troso. Uban sa hapit 100 GB nga mga troso matag adlaw, hinungdanon nga makit-an namon ang tanan ug gamay pa ug buhaton kini dayon. Para sa pag-chart ug pag-monitor, naggamit kami og ubang mga solusyon nga gipahaum sa among mga panginahanglan ug gihiusa sa usag usa. Ang stack sa Loki adunay mahikap nga mga benepisyo, apan dili kini maghatag labi pa sa naa na naton, ug ang mga benepisyo niini siguradong dili molapas sa gasto sa paglalin.

Ug bisan kung pagkahuman sa panukiduki nahimo nga klaro nga dili namon magamit ang Loki, nanghinaut kami nga kini nga post makatabang kanimo sa imong pagpili.

Ang repository nga adunay code nga gigamit sa artikulo nahimutang dinhi.

Source: www.habr.com

Idugang sa usa ka comment