Näpunäited ja soovitused struktureerimata andmete teisendamiseks logidest ELK Stackis, kasutades GROK-i LogStashis.

Struktureerimata andmete struktuurimine GROK abil

Kui kasutate Elastic (ELK) steiki ja olete huvitatud Logstashi kasutajate logide vastavusest Elasticsearchi, on see postitus teie jaoks.

Näpunäited ja soovitused struktureerimata andmete teisendamiseks logidest ELK Stackis, kasutades GROK-i LogStashis.

ELK steik on kolm avatud lähtekoodiga projekti: Elasticsearch, Logstash ja Kibana. Koos loovad nad logihalduse platvormi.

  • Elasticsearch – see on otsing ja analüüsisüsteem.
  • Logstash – see on andmete töötlemise serverikontsesioon, mis võtab andmeid mitmest allikast korraga vastu, muudab need ja saadab seejärel “majakasse”, näiteks Elasticsearchi.
  • Kibana Kibana võimaldab kasutajatel visualiseerida andmeid diagrammide ja graafikute abil Elasticsearchis.

Beats ilmus hiljem ja on kerge andmeedastaja. Beatsi tutvustamine muutis ELK steigi Elastic steigiks, kuid see pole peamine.

See artikkel keskendub Grokile, mis on Logstashi funktsioon, mis suudab teie logisid muuta, enne kui need maimasse saadetakse. Meie eesmärkide jaoks räägin ma ainult Logstashi andmete töötlemisest Elasticsearchis.

Näpunäited ja soovitused struktureerimata andmete teisendamiseks logidest ELK Stackis, kasutades GROK-i LogStashis.

Grok on Logstashi sisalduv filtr, mida kasutatakse struktuurimata andmete töötlemiseks struktuureeritud ja päringutele vastavaks formaatideks. See asub regulaarsete väljende (regex) peal ja kasutab tekstimalle logifailide ridade sidumiseks.

Nagu me näeme järgmistes jaotistes, on Groki kasutamine ülioluline, kui rääkida logihalduse tõhususest.

Ilma Grokita on teie logiandmed struktuurimata.

Näpunäited ja soovitused struktureerimata andmete teisendamiseks logidest ELK Stackis, kasutades GROK-i LogStashis.

Ilma Grokita ilmuvad logid, kui need saadetakse Logstashist Elasticsearchi ja visualiseeritakse Kibanas, ainult sõnumi väärtuses.

Olulise teabe pärimine selgelt on keeruline, kuna kõik logiandmed on salvestatud ühes võtmes. Oleks parem, kui logisõnumid oleksid paremini korraldatud.

Struktuurimata andmed logidest

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Kui vaatate tooreid andmeid hoolikalt, näete, et need koosnevad tegelikult erinevatest osadest, millest igaüks on eraldatud tühikuga.

Kogen arendajad saavad ilmselt aru, mida iga osa tähendab ja et see logisõnum pärineb API-kutsest. Allpool on toodud iga punkti seletus.

Meie andmete struktureeritud vaade

  • localhost == keskkond
  • GET == meetod
  • /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == response_status
  • 46ms == response_time
  • 5bc6e716b5d6cb35fc9687c0 == user_id

Nagu näeme struktureeritud andmetes, on seal järjekord mittestruktureeritud logide jaoks. Järgmine samm on toorandmete programmeeritud töötlemine. Just siin särab Grok.

Grok'i mallid

Sisseehitatud Grok'i mallid

Logstash on varustatud enam kui 100 sisseehitatud malliga mittestruktureeritud andmete struktureerimiseks. Te peaksite kindlasti seda võimalust ära kasutama, kui võimalik, üldiste süsteemilogide jaoks, nagu apache, linux, haproxy, aws jne.

Aga mis juhtub, kui teil on kohandatud logid, nagu ülaltoodud näites? Peate oma Grok'i malli looma.

Kohandatud Grok'i mallid

Proovige oma Grok'i malli loomiseks. Olen kasutanud Grok Debugger ja Grok'i mustrid.

Pange tähele, et Grok mallide süntaks näeb välja järgmine: %{SYNTAX:SEMANTIC}

Esimene asi, mida proovisin teha, oli minna vahelehele Discover Grok siluri. Mõtlesin, et oleks tore, kui see tööriist suudaks automaatselt genereerida Grok malli, kuid see ei olnud eriti kasulik, kuna see leidis ainult kaks vastet.

Näpunäited ja soovitused struktureerimata andmete teisendamiseks logidest ELK Stackis, kasutades GROK-i LogStashis.

Kasutasin seda avastust, et alustada omaenda malli loomist Grok siluris, kasutades süntaksit, mille leidsin Github Elastic lehelt.

Näpunäited ja soovitused struktureerimata andmete teisendamiseks logidest ELK Stackis, kasutades GROK-i LogStashis.

Mängides erinevate süntaksitega, suutsin lõpuks struktureerida logi andmed nii, nagu soovis.

Näpunäited ja soovitused struktureerimata andmete teisendamiseks logidest ELK Stackis, kasutades GROK-i LogStashis.

Link Grok silurile https://grokdebug.herokuapp.com/

Algne tekst:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Muster:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

See, mis lõpuks välja tuli

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Käesoleva Grok malli ja vastandatud andmetega on viimane samm lisada see Logstashi.

Logstash.conf konfiguratsioonifaili uuendamine

Serveril, kuhu olete paigaldanud ELK stacki, minge Logstashi konfiguratsiooni:

sudo vi /etc/logstash/conf.d/logstash.conf

Kasutage muudatusi.

input { 
  file {
    path => "/your_logs/*.log"
  }
}
filter{
  grok {
    match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
  }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

Pärast muudatuste salvestamist taaskäivitage Logstash ja kontrollige selle olekut, et veenduda, et see töötab endiselt.

sudo service logstash restart
sudo service logstash status

Lõpuks, et veenduda, et muudatused on jõustunud, uuendage kindlasti Elasticsearchi indeksit Logstashi jaoks Kibanas!

Näpunäited ja soovitused struktureerimata andmete teisendamiseks logidest ELK Stackis, kasutades GROK-i LogStashis.

Grokiga on teie logid struktuursed!

Näpunäited ja soovitused struktureerimata andmete teisendamiseks logidest ELK Stackis, kasutades GROK-i LogStashis.

Nagu näeme ülaltoodud pildilt, suudab Grok automaatselt sobitada logiandmeid Elasticsearchiga. See lihtsustab logide haldamist ja kiiret teabe pärimist. Selle asemel, et kaevuda logifailidesse tõrkeotsingul, saate lihtsalt filtreerida selle, mida otsite, nagu keskkond või url.

Proovige Grok expressions 'i! Kui teil on mõni muu viis, kuidas seda teha, või kui teil on küsimusi eelnevate näidete osas, kirjutage lihtsalt allpool kommentaar, et mulle teada anda.

Aitäh lugemast — ja palun jälgige mind siin, Mediumis, et saada rohkem huvitavaid artikleid tarkvarainseneri teemal!

Ressursid

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

P.S Allika link

Telegrami kanal Elasticsearch

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster