Patarimai ir gudrybės, kaip konvertuoti nestruktūrizuotus duomenis iš žurnalų į ELK Stack naudojant GROK programoje LogStash

Nestruktūruotų duomenų struktūrizavimas naudojant GROK

Jei naudojate Elastic (ELK) krūvą ir norite susieti pasirinktinius Logstash žurnalus su Elasticsearch, šis įrašas skirtas jums.

Patarimai ir gudrybės, kaip konvertuoti nestruktūrizuotus duomenis iš žurnalų į ELK Stack naudojant GROK programoje LogStash

ELK stack yra trijų atvirojo kodo projektų akronimas: Elasticsearch, Logstash ir Kibana. Kartu jie sudaro žurnalų valdymo platformą.

  • Elasticearch yra paieškos ir analizės sistema.
  • „Logstash“ yra serverio duomenų apdorojimo dujotiekis, kuris vienu metu gauna duomenis iš kelių šaltinių, juos transformuoja ir siunčia į „atlicināt“, pvz., „Elasticsearch“.
  • kibana leidžia vartotojams vizualizuoti duomenis naudojant Elasticsearch diagramas ir grafikus.

Beats atsirado vėliau ir yra lengvas duomenų siuntėjas. Beats pristatymas pavertė Elk Stack į Elastic Stack, bet tai ne esmė.

Šis straipsnis yra apie „Grok“, kuri yra „Logstash“ funkcija, kuri gali pakeisti jūsų žurnalus prieš juos siunčiant į atmintinę. Mūsų tikslais kalbėsiu tik apie duomenų apdorojimą iš „Logstash“ į „Elasticsearch“.

Patarimai ir gudrybės, kaip konvertuoti nestruktūrizuotus duomenis iš žurnalų į ELK Stack naudojant GROK programoje LogStash

„Grok“ yra „Logstash“ filtras, naudojamas nestruktūriniams duomenims išanalizuoti į struktūrizuotą ir užklausą. Jis yra ant reguliariosios išraiškos (regex) ir naudoja teksto šablonus, kad atitiktų žurnalo failų eilutes.

Kaip matysime tolesniuose skyriuose, naudojant „Grok“ yra didelis skirtumas, kai reikia efektyviai valdyti žurnalus.

Be Grok jūsų žurnalo duomenys yra nestruktūrizuoti

Patarimai ir gudrybės, kaip konvertuoti nestruktūrizuotus duomenis iš žurnalų į ELK Stack naudojant GROK programoje LogStash

Be Groko, kai žurnalai siunčiami iš „Logstash“ į „Elasticsearch“ ir pateikiami „Kibana“, jie rodomi tik pranešimo reikšmėje.

Šioje situacijoje sudėtinga pateikti prasmingos informacijos užklausą, nes visi žurnalo duomenys saugomi viename rakte. Būtų geriau, jei žurnalo pranešimai būtų geriau sutvarkyti.

Nestruktūruoti duomenys iš žurnalų

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

Jei atidžiai pažvelgsite į neapdorotus duomenis, pamatysite, kad jie iš tikrųjų susideda iš skirtingų dalių, kurių kiekviena atskirta tarpu.

Labiau patyrę kūrėjai tikriausiai gali atspėti, ką reiškia kiekviena dalis ir koks tas žurnalo pranešimas iš API iškvietimo. Toliau pateikiamas kiekvieno elemento pristatymas.

Struktūrizuotas mūsų duomenų vaizdas

  • localhost == aplinka
  • GET == metodas
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == atsakymo_būsena
  • ​ 46 ms = = atsako_laikas
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Kaip matome struktūriniuose duomenyse, yra nestruktūruotų žurnalų tvarka. Kitas žingsnis yra neapdorotų duomenų programinė įranga. Čia grokas šviečia.

Groko šablonai

Integruoti Grok šablonai

„Logstash“ turi daugiau nei 100 integruotų šablonų, skirtų nestruktūrizuotiems duomenims struktūrizuoti. Turėtumėte tikrai pasinaudoti šia galimybe, kai tik įmanoma, naudodami bendruosius sistemos žurnalus, tokius kaip apache, linux, haproxy, aws ir pan.

Tačiau kas atsitiks, kai turite pasirinktinius žurnalus, kaip nurodyta aukščiau pateiktame pavyzdyje? Turite sukurti savo Grok šabloną.

Pasirinktiniai Grok šablonai

Turite pabandyti sukurti savo Grok šabloną. aš naudojau Grok Debugger и Groko raštai.

Atminkite, kad Grok šablono sintaksė yra tokia: %{SYNTAX:SEMANTIC}

Pirmas dalykas, kurį bandžiau padaryti, buvo eiti į skirtuką Atraskite Grok deriklyje. Maniau, kad būtų puiku, jei šis įrankis galėtų automatiškai sugeneruoti Groko šabloną, bet tai nebuvo labai naudinga, nes rado tik du atitikmenis.

Patarimai ir gudrybės, kaip konvertuoti nestruktūrizuotus duomenis iš žurnalų į ELK Stack naudojant GROK programoje LogStash

Naudodamas šį atradimą, aš pradėjau kurti savo šabloną Grok deriklyje, naudodamas sintaksę, esančią Elastic Github puslapyje.

Patarimai ir gudrybės, kaip konvertuoti nestruktūrizuotus duomenis iš žurnalų į ELK Stack naudojant GROK programoje LogStash

Pažaidęs su skirtingomis sintaksėmis, pagaliau galėjau struktūrizuoti žurnalo duomenis taip, kaip norėjau.

Patarimai ir gudrybės, kaip konvertuoti nestruktūrizuotus duomenis iš žurnalų į ELK Stack naudojant GROK programoje LogStash

Grok Debugger nuoroda https://grokdebug.herokuapp.com/

Originalus tekstas:

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

Tiražas:

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

Kas nutiko pabaigoje

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

Turėdami „Grok“ šabloną ir susietus duomenis, paskutinis veiksmas yra pridėti jį prie „Logstash“.

Logstash.conf konfigūracijos failo atnaujinimas

Serveryje, kuriame įdiegėte ELK krūvą, eikite į „Logstash“ konfigūraciją:

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

Įklijuokite pakeitimus.

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

Išsaugoję pakeitimus iš naujo paleiskite „Logstash“ ir patikrinkite jo būseną, kad įsitikintumėte, jog jis vis dar veikia.

sudo service logstash restart
sudo service logstash status

Galiausiai, norėdami įsitikinti, kad pakeitimai įsigaliojo, Būtinai atnaujinkite savo Elasticsearch indeksą Logstash Kibanoje!

Patarimai ir gudrybės, kaip konvertuoti nestruktūrizuotus duomenis iš žurnalų į ELK Stack naudojant GROK programoje LogStash

Su Grok jūsų žurnalo duomenys yra struktūrizuoti!

Patarimai ir gudrybės, kaip konvertuoti nestruktūrizuotus duomenis iš žurnalų į ELK Stack naudojant GROK programoje LogStash

Kaip matome aukščiau esančiame paveikslėlyje, Grokas gali automatiškai suderinti žurnalo duomenis su Elasticsearch. Taip lengviau tvarkyti žurnalus ir greitai pateikti informacijos užklausas. Užuot naršę žurnalo failus norėdami derinti, galite tiesiog filtruoti pagal tai, ko ieškote, pvz., aplinką arba URL.

Išbandykite Groko posakius! Jei turite kitą būdą tai padaryti arba turite kokių nors problemų dėl aukščiau pateiktų pavyzdžių, tiesiog parašykite komentarą žemiau, kad praneštumėte man.

Dėkojame, kad skaitėte – ir sekite mane čia „Medium“, kad gautumėte daugiau įdomių programinės įrangos inžinerijos straipsnių!

Ištekliai

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/

PS Šaltinio nuoroda

Telegram kanalas pagal Elasticearch

Šaltinis: www.habr.com

Добавить комментарий