Samlar loggar med Loki

Samlar loggar med Loki

Vi pĂ„ Badoo övervakar kontinuerligt nya teknologier och bedömer om de bör anvĂ€ndas i vĂ„rt system. Ett av dessa studier vill vi dela med oss av till samhĂ€llet. Den handlar om Loki – ett system för loggaggregation.

Loki Ă€r en lösning för lagring och visning av loggar, och denna stack erbjuder Ă€ven ett flexibelt system för deras analys och dataskickning till Prometheus. I maj kom det senaste uppdateringen som aktivt marknadsförs av skaparna. Vi blev intresserade av vad Loki kan göra, vilka möjligheter den erbjuder och i vilken utstrĂ€ckning den kan fungera som ett alternativ till ELK – stacken som vi anvĂ€nder idag.

Vad Àr Loki

Grafana Loki Ă€r en uppsĂ€ttning komponenter för ett fullstĂ€ndigt system för arbete med loggar. Till skillnad frĂ„n andra liknande system Ă€r Loki baserat pĂ„ idĂ©n att endast indexera logglĂ€gets metadata – etiketter (precis som i Prometheus), medan sjĂ€lva loggarna komprimeras i separata block.

Startsidan, GitHub

Innan jag gÄr över till att beskriva vad man kan göra med hjÀlp av Loki, vill jag förklara vad som menas med "idén att endast indexera metadata". LÄt oss jÀmföra Loki:s metod och indexeringsmetoden i traditionella lösningar som Elasticsearch, med exempel pÄ en rad frÄn nginx-loggen:

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"

Traditionella system parser hela raden, inklusive fÀlt med mÄnga unika vÀrden som user_id och item_id, och sparar allt i stora index. Fördelen med denna metod Àr att man kan utföra komplexa förfrÄgningar snabbt eftersom nÀstan all data finns i indexet. Men det fÄr man betala med att indexet blir stort, vilket leder till minneskrav. I slutÀndan blir det fulltextsindex över loggarna jÀmförbart i storlek med loggarna sjÀlva. För att söka snabbt i det mÄste indexet vara laddat i minnet. Ju fler loggar, desto snabbare ökar indexet och desto mer minne krÀver det.

Loki:s tillvÀgagÄngssÀtt krÀver att endast de nödvÀndiga uppgifterna extraheras frÄn strÀngen, vars vÀrdenummer Àr litet. PÄ sÄ sÀtt fÄr vi en liten index och kan söka data genom att filtrera dem efter tid och efter indexerade fÀlt, och sedan skanna det som ÄterstÄr med reguljÀra uttryck eller delstrÀngsökning. Processen verkar inte vara den snabbaste, men Loki delar upp förfrÄgan i flera delar och utför dem parallellt, vilket bearbetar stora mÀngder data pÄ kort tid. Antalet shardar och parallella förfrÄgningar i dem kan konfigureras; dÀrmed beror mÀngden data som kan bearbetas per tidsenhet linjÀrt pÄ antalet tillhandahÄllna resurser.

Denna avvÀgning mellan en stor snabb index och en liten index med parallell fullstÀndig genomsökning gör att Loki kan kontrollera systemkostnaden. Det kan flexibelt anpassas och skaleras enligt behov.

Loki-stack bestÄr av tre komponenter: Promtail, Loki, Grafana. Promtail samlar in loggar, bearbetar dem och skickar dem till Loki. Loki lagrar dem. Och Grafana kan begÀra data frÄn Loki och visa dem. Generellt kan Loki anvÀndas inte bara för att lagra loggar och söka i dem. Hela stacken ger stora möjligheter för bearbetning och analys av inkommande data, med hjÀlp av Prometheus-metoden.
Beskrivningen av installationsprocessen finns att hitta hÀr.

Sökning i loggar

Loggar kan sökas i det speciella Grafana-grĂ€nssnittet — Explorer. FörfrĂ„gningar anvĂ€nder LogQL-sprĂ„ket, som liknar PromQL som anvĂ€nds i Prometheus. I princip kan det ses som en distribuerad grep.

SökningsgrÀnssnittet ser ut sÄ hÀr:

Samlar loggar med Loki

SjĂ€lva förfrĂ„gan bestĂ„r av tvĂ„ delar: selector och filter. Selector Ă€r sökningen efter indexerade metadatan (etiketter) som Ă€r tilldelade loggarna, och filter Ă€r sökstrĂ€ngen eller regexen som anvĂ€nds för att filtrera posterna som bestĂ€ms av selector. I det angivna exemplet: Inom klamrarna — selector, allt efterĂ„t — filter.

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

PÄ grund av hur Loki fungerar kan inga förfrÄgningar göras utan selector, men etiketterna kan vara sÄ allmÀnna som man vill.

Selector Àr nyckel-vÀrde-par i klamrar. Selector kan kombineras och olika sökvillkor kan stÀllas in genom att anvÀnda operatorerna =, != eller reguljÀra uttryck:

{instance=~"kafka-[23]",name!="kafka-dev"} 
// Hittar loggar med etiketten instance som har vÀrdena kafka-2, kafka-3 och utesluter dev 

En filter Àr en text eller ett reguljÀrt uttryck som filtrerar bort all data som mottagits av selektorn.

Det finns möjlighet att fÄ ad-hoc-diagram baserade pÄ de mottagna data i metrics-lÀget. Till exempel kan man ta reda pÄ frekvensen av att en post som innehÄller strÀngen index dyker upp i nginx-loggar.

Samlar loggar med Loki

En fullstÀndig beskrivning av funktionerna finns i dokumentationen. LogQL.

Loggparsning

Det finns flera sÀtt att samla loggar:

  • Genom att anvĂ€nda Promtail, standardkomponenten i stacken för logginsamling.
  • Direkt frĂ„n Docker-containern med hjĂ€lp av Loki Docker Logging Driver.
  • AnvĂ€nd Fluentd eller Fluent Bit, som kan skicka data till Loki. Till skillnad frĂ„n Promtail har de fĂ€rdiga parsers för nĂ€stan alla typer av loggar och hanterar Ă€ven multiline-loggar.

Vanligtvis anvÀnds Promtail för parsning. Den gör tre saker:

  • Hittar datakĂ€llor.
  • FĂ€ster etiketter pĂ„ dem.
  • Skickar data till Loki.

För nÀrvarande kan Promtail lÀsa loggar frÄn lokala filer och systemd-journal. Den mÄste installeras pÄ varje maskin dÀr loggar samlas in.

Det finns integration med Kubernetes: Promtail tar automatiskt reda pÄ tillstÄndet i klustret genom Kubernetes REST API och samlar in loggar frÄn noden, tjÀnsten eller podden, samtidigt som etiketter tilldelas baserat pÄ metadata frÄn Kubernetes (podnamn, filnamn osv.).

Det gÄr ocksÄ att tilldela etiketter baserat pÄ data frÄn loggen med hjÀlp av Pipeline. En Promtail-pipeline kan bestÄ av fyra typer av steg. Mer information finns i den officiella dokumentationen, hÀr noterar jag nÄgra detaljer.

  1. Parsningstadier. Detta Àr steg för RegEx och JSON. I detta steg extraherar vi data frÄn loggarna till den sÄ kallade extracted map. Vi kan extrahera frÄn JSON genom att bara kopiera de fÀlt vi behöver till extracted map, eller genom reguljÀra uttryck (RegEx), dÀr namngivna grupper kartlÀggs i extracted map. Extracted map Àr ett key-value-lagringssystem, dÀr key Àr fÀltnamnet och value Àr dess vÀrde frÄn loggarna.
  2. Transformationsstadier. Detta steg har tvĂ„ alternativ: transform, dĂ€r vi anger transformationsregler, och source — datakĂ€llan för transformation frĂ„n extracted map. Om det inte finns nĂ„got sĂ„dant fĂ€lt i extracted map kommer det att skapas. PĂ„ sĂ„ sĂ€tt kan vi skapa etiketter som inte Ă€r baserade pĂ„ extracted map. I detta steg kan vi manipulera data i extracted map med hjĂ€lp av en tillrĂ€ckligt kraftfull Golang-mall. Det Ă€r ocksĂ„ viktigt att komma ihĂ„g att den extraherade mappen laddas helt vid parsning, vilket gör det möjligt att till exempel kontrollera vĂ€rdet i den: “{{if .tag}tag value exists{end}}”. Mallen stöder villkor, loopar och vissa strĂ€ngfunktioner som Replace och Trim.
  3. ÅtgĂ€rdssteg. I det hĂ€r steget kan man göra nĂ„got med det extraherade:
    • Skapa en etikett frĂ„n extraherade data som kommer att indexeras av Loki.
    • Ändra eller stĂ€ll in hĂ€ndelsetiden frĂ„n loggen.
    • Ändra data (loggtexten) som kommer att skickas till Loki.
    • Skapa metrik.
  4. Filtreringssteg. Matchningssteget dÀr man antingen kan skicka poster som vi inte behöver till /dev/null, eller skicka dem för vidare bearbetning.

Jag visar med exempel pÄ hur vanliga nginx-loggar kan parsas med hjÀlp av Promtail.

För testet tar vi en modifierad bild av nginx jwilder/nginx-proxy:alpine som nginx-proxy och en liten demon som kan frÄga sig sjÀlv via HTTP. Villkoren för demon stÀlls in med flera slutpunkter som den kan ge svar av olika storlek, med olika HTTP-statuskoder och med olika fördröjningar.

Vi kommer att samla loggar frÄn Docker-containrar som kan hittas pÄ vÀgen /var/lib/docker/containers//-json.log

I docker-compose.yml konfigurerar vi Promtail och anger vÀgen till konfigurationen:

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

Vi lÀgger till i promtail.yml vÀgen till loggarna (i konfigurationen finns det en option "docker" som gör samma sak med en rad, men det skulle inte vara lika tydligt):

scrape_configs:
 - job_name: containers

   static_configs:
       labels:
         job: containerlogs
         __path__: /var/lib/docker/containers/*/*log  # endast för linux

NĂ€r en sĂ„dan konfiguration aktiveras kommer loggar frĂ„n alla containrar att hamna i Loki. För att undvika detta Ă€ndrar vi instĂ€llningarna för den testande nginx i docker-compose.yml – vi lĂ€gger till loggning med fĂ€ltet tag:

proxy:
 image: nginx.test.v3
//

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

Vi redigerar promtail.yml och konfigurerar Pipelines. Loggar av följande slag matas in:

{"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 steg:

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

Vi extraherar fÀlten stream, attrs, attrs.tag frÄn den inkommande JSON och lÀgger dem i extracted-map.

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

Om vi lyckas lÀgga fÀltet tag i extracted-map, sÄ extraherar vi bilderna och containernamn med hjÀlp av regex.

 - labels:
     image_name:
     container_name:

Vi tilldelar etiketter. Om nycklarna image_name och container_name finns i den extraherade datan kommer deras vÀrden att tilldelas motsvarande etiketter.

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

Vi slÀnger alla loggar för vilka inga angivna etiketter image_name och container_name pÄtrÀffades.

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

För alla loggar dÀr image_name Àr nginx.promtail.test extraherar vi fÀltet log frÄn den ursprungliga loggen och lÀgger det i extracted-map med nyckeln row.

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

Vi rengör ingÄngsstrÀngen med reguljÀra uttryck och extraherar den virtuella vÀrden för nginx och nginx-loggstrÀngen.

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

Vi analyserar nginx-loggen med reguljÀra uttryck.

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

Vi undersöker request_url. Med hjÀlp av regex bestÀmmer vi syftet med förfrÄgan: till statiska resurser, bilder, API och sÀtter motsvarande nyckel i extracted-map.

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

Med hjÀlp av villkorssatser i mallen kontrollerar vi de instÀllda fÀlten i extracted-map och tilldelar rÀtt vÀrden till request_type-fÀltet: photo, static, API. Vi sÀtter other om ingen framgÄng. Nu innehÄller request_type typ av förfrÄgan.

       - labels:
           api_request:
           virtual_host:
           request_type:
           status:

Vi stÀller in etiketterna api_request, virtual_host, request_type och status (HTTP-status) baserat pÄ vad som kunde lÀggas i extracted-map.

       - output:
           source: nginx_log_row

Vi Àndrar output. Nu skickas den rengjorda nginx-loggen frÄn extracted-map till Loki.

Samlar loggar med Loki

Efter att ha startat den angivna konfigurationen kan man se att varje post har tilldelats etiketter baserat pÄ uppgifterna i loggen.

Det Ă€r viktigt att notera att extrahering av etiketter med hög kardinalitet kan avsevĂ€rt sĂ€nka prestandan hos Loki. Det innebĂ€r att man inte bör indexera, till exempel, user_id. LĂ€s mer om detta i artikeln “Hur etiketter i Loki kan göra loggfrĂ„gor snabbare och enklare”. Men det betyder inte att man inte kan söka pĂ„ user_id utan index. Man mĂ„ste anvĂ€nda filter vid sökningar ("grep"). Indexet fungerar hĂ€r som en strömningsidentifierare.

Visualisering av loggar

Samlar loggar med Loki

Loki kan fungera som datakÀlla för Grafana-diagram anvÀndandes LogQL. Följande funktioner stöds:

  • rate — mĂ€ngd poster per sekund;
  • count over time — antal poster inom ett specificerat intervall.

Dessutom finns det aggregerande funktioner sÄsom Sum, Avg och andra. Man kan skapa ganska komplexa diagram, till exempel diagram över antalet HTTP-fel:

Samlar loggar med Loki

Den standardiserade datakĂ€llan Loki Ă€r nĂ„got begrĂ€nsad i funktionalitet jĂ€mfört med datakĂ€llan Prometheus (till exempel kan man inte Ă€ndra legenden), men Loki kan kopplas in som en kĂ€lla av Typ Prometheus. Jag Ă€r osĂ€ker pĂ„ om detta Ă€r dokumenterat beteende, men enligt svaret frĂ„n utvecklarna “Hur konfigurerar man Loki som Prometheus datakĂ€lla? · Issue #1222 · grafana/loki”, till exempel, Ă€r detta fullt legitimt, och Loki Ă€r helt kompatibel med PromQL.

LÀgg till Loki som datakÀlla av typ Prometheus och lÀgg till URL /loki:

Samlar loggar med Loki

Och man kan skapa diagram som om vi arbetade med mÀtvÀrden frÄn Prometheus:

Samlar loggar med Loki

Jag tror att skillnaden i funktionalitet Àr tillfÀllig och att utvecklarna kommer att ÄtgÀrda detta i framtiden.

Samlar loggar med Loki

MÀtvÀrden

I Loki finns möjlighet att extrahera numeriska mÀtvÀrden frÄn loggar och skicka dem till Prometheus. Till exempel innehÄller nginx-loggen antalet byte för svaret, samt, vid viss modifiering av det standardiserade loggformatet, Àven tiden i sekunder som togs för svaret. Dessa data kan extraheras och skickas till Prometheus.

LÀgg till Ànnu en sektion i promtail.yml:

- match:
   selector: '{request_type="api"}'
   stages:
     - metrics:
         http_nginx_response_time:
           type: Histogram
           description: "svartid 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: "total svardata bytes"
           source: bytes_out
           config:
             action: add
         http_nginx_response_bytes_count:
           type: Counter
           description: "antal svardata bytes"
           source: bytes_out
           config:
             action: inc

Denna funktion gör det möjligt att definiera och uppdatera metrik baserat pĂ„ data frĂ„n den extraherade kartan. Dessa metrik skickas inte till Loki — de visas pĂ„ Promtail /metrics endpoint. Prometheus mĂ„ste vara konfigurerad för att hĂ€mta data som erhĂ„llits vid detta steg. I det givna exemplet för request_type=“api” samlar vi in histogrammmetrik. Detta typ av metrik gör det lĂ€tt att fĂ„ percentiler. För statiska resurser och bilder samlar vi summan av byte och antalet rader dĂ€r vi mottog byte, för att berĂ€kna medelvĂ€rdet.

LÀs mer om metrik hÀr.

Öppna porten pĂ„ Promtail:

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

Se till att metrik med prefixet promtail_custom har dykt upp:

Samlar loggar med Loki

Konfigurera Prometheus. LĂ€gg till jobb promtail:

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

Och rita upp en graf:

Samlar loggar med Loki

PÄ sÄ sÀtt kan man till exempel ta reda pÄ de fyra lÄngsammaste förfrÄgningarna. Dessutom kan man stÀlla in övervakning baserat pÄ dessa metrik.

Skalning

Loki kan köras antingen i en enkel lÀge (single binary mode) eller i en skalbar lÀge (horizontally-scalable mode). I det andra fallet kan det lagra data i molnet, dÀr chunkar och index lagras separat. I version 1.5 infördes möjligheten att lagra pÄ en plats, men det rekommenderas fortfarande att inte anvÀnda det i produktion.

Samlar loggar med Loki

Chunkar kan lagras i en S3-kompatibel lagring, för indexlagring bör man anvĂ€nda horisontellt skalbara databaser: Cassandra, BigTable eller DynamoDB. Övriga delar av Loki — Distributors (för skrivning) och Querier (för förfrĂ„gningar) — Ă€r stateless och kan Ă€ven skalas horisontellt.

Vid DevOpsDays konferensen i Vancouver 2019 nĂ€mnde en deltagare, Callum Styan, att hans projekt med Loki har petabytes av loggar med ett index som Ă€r mindre Ă€n 1% av den totala storleken: “Hur Loki korrelerar metrik och loggar — Och sparar dig pengar”.

JÀmförelse mellan Loki och ELK

Indexstorlek

För att testa den erhÄllna indexstorleken anvÀnde jag loggar frÄn en nginx-container, för vilken pipelinen som beskrevs ovan konfigurerades. Loggfilen innehöll 406 624 rader med en total storlek pÄ 109 MB. Loggarna genererades under en timme, ungefÀr 100 poster per sekund.

Exempel pÄ tvÄ rader frÄn loggen:

Samlar loggar med Loki

Vid indexering i ELK gav detta en indexstorlek pÄ 30,3 MB:

Samlar loggar med Loki

I fallet med Loki gav det ungefÀr 128 kB index och ungefÀr 3,8 MB data i chunkar. Det Àr vÀrt att notera att loggen var konstgjord och inte uppvisade stor datamÄngfald. En enkel gzip pÄ den ursprungliga dockerska JSON-loggen med data gav en kompression pÄ 95,4 %, och med tanke pÄ att endast den rensade nginx-loggen skickades till Loki, Àr kompressionen ner till 4 MB förklarlig. Det totala antalet unika vÀrden för Loki:s etiketter var 35, vilket förklarar den lilla storleken pÄ indexet. För ELK rensades loggen ocksÄ. SÄledes komprimerade Loki de ursprungliga uppgifterna med 96 %, medan ELK komprimerade med 70 %.

Minneförbrukning

Samlar loggar med Loki

Om man jÀmför hela Prometheus- och ELK-stacken, sÄ "Àter" Loki flera gÄnger mindre. Det Àr uppenbart att en tjÀnst pÄ Go anvÀnder mindre Àn en tjÀnst pÄ Java, och att jÀmföra storleken pÄ JVM Heap i Elasticsearch med den dedikerade minnesanvÀndningen för Loki Àr oegentligt, men det Àr ÀndÄ vÀrt att notera att Loki anvÀnder mycket mindre minne. Dess fördel nÀr det gÀller CPU Àr inte lika uppenbar, men finns ocksÄ.

Hastighet

Loki "slukar" loggar snabbare. Hastigheten beror pĂ„ mĂ„nga faktorer — vilka loggar det handlar om, hur sofistikerat vi parsar dem, nĂ€tverket, disken osv. — men den Ă€r definitivt högre Ă€n för ELK (i mitt test ungefĂ€r tvĂ„ gĂ„nger snabbare). Detta förklaras av att Loki lĂ€gger mycket mindre data i indexet och dĂ€rmed lĂ€gger mindre tid pĂ„ indexering. Med sökhastigheten Ă€r situationen den motsatta: Loki saktar ner pĂ„ data som Ă€r större Ă€n flera gigabyte, medan ELK:s sökhastighet inte beror pĂ„ datastorleken.

Sökning i loggar

Loki ligger avsevĂ€rt efter ELK nĂ€r det gĂ€ller sökmöjligheter i loggarna. Grep med reguljĂ€ra uttryck Ă€r kraftfullt, men det slĂ„r inte en mogen databas. Avsaknaden av range-frĂ„gor, aggregering endast efter etiketter, och oförmĂ„gan att söka utan etiketter — allt detta begrĂ€nsar vĂ„r förmĂ„ga att hitta intressant information i Loki. Detta innebĂ€r inte att du inte kan hitta nĂ„got med Loki, men det definierar arbetsflödet kring loggar, dĂ€r du först hittar problem i graferna i Prometheus och sedan söker efter vad som hĂ€nde i loggarna baserat pĂ„ dessa etiketter.

GrÀnssnitt

För det första, det Àr vackert (ursÀkta, jag kunde inte hÄlla mig). Grafana har ett ögonvÀnligt grÀnssnitt, men Kibana Àr mycket mer funktionellt.

Fördelar och nackdelar med Loki

Bland fördelarna kan nÀmnas att Loki integreras med Prometheus, vilket innebÀr att vi fÄr metrik och larm direkt. Den Àr bra för insamling och lagring av loggar frÄn Kubernetes Pods, dÄ den Àrver service discovery frÄn Prometheus och automatiskt lÀgger till etiketter.

Bland nackdelarna - svag dokumentation. Vissa saker, som Promtails funktioner och möjligheter, upptÀckte jag bara genom att studera koden, tack och lov för open-source. En annan nackdel Àr svaga parseringsmöjligheter. Till exempel kan Loki inte parsa multiline-loggar. Ytterligare en nackdel Àr att Loki Àr en relativt ung teknologi (version 1.0 slÀpptes i november 2019).

Slutsats

Loki Àr en 100% intressant teknologi som passar för smÄ och medelstora projekt, och gör det möjligt att hantera mÄnga uppgifter för loggaggregering, loggsökning, övervakning och analys av loggar.

Vi anvÀnder inte Loki pÄ Badoo, eftersom vi har en ELK-stack som passar oss och som under mÄnga Är har byggts ut med olika skrÀddarsydda lösningar. För oss Àr sökningen i loggar en kritisk frÄga. Med nÀstan 100 GB loggar per dag Àr det viktigt för oss att snabbt kunna hitta allt och lite till. För att bygga diagram och övervaka anvÀnder vi andra lösningar som Àr skrÀddarsydda för vÄra behov och som Àr integrerade med varandra. Loki-stacken har pÄtagliga fördelar, men den kommer inte att ge oss mer Àn vad vi redan har, och dess fördelar kommer definitivt inte att övervÀga kostnaden för migreringen.

Och Àven om det efter undersökningen blev klart att vi inte kan anvÀnda Loki, hoppas vi att detta inlÀgg kan hjÀlpa dig i ditt val.

Repository med koden som anvÀnds i artikeln finns ). Ett typiskt exempel pÄ anvÀndning:.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster