Näpunäiteid ja näpunäiteid struktureerimata andmete teisendamiseks logidest ELK Stacki, kasutades GROK-i LogStashis

Struktureerimata andmete struktureerimine GROK-iga

Kui kasutate elastset (ELK) virna ja olete huvitatud kohandatud Logstashi logide kaardistamisest Elasticsearchiga, siis see postitus on teie jaoks.

Näpunäiteid ja näpunäiteid struktureerimata andmete teisendamiseks logidest ELK Stacki, kasutades GROK-i LogStashis

ELK virn on kolme avatud lähtekoodiga projekti akronüüm: Elasticsearch, Logstash ja Kibana. Koos moodustavad nad logihaldusplatvormi.

  • Elasticsearch on otsingu- ja analüüsisüsteem.
  • Logstash on serveripoolne andmetöötluskonveier, mis neelab andmeid samaaegselt mitmest allikast, teisendab need ja saadab need seejärel „käru”, näiteks Elasticsearchi.
  • Kibana võimaldab kasutajatel visualiseerida andmeid Elasticsearchi diagrammide ja graafikute abil.

Beats tuli hiljem ja on kerge andmesaatja. Beatsi kasutuselevõtt muutis Elk Stacki elastseks stackiks, kuid see pole mõte.

See artikkel käsitleb Groki, mis on Logstashi funktsioon, mis võib teie logisid enne nende hoidlasse saatmist muuta. Meie eesmärkidel räägin ainult Logstashi andmete töötlemisest Elasticsearchi.

Näpunäiteid ja näpunäiteid struktureerimata andmete teisendamiseks logidest ELK Stacki, kasutades GROK-i LogStashis

Grok on Logstashi sees olev filter, mida kasutatakse struktureerimata andmete sõelumiseks millekski struktureeritud ja päringute tegemiseks. See asub regulaaravaldise (regex) peal ja kasutab logifailide stringide sobitamiseks tekstimustreid.

Nagu näeme järgmistes jaotistes, muudab Groki kasutamine tõhusa logihalduse jaoks suure erinevuse.

Ilma Grokita on teie logiandmed struktureerimata

Näpunäiteid ja näpunäiteid struktureerimata andmete teisendamiseks logidest ELK Stacki, kasutades GROK-i LogStashis

Ilma Grokita, kui logid saadetakse Logstash'ist Elasticsearchi ja renderdatakse Kibanas, kuvatakse need ainult sõnumi väärtuses.

Sellises olukorras on sisulise teabe päringuid raske teha, kuna kõik logiandmed salvestatakse ühte võtmesse. Parem oleks, kui logiteated oleksid paremini organiseeritud.

Struktureerimata andmed logidest

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

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

Kogenumad arendajad võivad ilmselt arvata, mida iga osa tähendab ja mis see logiteade API-kõnest pärineb. Iga üksuse esitlus on kirjeldatud allpool.

Meie andmete struktureeritud vaade

  • localhost == keskkond
  • GET == meetod
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == vastuse_olek
  • ​ 46 ms == vastuse_aeg
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Nagu näeme struktureeritud andmete puhul, on struktureerimata logide jaoks järjekord. Järgmine samm on algandmete tarkvaraline töötlemine. See on koht, kus Grok särab.

Groki mallid

Sisseehitatud Groki mallid

Logstash sisaldab üle 100 sisseehitatud malli struktureerimata andmete struktureerimiseks. Kui vähegi võimalik, peaksite seda kindlasti kasutama üldiste syslogide jaoks, nagu apache, linux, haproxy, aws jne.

Mis aga juhtub, kui teil on kohandatud logid, nagu ülaltoodud näites? Peate looma oma Groki malli.

Kohandatud Groki mallid

Peate proovima luua oma Groki malli. ma kasutasin Groki silur и Groki mustrid.

Pange tähele, et Groki malli süntaks on järgmine: %{SYNTAX:SEMANTIC}

Esimese asjana proovisin minna vahelehele Avasta Groki siluris. Arvasin, et oleks lahe, kui see tööriist genereeriks automaatselt Groki mustri, kuid see polnud liiga kasulik, kuna leidis ainult kaks vastet.

Näpunäiteid ja näpunäiteid struktureerimata andmete teisendamiseks logidest ELK Stacki, kasutades GROK-i LogStashis

Seda avastust kasutades hakkasin looma Groki siluris oma malli, kasutades Elastic Githubi lehelt leitud süntaksit.

Näpunäiteid ja näpunäiteid struktureerimata andmete teisendamiseks logidest ELK Stacki, kasutades GROK-i LogStashis

Pärast erinevate süntaksitega mängimist suutsin lõpuks logiandmed struktureerida nii, nagu soovisin.

Näpunäiteid ja näpunäiteid struktureerimata andmete teisendamiseks logidest ELK Stacki, kasutades GROK-i LogStashis

Groki siluri link https://grokdebug.herokuapp.com/

Originaaltekst:

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

Muster:

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

Mis lõpus juhtus

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

Kui Groki mall ja kaardistatud andmed on käes, on viimane samm lisada see Logstashi.

Konfiguratsioonifaili Logstash.conf värskendamine

Avage serveris, kuhu ELK pinu installisite, Logstashi konfiguratsiooni:

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

Kleepige muudatused.

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 ikka töötab.

sudo service logstash restart
sudo service logstash status

Lõpuks veendumaks, et muudatused on jõustunud, Värskendage kindlasti oma Elasticsearchi indeksit Logstashi jaoks Kibanas!

Näpunäiteid ja näpunäiteid struktureerimata andmete teisendamiseks logidest ELK Stacki, kasutades GROK-i LogStashis

Grokiga on teie logiandmed struktureeritud!

Näpunäiteid ja näpunäiteid struktureerimata andmete teisendamiseks logidest ELK Stacki, kasutades GROK-i LogStashis

Nagu ülaltoodud pildil näeme, on Grok võimeline logiandmeid Elasticsearchiga automaatselt sobitama. See muudab logide haldamise ja teabe kiire päringu lihtsamaks. Selle asemel, et siluda logifailides, saate lihtsalt filtreerida otsitava (nt keskkonna või URL-i) järgi.

Proovige Groki väljendeid! Kui teil on selleks mõni muu viis või teil on ülaltoodud näidetega probleeme, kirjutage mulle lihtsalt allpool kommentaar.

Täname lugemise eest ja jälgige mind siin Mediumis, et saada huvitavamaid tarkvaratehnikaartikleid!

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/

PS Link allikale

Telegrami kanal Elasticsearch

Allikas: www.habr.com

Lisa kommentaar