Suggerimenti e trucchi per convertire i dati non strutturati dai log allo stack ELK utilizzando GROK in LogStash

Strutturare dati non strutturati con GROK

Se utilizzi lo stack Elastic (ELK) e sei interessato a mappare i log Logstash personalizzati su Elasticsearch, questo post fa per te.

Suggerimenti e trucchi per convertire i dati non strutturati dai log allo stack ELK utilizzando GROK in LogStash

Lo stack ELK è l'acronimo di tre progetti open source: Elasticsearch, Logstash e Kibana. Insieme formano una piattaforma di gestione dei log.

  • elasticsearch è un sistema di ricerca e analisi.
  • Logstash è una pipeline di elaborazione dati lato server che acquisisce dati da più fonti contemporaneamente, li trasforma e quindi li invia a una "stash" come Elasticsearch.
  • Kibana consente agli utenti di visualizzare i dati utilizzando diagrammi e grafici in Elasticsearch.

Beats è arrivato più tardi ed è un trasportatore di dati leggero. L'introduzione di Beats ha trasformato l'Elk Stack nell'Elastic Stack, ma non è questo il punto.

Questo articolo riguarda Grok, una funzionalità di Logstash che può trasformare i tuoi log prima che vengano inviati allo stash. Per i nostri scopi, parlerò solo dell'elaborazione dei dati da Logstash in Elasticsearch.

Suggerimenti e trucchi per convertire i dati non strutturati dai log allo stack ELK utilizzando GROK in LogStash

Grok è un filtro all'interno di Logstash che viene utilizzato per analizzare i dati non strutturati in qualcosa di strutturato e interrogabile. Si trova sopra un'espressione regolare (regex) e utilizza modelli di testo per abbinare le stringhe nei file di registro.

Come vedremo nelle sezioni seguenti, l'utilizzo di Grok fa una grande differenza quando si tratta di una gestione efficiente dei log.

Senza Grok i tuoi dati di registro non sono strutturati

Suggerimenti e trucchi per convertire i dati non strutturati dai log allo stack ELK utilizzando GROK in LogStash

Senza Grok, quando i log vengono inviati da Logstash a Elasticsearch e renderizzati in Kibana, appaiono solo nel valore del messaggio.

Richiedere informazioni significative in questa situazione è difficile perché tutti i dati di registro sono archiviati in un'unica chiave. Sarebbe meglio se i messaggi di registro fossero organizzati meglio.

Dati non strutturati dai log

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

Se osservi attentamente i dati grezzi, vedrai che in realtà sono costituiti da parti diverse, ciascuna separata da uno spazio.

Per gli sviluppatori più esperti, probabilmente puoi indovinare cosa significa ciascuna parte e quale messaggio di registro proviene dalla chiamata API. La presentazione di ciascuna voce è descritta di seguito.

Visualizzazione strutturata dei nostri dati

  • ​ localhost == ambiente
  • ​ GET == metodo
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == stato_risposta
  • ​ 46ms == tempo_risposta
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Come vediamo nei dati strutturati, esiste un ordine per i log non strutturati. Il passo successivo è l'elaborazione software dei dati grezzi. È qui che Grok brilla.

Modelli Grok

Modelli Grok integrati

Logstash viene fornito con oltre 100 modelli integrati per strutturare dati non strutturati. Dovresti assolutamente trarne vantaggio quando possibile per syslog generali come apache, linux, haproxy, aws e così via.

Tuttavia, cosa succede quando disponi di registri personalizzati come nell'esempio sopra? Devi creare il tuo modello Grok.

Modelli Grok personalizzati

Devi provare a creare il tuo modello Grok. ero solito Grok Debugger и Modelli Grok.

Tieni presente che la sintassi del modello Grok è la seguente: %{SYNTAX:SEMANTIC}

La prima cosa che ho provato a fare è stata andare alla scheda Scoprire nel debugger di Grok. Ho pensato che sarebbe stato bello se questo strumento potesse generare automaticamente un pattern Grok, ma non era molto utile poiché trovava solo due corrispondenze.

Suggerimenti e trucchi per convertire i dati non strutturati dai log allo stack ELK utilizzando GROK in LogStash

Utilizzando questa scoperta, ho iniziato a creare il mio modello nel debugger Grok utilizzando la sintassi trovata nella pagina Elastic Github.

Suggerimenti e trucchi per convertire i dati non strutturati dai log allo stack ELK utilizzando GROK in LogStash

Dopo aver giocato con diverse sintassi, sono finalmente riuscito a strutturare i dati di registro come volevo.

Suggerimenti e trucchi per convertire i dati non strutturati dai log allo stack ELK utilizzando GROK in LogStash

Collegamento al debugger di Grok https://grokdebug.herokuapp.com/

Testo originale:

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

Motivo:

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

Cosa è successo alla fine

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

Con il modello Grok e i dati mappati in mano, l'ultimo passaggio è aggiungerlo a Logstash.

Aggiornamento del file di configurazione Logstash.conf

Sul server su cui hai installato lo stack ELK, vai alla configurazione Logstash:

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

Incolla le modifiche.

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

Dopo aver salvato le modifiche, riavvia Logstash e controlla il suo stato per assicurarti che funzioni ancora.

sudo service logstash restart
sudo service logstash status

Infine, per garantire che le modifiche abbiano avuto effetto, Assicurati di aggiornare il tuo indice Elasticsearch per Logstash in Kibana!

Suggerimenti e trucchi per convertire i dati non strutturati dai log allo stack ELK utilizzando GROK in LogStash

Con Grok i tuoi dati di log sono strutturati!

Suggerimenti e trucchi per convertire i dati non strutturati dai log allo stack ELK utilizzando GROK in LogStash

Come possiamo vedere nell'immagine sopra, Grok è in grado di abbinare automaticamente i dati di registro con Elasticsearch. Ciò semplifica la gestione dei registri e l'interrogazione rapida delle informazioni. Invece di scavare nei file di registro per eseguire il debug, puoi semplicemente filtrare in base a ciò che stai cercando, ad esempio un ambiente o un URL.

Prova le espressioni Grok! Se conosci un altro modo per farlo o riscontri problemi con gli esempi sopra, scrivi semplicemente un commento qui sotto per farcelo sapere.

Grazie per aver letto e seguimi qui su Medium per articoli più interessanti sull'ingegneria del software!

Ресурсы

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 Fonte di riferimento

Canale Telegram di elasticsearch

Fonte: habr.com

Aggiungi un commento