Ġbir taz-zkuk minn Loki

Ġbir taz-zkuk minn Loki

F'Badoo, aħna kontinwament nissorveljaw teknoloġiji ġodda u nevalwaw jekk humiex ta' min jużahom fis-sistema tagħna. Nixtiequ naqsmu wieħed minn dawn l-istudji mal-komunità. Hija ddedikata għal Loki, sistema ta' aggregazzjoni ta' zkuk.

Loki huwa soluzzjoni għall-ħażna u l-wiri taz-zkuk, u dan il-munzell jipprovdi wkoll sistema flessibbli biex jiġu analizzati u tibgħat id-dejta lil Prometheus. F'Mejju, ġie rilaxxat aġġornament ieħor, li huwa promoss b'mod attiv mill-ħallieqa. Konna interessati x'jista' jagħmel Loki, liema kapaċitajiet jipprovdi, u sa liema punt jista' jaġixxi bħala alternattiva għal ELK, il-munzell li nużaw issa.

X'inhu Loki

Grafana Loki huwa sett ta 'komponenti għal sistema kompluta ta' ħidma biż-zkuk. B'differenza minn sistemi oħra simili, Loki huwa bbażat fuq l-idea li jiġu indiċjati biss metadata ta 'log - tikketti (l-istess bħal fil-Prometheus), u tikkompressa z-zkuk infushom f'biċċiet separati.

Paġna ewlenija, GitHub

Qabel ma nidħlu f'dak li tista 'tagħmel ma' Loki, irrid niċċara x'nifhmu b' "l-idea li tiġi indiċjata biss metadejta." Ejja nqabblu l-approċċ Loki u l-approċċ għall-indiċjar f'soluzzjonijiet tradizzjonali bħal Elasticsearch, billi tuża l-eżempju ta 'linja mil-log nginx:

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"

Is-sistemi tradizzjonali jeżaminaw ir-ringiela kollha, inklużi oqsma b'numru kbir ta 'valuri uniċi user_id u item_id, u jaħżnu kollox f'indiċi kbar. Il-vantaġġ ta 'dan l-approċċ huwa li tista' tmexxi mistoqsijiet kumplessi malajr, peress li kważi d-dejta kollha tinsab fl-indiċi. Iżda dan jiġi bi spiża li l-indiċi jsir kbir, li jissarraf f'rekwiżiti ta 'memorja. Bħala riżultat, l-indiċi tal-ġurnal tat-test sħiħ huwa komparabbli fid-daqs maż-zkuk infushom. Sabiex tfittex malajr permezz tiegħu, l-indiċi għandu jitgħabba fil-memorja. U iktar ma jkun hemm zkuk, aktar ma jikber malajr l-indiċi u aktar ma jikkonsma memorja.

L-approċċ Loki jeħtieġ li d-dejta meħtieġa biss tiġi estratta minn string, li n-numru ta 'valuri tagħha huwa żgħir. B'dan il-mod niksbu indiċi żgħir u nistgħu nfittxu d-dejta billi niffiltrawha skont il-ħin u b'oqsma indiċjati, u mbagħad niskennjaw il-bqija b'espressjonijiet regolari jew tfittxija substring. Il-proċess ma jidhirx li huwa l-aktar mgħaġġel, iżda Loki jaqsam it-talba f'diversi partijiet u tesegwixxihom b'mod parallel, u jipproċessa ammont kbir ta 'dejta fi żmien qasir. In-numru ta 'shards u talbiet paralleli fihom huwa konfigurabbli; għalhekk, l-ammont ta' data li jista' jiġi pproċessat għal kull unità ta' żmien jiddependi b'mod lineari fuq l-ammont ta' riżorsi pprovduti.

Dan il-kompromess bejn indiċi kbir u veloċi u indiċi ta' forza bruta żgħira parallela jippermetti lil Loki jikkontrolla l-ispiża tas-sistema. Jista 'jiġi kkonfigurat u estiża b'mod flessibbli skont il-ħtiġijiet.

Il-munzell Loki jikkonsisti fi tliet komponenti: Promtail, Loki, Grafana. Promtail jiġbor zkuk, jipproċessahom u jibgħathom lil Loki. Loki jżommhom. U Grafana jista 'jitlob dejta mingħand Loki u juriha. B'mod ġenerali, Loki jista 'jintuża mhux biss għall-ħażna ta' zkuk u tiftix minnhom. Il-munzell kollu jipprovdi opportunitajiet kbar għall-ipproċessar u l-analiżi tad-dejta li tidħol bl-użu tal-mod Prometheus.
Tista 'tinstab deskrizzjoni tal-proċess ta' installazzjoni hawn.

Fittex minn zkuk

Tista' tfittex ir-zkuk f'interface ta' Grafana speċjali - Explorer. Il-mistoqsijiet jużaw il-lingwa LogQL, li hija simili ħafna għall-PromQL użata fi Prometheus. Fil-prinċipju, jista 'jitqies bħala grep distribwit.

L-interface tat-tfittxija tidher bħal din:

Ġbir taz-zkuk minn Loki

It-talba nnifisha tikkonsisti f'żewġ partijiet: selettur u filtru. Selettur huwa tfittxija li juża metadejta indiċjata (tikketti) li huma assenjati għal zkuk, u filtru huwa string ta 'tfittxija jew regexp li jiffiltra r-rekords definiti mis-selettur. Fl-eżempju mogħti: Fi ċineg kaboċċi hemm selettur, kollox wara huwa filtru.

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

Minħabba l-mod kif jaħdem Loki, ma tistax tagħmel mistoqsijiet mingħajr selettur, iżda t-tikketti jistgħu jsiru ġenerali kif tixtieq.

Selettur huwa valur ta' valur ewlieni f'ċingi kaboċċi. Tista' tgħaqqad is-seletturi u tispeċifika kundizzjonijiet ta' tfittxija differenti billi tuża l-operaturi =, != jew espressjonijiet regolari:

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

Filtru huwa test jew regexp li jiffiltra d-dejta kollha riċevuta mis-selettur.

Huwa possibbli li jinkisbu graffs ad hoc ibbażati fuq id-dejta riċevuta fil-modalità metrika. Pereżempju, tista 'ssir taf kemm-il darba entrata li fiha l-indiċi tal-istring tidher fil-logs nginx:

Ġbir taz-zkuk minn Loki

Deskrizzjoni sħiħa tal-kapaċitajiet tista 'tinstab fid-dokumentazzjoni LogQL.

Log parsing

Hemm diversi modi kif tiġbor zkuk:

  • Bl-użu ta 'Promtail, komponent standard tal-munzell għall-ġbir taz-zkuk.
  • Direttament mill-kontenitur docker bl-użu Loki Docker Logging Driver.
  • Uża Fluentd jew Fluent Bit, li tista 'tibgħat data lil Loki. B'differenza minn Promtail, għandhom parsers lesti għal kważi kull tip ta 'log u jistgħu wkoll jimmaniġġjaw zkuk b'ħafna linji.

Normalment Promtail jintuża għall-parsing. Jagħmel tliet affarijiet:

  • Isib sorsi tad-dejta.
  • Waħħal it-tikketti magħhom.
  • Jibgħat data lil Loki.

Bħalissa Promtail jista' jaqra zkuk minn fajls lokali u minn systemd journal. Għandu jiġi installat fuq kull magna li minnha jinġabru zkuk.

Hemm integrazzjoni ma 'Kubernetes: Promtail awtomatikament, permezz tal-Kubernetes REST API, jirrikonoxxi l-istat tal-cluster u jiġbor zkuk minn node, servizz jew pod, immedjatament tpoġġi tikketti bbażati fuq metadata minn Kubernetes (isem tal-pod, isem tal-fajl, eċċ.) .

Tista' wkoll hang tikketti bbażati fuq dejta mir-reġistru billi tuża Pipeline. Pipeline Promtail jista 'jikkonsisti f'erba' tipi ta 'stadji. Aktar dettalji fi dokumentazzjoni uffiċjali, Immedjatament ninnota xi sfumaturi.

  1. Stadji ta' parsing. Dan huwa l-istadju RegEx u JSON. F'dan l-istadju, aħna estratt dejta miz-zkuk fl-hekk imsejħa mappa estratta. Nistgħu niġbdu minn JSON billi sempliċement nikkupjaw l-oqsma li neħtieġu fil-mappa estratta, jew permezz ta 'espressjonijiet regolari (RegEx), fejn il-gruppi msemmija huma "mappjati" fil-mappa estratta. Il-mappa Estratt hija maħżen tal-valur ewlieni, fejn iċ-ċavetta hija l-isem tal-qasam, u l-valur huwa l-valur tagħha miċ-zkuk.
  2. Ittrasforma l-istadji. Dan l-istadju għandu żewġ għażliet: trasformazzjoni, fejn nissettjaw ir-regoli tat-trasformazzjoni, u sors - is-sors tad-dejta għat-trasformazzjoni mill-mappa estratta. Jekk ma jkunx hemm qasam bħal dan fil-mappa estratta, se tinħoloq. Dan il-mod huwa possibbli li jinħolqu tikketti li mhumiex ibbażati fuq il-mappa estratta. F'dan l-istadju nistgħu jimmanipulaw id-data fil-mappa estratta bl-użu ta 'pjuttost qawwija Mudell Golang. Barra minn hekk, irridu niftakru li l-mappa estratta hija mgħobbija għal kollox waqt l-analiżi, li jagħmilha possibbli, pereżempju, li jiġi ċċekkjat il-valur fiha: "{{jekk .tag}jeżisti valur tat-tikketta{end}}". Template jappoġġja kundizzjonijiet, loops, u xi funzjonijiet string bħal Ibdel u Ittrimmja.
  3. Stadji ta' azzjoni. F'dan il-punt tista 'tagħmel xi ħaġa bil-kontenut estratt:
    • Oħloq tikketta mid-dejta estratta, li tkun indiċjata minn Loki.
    • Ibdel jew issettja l-ħin tal-avveniment mill-ġurnal.
    • Ibdel id-dejta (test tal-log) li se tmur għal Loki.
    • Oħloq metriċi.
  4. Stadji ta 'filtrazzjoni. L-istadju tal-partita, fejn nistgħu jew nibagħtu entrati li m'għandniex bżonn /dev/null jew nibgħatuhom għal aktar proċessar.

Bl-użu ta 'eżempju ta' pproċessar ta 'zkuk nginx regolari, ser nuri kif tista' tparsa zkuk billi tuża Promtail.

Għat-test, ejja nieħdu bħala nginx-proxy immaġini nginx modifikata jwilder/nginx-proxy:alpine u daemon żgħir li jista' jistaqsi lilu nnifsu permezz ta' HTTP. Id-daemon għandu diversi endpoints, li għalihom jista 'jipprovdi tweġibiet ta' daqsijiet differenti, bi status HTTP differenti u b'dewmien differenti.

Aħna se niġbru zkuk minn kontenituri docker, li jistgħu jinstabu tul il-mogħdija /var/lib/docker/containers/ / -json.log

F'docker-compose.yml aħna nikkonfiguraw Promtail u nispeċifikaw il-mogħdija għall-konfigurazzjoni:

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

Żid il-mogħdija għar-zkuk għal promtail.yml (hemm għażla "docker" fil-konfigurazzjoni, li tagħmel l-istess ħaġa f'linja waħda, iżda ma tkunx daqshekk ċara):

scrape_configs:
 - job_name: containers

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

Meta din il-konfigurazzjoni tkun attivata, zkuk mill-kontenituri kollha jintbagħtu lil Loki. Biex nevitaw dan, aħna nibdlu s-settings tat-test nginx f'docker-compose.yml - żid qasam tat-tikketta tal-illoggjar:

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

Editjar promtail.yml u twaqqaf Pipeline. L-input jinkludi zkuk tat-tip li ġej:

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

Stadju tal-pipeline:

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

Aħna estratt l-oqsma stream, attrs, attrs.tag (jekk jeżistu) mill-JSON deħlin u poġġihom fil-mappa estratta.

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

Jekk irnexxielna npoġġu l-qasam tat-tikketta fil-mappa estratta, allura bl-użu tar-reġexp aħna estratt l-ismijiet tal-immaġni u l-kontenitur.

 - labels:
     image_name:
     container_name:

Aħna jassenjaw tikketti. Jekk iċ-ċwievet image_name u container_name jinstabu fid-dejta estratta, allura l-valuri tagħhom jiġu assenjati lit-tikketti korrispondenti.

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

Nermu z-zkuk kollha li m'għandhomx it-tikketti installati isem_immaġni u isem_kontenitur.

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

Għaż-zkuk kollha li image_name tagħhom huwa nginx.promtail.test, iġbed il-qasam tar-reġistru mir-reġistru tas-sors u poġġih fil-mappa estratta biċ-ċavetta tal-filliera.

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

Aħna niċċaraw il-linja tal-input b'espressjonijiet regolari u iġbed il-host virtwali nginx u l-linja log 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.]+)")?

Parse nginx log billi tuża espressjonijiet regolari.

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

Ejja parse request_url. Bl-użu regexp aħna niddeterminaw l-iskop tat-talba: għal data statika, għal ritratti, għal API u ssettja ċ-ċavetta korrispondenti fil-mappa estratta.

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

Billi nużaw operaturi kondizzjonali f'Mudell, aħna niċċekkjaw l-oqsma installati fil-mappa estratta u nissettjaw il-valuri meħtieġa għall-qasam request_type: photo, static, API. Assenja ieħor jekk jonqos. request_type issa fih it-tip ta' talba.

       - labels:
           api_request:
           virtual_host:
           request_type:
           status:

Aħna waqqafna t-tikketti api_request, virtual_host, request_type u status (HTTP status) ibbażati fuq dak li rnexxielna npoġġu fil-mappa estratta.

       - output:
           source: nginx_log_row

Bidla l-output. Issa l-log nginx imnaddaf mill-mappa estratta jmur għand Loki.

Ġbir taz-zkuk minn Loki

Wara li tħaddem il-konfigurazzjoni ta 'hawn fuq, tista' tara li kull entrata hija assenjata tikketti bbażati fuq dejta mir-reġistru.

Ħaġa waħda li wieħed iżomm f'moħħu huwa li l-irkupru ta 'tikketti b'numru kbir ta' valuri (kardinalità) jista 'jnaqqas b'mod sinifikanti Loki. Jiġifieri, m'għandekx tpoġġi, pereżempju, user_id fl-indiċi. Aqra aktar dwar dan fl-artiklu "Kif it-tikketti f'Loki jistgħu jagħmlu l-mistoqsijiet dwar il-log aktar malajr u aktar faċli" Iżda dan ma jfissirx li ma tistax tfittex minn user_id mingħajr indiċi. Ikollok bżonn tuża filtri meta tfittex (“qabbad” id-dejta), u l-indiċi hawn jaġixxi bħala identifikatur tal-fluss.

Viżwalizzazzjoni ta 'zkuk

Ġbir taz-zkuk minn Loki

Loki jista' jaġixxi bħala sors ta' dejta għal graffs Grafana bl-użu ta' LogQL. Il-karatteristiċi li ġejjin huma appoġġjati:

  • rata — numru ta' rekords kull sekonda;
  • għadd matul iż-żmien — in-numru ta’ rekords fil-medda speċifikata.

Hemm ukoll funzjonijiet ta 'aggregazzjoni Somma, Medja u oħrajn. Tista 'tibni graffs pjuttost kumplessi, pereżempju graff tan-numru ta' żbalji HTTP:

Ġbir taz-zkuk minn Loki

Is-sors tad-dejta standard Loki huwa kemmxejn imnaqqas fil-funzjonalità meta mqabbel mas-sors tad-dejta Prometheus (per eżempju, ma tistax tbiddel il-leġġenda), iżda Loki jista 'jkun konness bħala sors mat-tip Prometheus. M'inix ċert jekk din hijiex imġieba dokumentata, imma niġġudikaw mir-rispons tal-iżviluppaturi "Kif tikkonfigura Loki bħala datasource Prometheus? · Ħarġa #1222 · grafana/loki”, pereżempju, huwa kompletament legali, u Loki huwa kompletament kompatibbli ma 'PromQL.

Żid Loki bħala sors tad-dejta bit-tip Prometheus u żid URL /loki:

Ġbir taz-zkuk minn Loki

U nistgħu nagħmlu graffs, bħallikieku qed naħdmu b'metriċi minn Prometheus:

Ġbir taz-zkuk minn Loki

Naħseb li d-diskrepanza fil-funzjonalità hija temporanja u l-iżviluppaturi se jikkoreġu dan fil-futur.

Ġbir taz-zkuk minn Loki

Metriċi

Loki jipprovdi l-abbiltà li jiġbed metriċi numeriċi minn zkuk u jibgħathom lil Prometheus. Pereżempju, il-log nginx fih in-numru ta 'bytes għal kull tweġiba, kif ukoll, b'ċerta modifika tal-format standard tal-log, il-ħin f'sekondi li ħadet biex tirrispondi. Din id-dejta tista’ tiġi estratta u mibgħuta lil Prometheus.

Żid taqsima oħra ma' 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

L-għażla tippermettilek tiddefinixxi u taġġorna metriċi bbażati fuq data mill-mappa estratta. Dawn il-metriċi ma jintbagħtux lil Loki - jidhru fl-endpoint Promtail/metrics. Prometheus għandu jiġi kkonfigurat biex jirċievi d-dejta riċevuta f'dan l-istadju. Fl-eżempju ta 'hawn fuq, għal request_type = "api" aħna niġbru metrika tal-istogramma. B'dan it-tip ta 'metriċi huwa konvenjenti li jinkisbu perċentili. Għal statiċi u ritratti, aħna niġbru s-somma ta 'bytes u n-numru ta' ringieli li fihom irċevejna bytes biex nikkalkulaw il-medja.

Aqra aktar dwar il-metriċi hawn.

Iftaħ il-port fuq Promtail:

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

Kun żgur li l-metriċi bil-prefiss promtail_custom jidhru:

Ġbir taz-zkuk minn Loki

It-twaqqif ta’ Prometheus. Żid promtail tax-xogħol:

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

U nfasslu graff:

Ġbir taz-zkuk minn Loki

B'dan il-mod tista 'ssir taf, pereżempju, l-erba' mistoqsijiet l-aktar bil-mod. Tista 'wkoll twaqqaf monitoraġġ għal dawn il-metriċi.

Skalar

Loki jista 'jkun jew f'modalità binarja waħda jew f'modalità sharded (modalità li tista' tiġi skalata orizzontalment). Fit-tieni każ, tista 'tiffranka d-dejta fis-sħaba, u l-biċċiet u l-indiċi huma maħżuna separatament. Il-verżjoni 1.5 tintroduċi l-abbiltà li taħżen f'post wieħed, iżda għadu mhux rakkomandat li tużaha fil-produzzjoni.

Ġbir taz-zkuk minn Loki

Il-biċċiet jistgħu jinħażnu f'ħażna kompatibbli ma 'S3, u databases li jistgħu jiġu skalati orizzontalment jistgħu jintużaw biex jaħżnu indiċi: Cassandra, BigTable jew DynamoDB. Partijiet oħra ta 'Loki - Distributuri (għall-kitba) u Querier (għall-mistoqsijiet) - huma mingħajr stat u wkoll skala orizzontalment.

Fil-konferenza DevOpsDays Vancouver 2019, wieħed mill-parteċipanti Callum Styan ħabbar li ma 'Loki il-proġett tiegħu għandu petabytes ta' zkuk b'indiċi ta 'inqas minn 1% tad-daqs totali: "Kif Loki Jikkorrelata l-Metriċi u z-Zkuk — U jiffranka l-Flus".

Tqabbil ta 'Loki u ELK

Daqs tal-indiċi

Biex tittestja d-daqs ta 'l-indiċi li jirriżulta, ħadt zkuk mill-kontenitur nginx li għalih il-Pipeline ta' hawn fuq ġie kkonfigurat. Il-log file kien fih 406 linja b'volum totali ta' 624 MB. Logs ġew iġġenerati fi żmien siegħa, madwar 109 daħla kull sekonda.

Eżempju ta' żewġ linji mill-ġurnal:

Ġbir taz-zkuk minn Loki

Meta indiċjat minn ELK, dan ta daqs ta 'indiċi ta' 30,3 MB:

Ġbir taz-zkuk minn Loki

Fil-każ ta' Loki, dan irriżulta f'madwar 128 KB ta' indiċi u madwar 3,8 MB ta' dejta f'biċċiet. Ta 'min jinnota li l-ġurnal ġie ġġenerat artifiċjalment u ma kellux varjetà kbira ta' data. Gzip sempliċi fuq il-log Docker JSON oriġinali bid-dejta ta kompressjoni ta '95,4%, u meta jitqies il-fatt li l-log nginx imnaddaf biss intbagħat lil Loki innifsu, kompressjoni sa 4 MB tinftiehem. In-numru totali ta 'valuri uniċi għat-tikketti Loki kien 35, li jispjega d-daqs żgħir tal-indiċi. Għal ELK il-ġurnal ġie mnaddaf ukoll. Għalhekk, Loki kkompressat id-dejta oriġinali b'96%, u ELK b'70%.

Konsum tal-memorja

Ġbir taz-zkuk minn Loki

Jekk inqabblu l-munzell kollu ta 'Prometheus u ELK, allura Loki "jiekol" bosta drabi inqas. Huwa ċar li servizz Go jikkonsma inqas minn servizz Java, u t-tqabbil tad-daqs tal-JVM Heap Elasticsearch u l-memorja allokata għal Loki mhuwiex korrett, iżda madankollu ta 'min jinnota li Loki juża ħafna inqas memorja. Il-vantaġġ tas-CPU tiegħu mhuwiex daqshekk ovvju, iżda huwa wkoll preżenti.

Veloċità

Loki "jidħol" zkuk aktar malajr. Il-veloċità tiddependi fuq ħafna fatturi - x'tip ta 'zkuk huma, kif sofistikati aħna parse minnhom, in-netwerk, id-diska, eċċ - iżda hija definittivament ogħla minn dik ta' ELK (fit-test tiegħi - madwar darbtejn). Dan huwa spjegat mill-fatt li Loki ipoġġi ħafna inqas dejta fl-indiċi u, għaldaqstant, iqatta 'inqas ħin fuq l-indiċjar. Bil-veloċità tat-tfittxija, is-sitwazzjoni hija l-oppost: Loki jonqos b'mod notevoli fuq data akbar minn diversi gigabytes, filwaqt li l-veloċità tat-tfittxija ta 'ELK ma tiddependix mid-daqs tad-data.

Fittex minn zkuk

Loki huwa ferm inferjuri għal ELK f'termini ta 'kapaċitajiet ta' tfittxija ta 'log. Grep b'espressjonijiet regolari huwa qawwi, iżda huwa inferjuri għal database matura. In-nuqqas ta 'mistoqsijiet dwar il-firxa, l-aggregazzjoni biss minn tikketti, l-inkapaċità li tfittex mingħajr tikketti - dan kollu jillimitana fit-tfittxija għal informazzjoni ta' interess f'Loki. Dan ma jfissirx li xejn ma jista 'jinstab bl-użu ta' Loki, iżda jiddefinixxi l-fluss ta 'ħidma ma' zkuk meta l-ewwel issib problema fil-mapep Prometheus, u mbagħad uża dawn it-tikketti biex tfittex dak li ġara fil-zkuk.

Interface

L-ewwelnett, huwa sabiħ (skużani, ma setgħetx tirreżisti). Grafana għandha interface sabiħa, iżda Kibana hija ħafna aktar rikk fil-karatteristiċi.

Vantaġġi u liżvantaġġi ta 'Loki

Wieħed mill-vantaġġi huwa li Loki jintegra ma 'Prometheus, għalhekk inġibu metriċi u twissija barra mill-kaxxa. Huwa konvenjenti għall-ġbir taz-zkuk u l-ħażna tagħhom minn Kubernetes Pods, peress li għandha skoperta tas-servizz wiret minn Prometheus u awtomatikament tehmeż tikketti.

L-iżvantaġġ huwa dokumentazzjoni dgħajfa. Xi affarijiet, pereżempju, il-karatteristiċi u l-kapaċitajiet ta 'Promtail, skoprejt biss fil-proċess ta' studju tal-kodiċi, fortunatament huwa open-source. Żvantaġġ ieħor huwa kapaċitajiet ta 'parsing dgħajfa. Pereżempju, Loki ma jistax janalizza zkuk b'ħafna linji. Żvantaġġ ieħor huwa li Loki hija teknoloġija relattivament żgħira (il-ħruġ 1.0 kien f'Novembru 2019).

Konklużjoni

Loki hija teknoloġija 100% interessanti li hija adattata għal proġetti ta 'daqs żgħir u medju, li tippermettilek issolvi ħafna problemi ta' aggregazzjoni ta 'zkuk, tfittxija ta' zkuk, monitoraġġ u analiżi ta 'log.

Aħna ma nużawx Loki f'Badoo għax għandna munzell ta 'ELK li jixraq lilna u li kien imkabbar b'diversi soluzzjonijiet tad-dwana matul is-snin. Għalina, l-ostaklu huwa t-tiftix permezz taz-zkuk. Bi kważi 100 GB ta’ zkuk kuljum, huwa importanti għalina li nkunu nistgħu nsibu kollox u ftit aktar u nagħmluh malajr. Għall-iċċartjar u l-monitoraġġ, nużaw soluzzjonijiet oħra li huma mfassla għall-bżonnijiet tagħna u integrati ma 'xulxin. Il-munzell Loki għandu benefiċċji tanġibbli, iżda mhux se jagħtina aktar milli diġà għandna, u l-benefiċċji tiegħu żgur mhux se jegħlbu l-ispiża tal-migrazzjoni.

U għalkemm wara riċerka deher ċar li ma nistgħux nużaw Loki, nittamaw li din il-kariga tgħinek fl-għażla tiegħek.

Ir-repożitorju bil-kodiċi użat fl-artikolu jinsab hawn.

Sors: www.habr.com

Żid kumment