Kogume logisid Lokist

Kogume logisid Lokist

Me Badoo's jĂ€lgime pidevalt uusi tehnoloogiaid ja hindame, kas nende kasutamine meie sĂŒsteemis on pĂ”hjendatud. Ühe sellise uuringuga soovime jagada kogukonnaga. See on pĂŒhendatud Lokile — logide kogumise sĂŒsteemile.

Loki on lahendus logide salvestamiseks ja vaatamiseks, samuti pakub see paindlikku sĂŒsteemi logide analĂŒĂŒsimiseks ja andmete saatmiseks Prometheusesse. Mais ilmus jĂ€rgmine vĂ€rskendus, mida arendajad aktiivselt edendavad. Meid huvitas, mida Loki suudab, milliseid vĂ”imalusi see pakub ja kui hĂ€sti vĂ”ib see asendada ELK-i — tehnoloogiat, mida kasutame praegu.

Mis on Loki

Grafana Loki on komponentide kogum, mis moodustab tĂ€ieliku sĂŒsteemi logidega töötamiseks. Erinevalt teistest sarnastest sĂŒsteemidest pĂ”hinevad Lokis ideel indekseerida ainult logide metainformatsiooni — labels (nagu Prometheus), samas kui logid ise surutakse kokku eraldi chunk'idena.

Avaleht, GitHub

Enne kui rÀÀgin Loki funktsioonidest, soovin selgitada, mida tÀhendab 'ainult metaandmete indekseerimise idee'. Vaatleme Loki lÀhenemist ja traditsioonilisi meetodeid nagu Elasticsearch, kasutades nÀitena nginx logirida:

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

Traditsioonilised sĂŒsteemid parsivad rida tervikuna, sealhulgas vĂ€ljad, kus on palju unikaalseid vÀÀrtusi user_id ja item_id, ja salvestavad kĂ”ik suurtesse indeksitesse. Selle lĂ€henemise eeliseks on see, et keerulisi pĂ€ringuid saab kiiresti teostada, kuna peaaegu kĂ”ik andmed on indeksis. Kuid selle eest tuleb maksta: indeks muutub suureks, mis suurendab mĂ€lu nĂ”udmisi. LĂ”ppkokkuvĂ”ttes on logide tĂ€isteksti indeks vĂ”rreldav logide enda suurusega. Selleks, et kiiresti otsida, peab indeks olema mĂ€lus. Ja mida rohkem logisid on, seda kiiremini indeks suureneb ja seda rohkem mĂ€lu see vajab.

Loki lahendus nĂ”uab, et rea pĂ”hjal eraldataks ainult vajalikud andmed, mille vÀÀrtuste arv on vĂ€ike. Nii saame vĂ€ikese indeksi ja saame andmeid otsida, filtreerides neid aja ja indekseeritud vĂ€ljade jĂ€rgi ning skaneerides seejĂ€rel jÀÀkidest regulaaravaldiste vĂ”i alamstringide kaudu. Protsess ei tundu kĂ”ige kiirem, kuid Loki jagab pĂ€ringu mitmeks osaks ja tĂ€idab need paralleelselt, töötledes suurt hulka andmeid lĂŒhikese aja jooksul. Shardide ja nende paralleelsete pĂ€ringute arv on konfigureeritav; seega sĂ”ltub ajaĂŒhikus töödeldavate andmete hulk lineaarelt pakutud ressurssidest.

See kompromiss suure kiire indeksi ja vĂ€ikese indeksi vahel paralleelse tĂ€isotsimisega vĂ”imaldab Lokil hallata sĂŒsteemi kulusid. Seda saab paindlikult kohandada ja laiendada vastavalt vajadustele.

Loki-stek koosneb kolmest komponendist: Promtail, Loki ja Grafana. Promtail kogub logisid, töötleb neid ja saadab Loki-sse. Loki salvestab need. Grafana oskab kĂŒsida andmeid Loki-st ja neid kuvada. Üldiselt saab Loki’t kasutada mitte ainult logide salvestamiseks ja nende jĂ€rgi otsimiseks. Kogu stek pakub suuri vĂ”imalusi saabuva info töötlemiseks ja analĂŒĂŒsimiseks, kasutades Prometheuse lĂ€henemist.
Installeerimise protsessi kirjeldus on saadaval siit.

Otsi logisid

Logides saab otsida spetsiaalses Grafana kasutajaliideses — Explorer. KĂŒsitavate andmete jaoks kasutatakse LogQL keelt, mis on vĂ€ga sarnane PromQL-ile, mida kasutatakse Prometheuses. PĂ”himĂ”tteliselt vĂ”ib seda vaadelda kui jaotatud grep'i.

Otsingu liides nÀeb vÀlja selline:

Kogume logisid Lokist

Iga pĂ€ring koosneb kahest osast: selector ja filter. Selector on otsimine indekseeritud metandmete (siltide) pĂ”hjal, mis on logidele omistatud, ja filter on otsingurea vĂ”i regulaarne vĂ€ljend, millega filtreeritakse sissekanded, mida mÀÀratleb selector. Antud nĂ€ites: Koorikute sises olev — selector, kĂ”ik, mis jĂ€rgneb, on filter.

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

Loki tööpĂ”himĂ”tte tĂ”ttu ei saa pĂ€ringuid teha ilma selectorita, kuid silte saab teha nii ĂŒldiseks, kui soovite.

Selektor on key-value vÀÀrtused sulgudes. Saate kombinatsioonide abil luua selektoreid ja mÀÀrata erinevaid otsingu tingimusi, kasutades operaattoreid =, != vÔi regulaaravaldisi:

{instance=~"kafka-[23]",name!="kafka-dev"} 
// Leiab logid, millel on instance'i silt, mille vÀÀrtuseks on kafka-2, kafka-3, ja vÀlistab dev 

Filter on tekst vÔi regulaaravaldis, mis filtreerib kÔik andmed, mis saadakse selektorist.

On vĂ”imalik saada ad-hoc- graafikuid saadud andmete kohta reĆŸiimis metrics. NĂ€iteks saab teada, kui sageli esineb nginx logides rida, mis sisaldab fraasi index:

Kogume logisid Lokist

Kogu vÔimaluste kirjeldus on saadaval dokumendis. LogQL.

Logide parsimine

Logide kogumiseks on mitu viisi:

  • Kasutades Promtail'i, mis on standardne komponent logide kogumisel.
  • Otseselt Docker-konteinerist, kasutades Loki Docker Logging Driver.
  • Kasutada Fluentd vĂ”i Fluent Bit, mis oskavad saata andmeid Loki. Erinevalt Promtail'ist on neil valmispakitud parsijad praktiliselt igasuguste logide jaoks ja nad suudavad hakkama saada ka multiline-logidega.

Tavaliselt kasutatakse parsimiseks Promtail'i. See teeb kolme asja:

  • Leiab andmeallikad.
  • Kinnitavad neile silte.
  • Saadab andmed Loki.

Hetkel suudab Promtail lugeda logisid kohalikest failidest ja systemd journalist. See tuleb paigaldada igale masinale, millest logisid kogutakse.

Kubernetesega on olemas integreerimine: Promtail tuvastab automaatselt Kubernetes REST API kaudu klastriseisundi ja kogub logisid sÔlmelt, teenusest vÔi podist, riputades samal ajal sildid pÔhinedes Kubernetesest saadud metaandmetele (pod'i nimi, faili nimi jne).

Samuti saab silte riputada logiandmete pĂ”hjal Pipeline'i abil. Promtaili Pipeline vĂ”ib koosneda neljast tĂŒĂŒpi etappidest. Rohkem detaile — ametlikus dokumentatsioonis, mainin siin mĂ”ned nĂŒansid.

  1. Parsing stages. See on RegEx ja JSON etapp. Sellel etapil ekstraheerime andmed logidest nii nimetatud extracted map'i. Andmeid saab ekstraktida JSON-ist, kopeerides lihtsalt vajalikud vĂ€ljad extracted map'i, vĂ”i regulaarselt vĂ€ljendite (RegEx) kaudu, kus extracted map'is “mapitakse” named groups. Extracted map on key-value salvestus, kus key on vĂ€lja nimi ja value on selle vÀÀrtus logidest.
  2. Transform stages. Sellel etapil on kaks valikut: transform, kus mÀÀrame transformatsiooni reeglid, ja source — andmeallikas transformatsiooniks extracted map'ist. Kui extracted map'is sellist vĂ€lja ei ole, siis see luuakse. Nii saab luua silte, mis ei pĂ”hine extracted map'il. Sellel etapil saame manipuleerida andmetega extracted map'is, kasutades piisavalt vĂ”imsat Golang Template. Samuti tuleks meeles pidada, et extracted map laaditakse tĂ€ielikult parsimisel, mis vĂ”imaldab nĂ€iteks kontrollida vÀÀrtust: “{{if .tag}tag value exists{end}}”. Mall toetab tingimusi, tsĂŒkleid ja mĂ”ningaid stringi funktsioone, nagu Replace ja Trim.
  3. Action stages. Sellel etapil saab teha midagi vĂ€ljatrĂŒkkidega:
    • Luua silt extracted data'st, mis indekseeritakse Loki.
    • Muutke vĂ”i seadke logi sĂŒndmuse aeg.
    • Muutke andmeid (logi tekst), mis saadetakse Loki.
    • Looge mÔÔdikud.
  4. Filtering stages. Match etapp, kus saab kas suunata /dev/null-sse salvestusi, mida me ei vaja, vÔi suunata need edasisele töötlemisele.

NÀitan nÀite kaudu tavaliste nginx-logide töötlemise kohta, kuidas logisid Promtaili abil parssida.

Testimiseks kasutame nginx-proxy't, modifitseeritud dockeripilti nginx jwilder/nginx-proxy:alpine ja vĂ€ikest demonit, mis oskab endalt HTTP kaudu kĂŒsida. Demonil on seadistatud mitu lĂ”pp-punkti, millele ta vĂ”ib vastata erineva suuruse, erinevate HTTP staatuste ja erineva viivitusega.

Kogume logisid docker-konteineritest, mida saab leida teelt /var/lib/docker/containers//-json.log

docker-compose.yml failis seadistame Promtaili ja mÀÀrame tee konfigureerimise juurde:

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

Lisame promtail.yml'sse tee logideni (konfiguratsioonis on olemas valik "docker", mis teeb sama ĂŒhe reaga, kuid see ei oleks nii selge):

scrape_configs:
 - job_name: containers

   static_configs:
       labels:
         job: containerlogs
         __path__: /var/lib/docker/containers/*/*log  # ainult linuxile

KĂ€ivitades sellise konfiguratsiooni, satuvad Loki'sse logid kĂ”igist konteineritest. Selle vĂ€ltimiseks muudame testimise nginx seadeid docker-compose.yml — lisame logimise sildi vĂ€ljad:

proxy:
 image: nginx.test.v3
//

 logging:
   driver: "json-file"
   options:
     tag: "{{.ImageName}}|{{.Name}}"

Muudame promtail.yml ja seadistame Pipeline'i. Sisendiks on jÀrgmise vorminguga logid:

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

Pipeline'i etapp:

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

Ekstraheerime tulenevatest JSON-vÀljadest stream, attrs, attrs.tag (kui need olemas) ja paneme need extracted map'i.

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

Kui saime tag'i vÀlja panna extracted map'i, siis kasutame regex'i pildi ja konteineri nimede ekstraheerimiseks.

 - labels:
     image_name:
     container_name:

MÀÀrame sildid. Kui extracted data's leitakse vÔtmed image_name ja container_name, siis nende vÀÀrtused omistatakse vastavatele siltidele.

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

Korraga viskame kÔik logid vÀlja, millel ei leidu mÀÀratud silte image_name ja container_name.

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

KÔigi logide puhul, kus image_name on nginx.promtail.test, ekstraktime algsest logist vÀlja vÀlja log ja paneme selle extracted kaardile vÔtmega row.

  - regex:
         # vÀlistame forego vÀrvid
         expression: .+nginx.+|.+[0m(?P[a-z_.-]+) +(?P.+)
         source: logrow

Puhastame sisendi rea regulaaravaldistega ja ekstraheerime nginx virtuaalse hosti ja nginx logi rea.

     - regex:
         source: nginxlog
         expression: ^(?P[w.]+) - (?P[^ ]*) [(?P[^ ]+).*] "(?P[^ ]*) (?P[^ ]*) (?P[^ ]*)" (?P[d]+) (?P[d]+) "(?P[^"]*)" "(?P[^"]*)"( "(?P[d.]+)")?

Parsim nginx-logi regulaaravaldistega.

    - regex:
           source: request_url
           expression: ^.+\.(?Pjpg|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[^/?.]+).*$
       - regex:
           source: request_url
           expression: ^/api/(?P[^/?.]+).*$

Uurime request_url-i. Regulaaravaldiste abil mÀÀrame pÀringu sihtkoha: staatilisele, fotodele, API-le ja salvestame extracted kaardile vastava vÔtme.

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

Template'i tingimuste operaatorite abil kontrollime extracted map'is seadistatud vĂ€lju ja mÀÀrame request_type vĂ€ljale vajalikud vÀÀrtused: photo, static, API. MÀÀrame other, kui see ei Ă”nnestu. NĂŒĂŒd sisaldab request_type pĂ€ringu tĂŒĂŒpi.

       - labels:
           api_request:
           virtual_host:
           request_type:
           status:

Seame api_request, virtual_host, request_type ja staatuse (HTTP staatuse) vÀÀrtused vastavalt sellele, mis on Ônnestunud extracted map'i sisestada.

       - output:
           source: nginx_log_row

Muudame output'i. NĂŒĂŒd saadetakse Loki'sse puhastatud nginx-log extracted map'ist.

Kogume logisid Lokist

PÀrast antud konfiguratsiooni kÀivitamist vÔib nÀha, et igale kirjele on lisatud mÀrgid logi andmete pÔhjal.

Peab meeles pidama, et erinevate vÀÀrtustega (cardinality) mĂ€rkide ekstraheerimine vĂ”ib oluliselt aeglustada Loki toimimist. See tĂ€hendab, et nĂ€iteks user_id ei tohiks indeksisse panna. TĂ€iendavalt lugege sellest artiklist “How labels in Loki can make log queries faster and easier”. Kuid see ei tĂ€henda, et user_id pĂ”hjal ei saaks otsida ilma indeksiteta. Otsingul tuleks kasutada filtreid (andmete „grepimise” kaudu), kusjuures indeks toimib identifikaatorina.

Logide visualiseerimine

Kogume logisid Lokist

Loki saab olla andmeallikaks Grafana diagrammidele, kasutades LogQL-i. Toetatud on jÀrgmised funktsioonid:

  • rate — sĂŒndmuste arv sekundis;
  • count over time — sĂŒndmuste arv mÀÀratud ajavahemikus.

Samuti on olemas agregatsioonifunktsioonid nagu Sum, Avg ja teised. Saame koostada piisavalt keerulisi diagramme, nÀiteks HTTP-veeremiste arvu diagrammi:

Kogume logisid Lokist

TavapĂ€rane andmeallikas Loki on funktsionaalsuses mĂ”nevĂ”rra piiratud vĂ”rreldes andmeallikaga Prometheus (nĂ€iteks ei saa muudada legendi), kuid Loki saab lisada allikana tĂŒĂŒbi Prometheus. Ma ei ole kindel, kas see on dokumenteeritud kĂ€itumine, aga arendajate vastuse pĂ”hjal “How to configure Loki as Prometheus datasource? · Issue #1222 · grafana/loki”, nĂ€ib, et see on tĂ€iesti seaduslik ning Loki on tĂ€ielikult ĂŒhilduv PromQL-iga.

Lisame Loki andmeallikana tĂŒĂŒbi Prometheus ja tĂ€iendame URL-i /loki:

Kogume logisid Lokist

Ja saame koostada diagramme nagu siis, kui töötaksime Prometheus-i mÔÔdikute kallal:

Kogume logisid Lokist

Ma arvan, et funktsionaalsuse erinevus on ajutine ja arendajad parandavad selle tulevikus.

Kogume logisid Lokist

MÔÔdikud

Loki pakub vÔimalust ekstraktida numbrilisi mÔÔdikud logidest ja saata need Prometheusele. NÀiteks nginx logis sisaldub vastuse baitide arv ning teatud modifikatsiooniga standardformaadi logis ka aeg sekundites, mis kulus vastamiseks. Need andmed saab ekstraktida ja saata Prometheusele.

Lisame promtail.yml faili veel ĂŒhe sektsiooni:

- match:
   selector: '{request_type="api"}'
   stages:
     - metrics:
         http_nginx_response_time:
           type: Histogram
           description: "vastuse aeg 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: "vastuse baitide summa"
           source: bytes_out
           config:
             action: add
         http_nginx_response_bytes_count:
           type: Counter
           description: "vastuse baitide arv"
           source: bytes_out
           config:
             action: inc

Valik vĂ”imaldab defineerida ja uuendada meetrikat, tuginedes extracted map andmetele. Need meetrikad ei saadeta Lokisse — need ilmuvad Promtaili /metrics lĂ”pp-punkti. Prometheus peab olema konfigureeritud nii, et saada andmeid, mis on saadud sellel etapil. Antud nĂ€ites, kui request_type= "api", kogume me histogrammi meetrikat. Sellise meetrikaga on mugav saada protsente. Staatika ja piltide jaoks kogume me byte'ide summa ja ridade arvu, kus me byte'e saime, et arvutada keskmine vÀÀrtus.

Rohkem teavet meetrikate kohta loe siit.

Avame pordi Promtailile:

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

Veendume, et prefiksiga promtail_custom meetrikad on ilmunud:

Kogume logisid Lokist

Konfigureerime Prometheuse. Lisame promtaili töö:

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

Ja joonistame diagrammi:

Kogume logisid Lokist

Nii saab nÀiteks teada neli aeglastest pÀringut. Samuti saab nendele meetrikatele seadistada monitorimise.

Mastaapimine

Loki vĂ”ib töötada nii ĂŒksi (ĂŒksiku binaarsena) kui ka jagatuna (horisontaalselt skaleeritavana). Teises variandis vĂ”ib ta salvestada andmeid pilve, kusjuures plokid ja indeksid hoitakse eraldi. Versioonis 1.5 on vĂ”imalik salvestada ĂŒhte kohta, kuid seda ei soovitata veel tootmises kasutada.

Kogume logisid Lokist

Plokke saab salvestada S3 ĂŒhilduvatesse ladudesse, indeksite salvestamiseks on soovitatav kasutada horisontaalselt skaleeritavaid andmebaase nagu Cassandra, BigTable vĂ”i DynamoDB. Loki teised osad — Distributors (kirjutamiseks) ja Querier (pĂ€ringute jaoks) — on olekuta ja samuti skaleeritavad horisontaalselt.

Konverentsil DevOpsDays Vancouver 2019 tĂ”i ĂŒks osaleja Callum Styan vĂ€lja, et tema projekt on Loki abil kogunud petabaitide kaupa logisid, mille indeks on vĂ€hem kui 1% kogu suurusest: “Kuidas Loki seob mÔÔdikud ja logid — ning sÀÀstab raha”.

Loki ja ELK vÔrdlus

Indeksi suurus

Indeksi saadud suuruse testimiseks vĂ”tsin logid Nginx konteinerist, mille jaoks seadistati ĂŒlaltoodud Pipeline. Logifail sisaldas 406 624 rida, kokku 109 MB. Logisid genereeriti tunni jooksul, umbes 100 kirjet sekundis.

NĂ€ide kahest reast logist:

Kogume logisid Lokist

ELK indekseerimise korral andis see indeksi suuruseks 30,3 MB:

Kogume logisid Lokist

Loki puhul oli see umbes 128 KB indeksit ja ligikaudu 3,8 MB andmeid plokkides. Tuleb mÀrkida, et logi oli kunstlikult genereeritud ning see ei erinenud suurest andmete mitmekesisusest. Lihtne gzip algse dockeri JSON-logi andmete peal andis 95,4% surumise, ja arvestades, et Loki sai ainult puhastatud nginx-logi, on 4 MB surumine mÔistetav. Loki mÀrgiste koguarv oli 35, mis selgitab vÀikest indeksi suurust. ELK logi oli samuti puhas. Seega surus Loki algandmed kokku 96% ja ELK 70%.

MĂ€lu tarbimine

Kogume logisid Lokist

Kui vĂ”rrelda kogu Prometheuse ja ELK steki, siis Loki „tarbib“ mitu korda vĂ€hem. On selge, et Go teenus tarbib vĂ€hem kui Java teenus, ja Elasticsearchi JVM Heap'i ja Loki eraldatud mĂ€lu suuruse vĂ”rdlemine pole korrektne, kuid siiski on mĂ€rkimisvÀÀrne, et Loki kasutab palju vĂ€hem mĂ€lu. Tema CPU eelis ei ole nii ilmselge, kuid see on samuti olemas.

Kiirus

Loki suudab logisid töötlemisel olla kiirem. Kiirus sĂ”ltub paljusid teguritest — nĂ€iteks logide tĂŒĂŒbist, meie töötlemise keerukusest, loogikast, diskist jne — aga see on kindlasti kĂ”rgem kui ELK-il (minu testides umbes kaks korda kiirem). Seda seletab asjaolu, et Loki salvestab indeksi vĂ€hem andmeid ja seega kulutab indekseerimisele vĂ€hem aega. Otsimise kiirus on seevastu vastupidine: Loki aeglustub mĂ€rgatavalt, kui andmed ĂŒletavad mitut gigabaiti, samas kui ELK-i otsimise kiirus ei sĂ”ltu andmete suurusest.

Otsi logisid

Loki on otsinguvĂ”imete osas ELK-le olulisel mÀÀral alla jÀÀnud. Grep regulaarsete vĂ€ljenditega on tĂ”hus, kuid jÀÀb alla tĂ€iskasvanud andmebaasile. Range-pĂ€ringute puudumine, aggregeerimine ainult siltide jĂ€rgi ja vĂ”imaluse puudumine otsida ilma siltideta — kĂ”ik need piiravad meid olulise teabe leidmisel Loki kaudu. See ei tĂ€henda, et Loki abil ei saa midagi leida, kuid see mÀÀratleb meie töövoo logidega, kus esmalt leiate probleemi Prometheuse graafikutelt ja seejĂ€rel otsite nende siltide pĂ”hjal logidest, mis juhtus.

Liides

Esiteks, see on ilus (vabandust, ma ei suutnud ennast tagasi hoida). Grafanal on silmale meeldiv liides, kuid Kibana on palju funktsionaalne.

Loki plussid ja miinused

Plusside seas vÔib mÀrkida, et Loki integreerub Prometheusega, seetÔttu saame mÔÔtmised ja hÀired valmis kujul. See on mugav logide kogumiseks ja salvestamiseks Kubernetes Podide juures, kuna tal on pÀrandina Prometheusest teenuse avastamine ja ta lisab automaatselt silte.

Miinusteks on nĂ”rk dokumentatsioon. MĂ”ningaid asju, nĂ€iteks Promtaili omadusi ja vĂ”imalusi, avastasin alles koodi uurimise kĂ€igus, Ă”nneks on see avatud koodiga. Veel ĂŒks miinus on nĂ”rgad tĂ”lgendamisvĂ”imalused. NĂ€iteks ei oska Loki tĂ”lgendada mitmerealisi logisid. Samuti vĂ”ib puudustena mĂ€rkida, et Loki on suhteliselt noor tehnoloogia (1.0 versioon ilmus novembris 2019).

KokkuvÔte

Loki on 100% huvitav tehnoloogia, mis sobib vĂ€ikestele ja keskmise suurusega projektidele, vĂ”imaldades lahendada mitmeid logide kogumise, logide otsimise, logide jĂ€lgimise ja analĂŒĂŒsi ĂŒlesandeid.

Me ei kasuta Loki't Badoo's, kuna meil on ELK-stack, mis vastab meie vajadustele ja on aastate jooksul saanud erinevate kohandatud lahenduste kogumiks. Meie jaoks on logide otsimine tĂ”eline vĂ€ljakutse. Peaaegu 100 GB loge pĂ€evas tĂ€hendab, et on oluline leida kĂ”ike ja veidi rohkem ning seda kiiresti. Graafikute koostamiseks ja jĂ€lgimiseks kasutame muid lahendusi, mis on kohandatud meie vajadustele ja omavahel integreeritud. Loki stack'il on omad plussid, kuid see ei paku meile rohkem, kui me juba omame, ning selle eelised ei kata ĂŒlemineku kulusid.

Ja kuigi uurimise kÀigus selgus, et me ei saa Loki't kasutada, loodame, et see postitus aitab teil valikut teha.

Artiklis kasutatud koodi hoidla asub siin.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster