Vinkkejä ja temppuja strukturoimattomien tietojen muuntamiseen lokeista ELK-pinoon käyttämällä GROK:ia Logstashissa

Strukturoimaton data GROK:lla

Jos käytät Elastic (ELK) -pinoa ja olet kiinnostunut yhdistämään mukautetut Logstash-lokit Elasticsearchiin, tämä viesti on sinua varten.

Vinkkejä ja temppuja strukturoimattomien tietojen muuntamiseen lokeista ELK-pinoon käyttämällä GROK:ia Logstashissa

ELK-pino on lyhenne kolmesta avoimen lähdekoodin projektista: Elasticsearch, Logstash ja Kibana. Yhdessä ne muodostavat lokinhallintaalustan.

  • Elasticsearch on haku- ja analyyttinen järjestelmä.
  • Logstash on palvelinpuolen tietojenkäsittelyputki, joka syöttää tietoja useista lähteistä samanaikaisesti, muuntaa sen ja lähettää sen sitten "säilytykseen", kuten Elasticsearchiin.
  • Kibana avulla käyttäjät voivat visualisoida tietoja käyttämällä kaavioita ja kaavioita Elasticsearchissa.

Beats tuli myöhemmin ja on kevyt datalähettäjä. Beatsin esittely muutti Elk Stackin Elastic Stackiksi, mutta siitä ei ole kyse.

Tämä artikkeli käsittelee Grokia, joka on Logstashin ominaisuus, joka voi muuttaa lokit ennen kuin ne lähetetään säilytystilaan. Tarkoituksemme varten puhun vain Logstash-tietojen käsittelystä Elasticsearchiin.

Vinkkejä ja temppuja strukturoimattomien tietojen muuntamiseen lokeista ELK-pinoon käyttämällä GROK:ia Logstashissa

Grok on Logstashin sisällä oleva suodatin, jota käytetään jäsentämään jäsentämättömät tiedot jäsennellyksi ja kyselykelpoiseksi. Se sijaitsee säännöllisen lausekkeen (regex) päällä ja käyttää tekstimalleja lokitiedostojen merkkijonojen yhdistämiseen.

Kuten seuraavissa osissa näemme, Grokin käyttäminen on suuri ero tehokkaassa lokinhallinnassa.

Ilman Grokia lokitietosi ovat jäsentämättömiä

Vinkkejä ja temppuja strukturoimattomien tietojen muuntamiseen lokeista ELK-pinoon käyttämällä GROK:ia Logstashissa

Ilman Grokia, kun lokit lähetetään Logstashista Elasticsearchiin ja renderöidään Kibanassa, ne näkyvät vain viestin arvossa.

Tässä tilanteessa merkityksellisten tietojen kysely on vaikeaa, koska kaikki lokitiedot on tallennettu yhteen avaimeen. Olisi parempi, jos lokiviestit olisi paremmin järjestetty.

Strukturoimatonta tietoa lokeista

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

Jos tarkastelet raakadataa tarkasti, huomaat, että se koostuu itse asiassa eri osista, joista jokainen on erotettu välilyönnillä.

Kokeneemmat kehittäjät voivat luultavasti arvata, mitä kukin osa tarkoittaa ja mikä lokiviesti on API-kutsusta. Kunkin kohteen esittely on kuvattu alla.

Strukturoitu näkymä tiedoistamme

  • localhost == ympäristö
  • GET == -menetelmä
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == vastauksen_tila
  • ​ 46 ms == vasteaika
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Kuten strukturoidussa datassa näemme, jäsentelemättömille lokeille on tilaus. Seuraava vaihe on raakatietojen ohjelmistokäsittely. Täällä Grok loistaa.

Grok mallit

Sisäänrakennetut Grok-mallit

Logstashissa on yli 100 sisäänrakennettua mallia jäsentämättömän tiedon strukturoimiseksi. Sinun tulee ehdottomasti hyödyntää tätä aina kun mahdollista yleisissä syslogeissa, kuten apache, linux, haproxy, aws ja niin edelleen.

Mitä tapahtuu, kun sinulla on mukautettuja lokeja, kuten yllä olevassa esimerkissä? Sinun on rakennettava oma Grok-malli.

Mukautetut Grok-mallit

Sinun täytyy yrittää rakentaa oma Grok-mallisi. käytin Grok Debugger и Grokin kuviot.

Huomaa, että Grok-mallin syntaksi on seuraava: %{SYNTAX:SEMANTIC}

Ensimmäinen asia, jonka yritin tehdä, oli mennä välilehdelle Tutustu Grok-debuggerissa. Ajattelin, että olisi hienoa, jos tämä työkalu voisi luoda automaattisesti Grok-kuvion, mutta se ei ollut kovin hyödyllinen, koska se löysi vain kaksi vastaavuutta.

Vinkkejä ja temppuja strukturoimattomien tietojen muuntamiseen lokeista ELK-pinoon käyttämällä GROK:ia Logstashissa

Tämän löydön avulla aloin luoda oman mallini Grok-debuggerissa käyttämällä Elastic Github -sivulta löytyvää syntaksia.

Vinkkejä ja temppuja strukturoimattomien tietojen muuntamiseen lokeista ELK-pinoon käyttämällä GROK:ia Logstashissa

Erilaisten syntaksien kanssa leikkimisen jälkeen pystyin lopulta jäsentämään lokitiedot haluamallani tavalla.

Vinkkejä ja temppuja strukturoimattomien tietojen muuntamiseen lokeista ELK-pinoon käyttämällä GROK:ia Logstashissa

Grok Debugger -linkki https://grokdebug.herokuapp.com/

Alkuperäinen teksti:

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

Kuvio:

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

Mitä lopussa tapahtui

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

Kun Grok-malli ja kartoitetut tiedot ovat käsissä, viimeinen vaihe on lisätä se Logstashiin.

Päivitetään Logstash.conf-määritystiedostoa

Siirry Logstash-kokoonpanoon palvelimella, johon asensit ELK-pinon:

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

Liitä muutokset.

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

Kun olet tallentanut muutokset, käynnistä Logstash uudelleen ja tarkista sen tila varmistaaksesi, että se toimii edelleen.

sudo service logstash restart
sudo service logstash status

Lopuksi varmistaaksesi, että muutokset ovat tulleet voimaan, Muista päivittää Elasticsearch-indeksisi Logstashille Kibanassa!

Vinkkejä ja temppuja strukturoimattomien tietojen muuntamiseen lokeista ELK-pinoon käyttämällä GROK:ia Logstashissa

Grokin avulla lokitietosi on jäsennelty!

Vinkkejä ja temppuja strukturoimattomien tietojen muuntamiseen lokeista ELK-pinoon käyttämällä GROK:ia Logstashissa

Kuten yllä olevasta kuvasta näemme, Grok pystyy sovittamaan lokitiedot automaattisesti Elasticsearchin kanssa. Tämä helpottaa lokien hallintaa ja tietojen nopeaa kyselyä. Sen sijaan, että kaivelisit lokitiedostoja virheenkorjausta varten, voit yksinkertaisesti suodattaa etsimäsi perusteella, kuten ympäristön tai URL-osoitteen.

Kokeile Grokin ilmaisuja! Jos sinulla on jokin muu tapa tehdä tämä tai sinulla on ongelmia yllä olevien esimerkkien kanssa, kirjoita vain kommentti alle ja kerro minulle.

Kiitos, että luit – ja seuraa minua täällä Mediumissa saadaksesi lisää mielenkiintoisia ohjelmistosuunnitteluartikkeleita!

voimavarat

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 Lähdelinkki

Telegram-kanava Elasticsearch

Lähde: will.com

Lisää kommentti