Consells i trucs per convertir dades no estructurades dels registres a ELK Stack mitjançant GROK a Logstash

Estructuració de dades no estructurades amb GROK

Si utilitzeu la pila Elastic (ELK) i us interessa assignar registres de Logstash personalitzats a Elasticsearch, aquesta publicació és per a vosaltres.

Consells i trucs per convertir dades no estructurades dels registres a ELK Stack mitjançant GROK a Logstash

La pila ELK és l'acrònim de tres projectes de codi obert: Elasticsearch, Logstash i Kibana. Junts formen una plataforma de gestió de registres.

  • Elasticsearch és un sistema de recerca i anàlisi.
  • Logstash és una canalització de processament de dades del costat del servidor que ingereix dades de diverses fonts simultàniament, les transforma i després les envia a un "emmagatzematge" com ara Elasticsearch.
  • Kibana permet als usuaris visualitzar dades mitjançant gràfics i gràfics a Elasticsearch.

Beats va venir més tard i és un enviador de dades lleuger. La introducció de Beats va transformar l'Elk Stack en el Elastic Stack, però aquest no és el punt.

Aquest article tracta sobre Grok, que és una característica de Logstash que pot transformar els vostres registres abans que s'enviïn a l'emmagatzematge. Per als nostres propòsits, només parlaré del processament de dades de Logstash a Elasticsearch.

Consells i trucs per convertir dades no estructurades dels registres a ELK Stack mitjançant GROK a Logstash

Grok és un filtre dins de Logstash que s'utilitza per analitzar dades no estructurades en alguna cosa estructurada i consultable. Es troba a sobre d'una expressió regular (regex) i utilitza patrons de text per fer coincidir les cadenes dels fitxers de registre.

Com veurem a les seccions següents, l'ús de Grok marca una gran diferència quan es tracta d'una gestió eficient dels registres.

Sense Grok, les vostres dades de registre no estan estructurades

Consells i trucs per convertir dades no estructurades dels registres a ELK Stack mitjançant GROK a Logstash

Sense Grok, quan els registres s'envien des de Logstash a Elasticsearch i es representen a Kibana, només apareixen al valor del missatge.

Consultar informació significativa en aquesta situació és difícil perquè totes les dades de registre s'emmagatzemen en una sola clau. Seria millor que els missatges de registre estiguessin millor organitzats.

Dades no estructurades dels registres

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

Si observeu de prop les dades en brut, veureu que en realitat consta de diferents parts, cadascuna separada per un espai.

Per als desenvolupadors més experimentats, probablement podeu endevinar què significa cadascuna de les parts i quin és el missatge de registre de la trucada de l'API. A continuació es detalla la presentació de cada element.

Vista estructurada de les nostres dades

  • ​ localhost == entorn
  • Mètode GET ==
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == estat_resposta
  • 46 ms == temps_resposta
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Com veiem a les dades estructurades, hi ha un ordre per als registres no estructurats. El següent pas és el processament del programari de dades en brut. Aquí és on Grok brilla.

Plantilles Grok

Plantilles Grok integrades

Logstash inclou més de 100 plantilles integrades per estructurar dades no estructurades. Definitivament, hauríeu d'aprofitar-ho sempre que sigui possible per a syslogs generals com apache, linux, haproxy, aws, etc.

Tanmateix, què passa quan teniu registres personalitzats com a l'exemple anterior? Heu de crear la vostra pròpia plantilla Grok.

Plantilles Grok personalitzades

Heu d'intentar crear la vostra pròpia plantilla de Grok. jo solia Depurador Grok и Patrons de Grok.

Tingueu en compte que la sintaxi de la plantilla Grok és la següent: %{SYNTAX:SEMANTIC}

El primer que vaig intentar fer va ser anar a la pestanya Descobreix al depurador Grok. Vaig pensar que seria fantàstic que aquesta eina pogués generar automàticament un patró Grok, però no va ser massa útil ja que només va trobar dues coincidències.

Consells i trucs per convertir dades no estructurades dels registres a ELK Stack mitjançant GROK a Logstash

Amb aquest descobriment, vaig començar a crear la meva pròpia plantilla al depurador Grok utilitzant la sintaxi que es troba a la pàgina Elastic Github.

Consells i trucs per convertir dades no estructurades dels registres a ELK Stack mitjançant GROK a Logstash

Després de jugar amb diferents sintaxis, finalment vaig poder estructurar les dades de registre de la manera que volia.

Consells i trucs per convertir dades no estructurades dels registres a ELK Stack mitjançant GROK a Logstash

Enllaç del depurador de Grok https://grokdebug.herokuapp.com/

Text original:

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

Patró:

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

El que va passar al final

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

Amb la plantilla Grok i les dades mapejades a la mà, l'últim pas és afegir-la a Logstash.

S'està actualitzant el fitxer de configuració Logstash.conf

Al servidor on heu instal·lat la pila ELK, aneu a la configuració de Logstash:

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

Enganxeu els canvis.

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

Després de desar els canvis, reinicieu Logstash i comproveu-ne l'estat per assegurar-vos que encara funciona.

sudo service logstash restart
sudo service logstash status

Finalment, per assegurar-vos que els canvis han tingut efecte, Assegureu-vos d'actualitzar el vostre índex Elasticsearch per a Logstash a Kibana!

Consells i trucs per convertir dades no estructurades dels registres a ELK Stack mitjançant GROK a Logstash

Amb Grok, les vostres dades de registre estan estructurades!

Consells i trucs per convertir dades no estructurades dels registres a ELK Stack mitjançant GROK a Logstash

Com podem veure a la imatge de dalt, Grok és capaç de fer coincidir automàticament les dades de registre amb Elasticsearch. Això fa que sigui més fàcil gestionar els registres i consultar ràpidament la informació. En lloc d'excavar els fitxers de registre per depurar, simplement podeu filtrar pel que esteu buscant, com ara un entorn o una URL.

Prova les expressions de Grok! Si teniu una altra manera de fer-ho o teniu cap problema amb els exemples anteriors, només cal que escriviu un comentari a continuació per avisar-me.

Gràcies per llegir-me i, si us plau, seguiu-me aquí a Medium per obtenir articles d'enginyeria de programari més interessants!

Recursos

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 Enllaç a la font

Canal de Telegram per Elasticsearch

Font: www.habr.com

Afegeix comentari