Suggerimenti e raccomandazioni per trasformare dati non strutturati dai log in ELK Stack utilizzando GROK in LogStash

Strutturazione di dati non strutturati con GROK

Se stai usando Elastic Stack (ELK) e sei interessato a mappare i log utente di Logstash con Elasticsearch, questo post fa per te.

Suggerimenti e raccomandazioni per trasformare dati non strutturati dai log in ELK Stack utilizzando GROK in LogStash

Il stack ELK è un acronimo per tre progetti open source: Elasticsearch, Logstash e Kibana. Insieme formano una piattaforma per la gestione dei log.

  • Elasticsearch è un sistema di ricerca e analisi.
  • Logstash è un server di elaborazione dati che riceve dati da più fonti contemporaneamente, li trasforma e quindi li invia a un “deposito”, come Elasticsearch.
  • Kibana consente agli utenti di visualizzare i dati tramite grafici e diagrammi in Elasticsearch.

Beats è stato introdotto in seguito ed è un leggero spedizioniere di dati. L'introduzione di Beats ha trasformato ELK Stack in Elastic Stack, ma questo non è il punto principale.

Questo articolo è dedicato a Grok, una funzionalità in Logstash che è in grado di trasformare i tuoi log prima che vengano inviati nell'archivio. Per i nostri scopi, parlerò solo dell'elaborazione dei dati da Logstash a Elasticsearch.

Suggerimenti e raccomandazioni per trasformare dati non strutturati dai log in ELK Stack utilizzando GROK in LogStash

Grok è un filtro all'interno di Logstash utilizzato per analizzare dati non strutturati e convertirli in qualcosa di strutturato e interrogabile. Si basa sulle espressioni regolari (regex) e utilizza modelli di testo per abbinare le righe nei file di log.

Come vedremo nelle sezioni successive, l'uso di Grok è fondamentale per la gestione efficace dei log.

Senza Grok, i tuoi dati di log sono non strutturati.

Suggerimenti e raccomandazioni per trasformare dati non strutturati dai log in ELK Stack utilizzando GROK in LogStash

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

La richiesta di informazioni significative in questa situazione è problematica, poiché tutti i dati di log sono memorizzati in un'unica chiave. Sarebbe meglio se i messaggi di log fossero organizzati in modo più efficiente.

Dati non strutturati dai log

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

Se guardi attentamente i dati grezzi, noterai che sono effettivamente composti da diverse parti, ciascuna delle quali è separata da uno spazio.

Per gli sviluppatori più esperti, probabilmente puoi intuire cosa significhi ciascuna parte e che si tratta di un messaggio di log da una chiamata API. La rappresentazione di ciascun punto è riportata di seguito.

Visione strutturata dei nostri dati

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

Come vediamo nei dati strutturati, esiste un ordine per i log non strutturati. Il passo successivo è l'elaborazione programmatica dei dati grezzi. Qui è dove Grok brilla.

Modelli Grok

Template Grok incorporati

Logstash viene fornito con oltre 100 modelli incorporati per strutturare i dati non strutturati. Dovresti assolutamente sfruttare questo vantaggio quando possibile per log di sistema comuni, come apache, linux, haproxy, aws e così via.

Tuttavia, cosa succede quando hai log personalizzati, come nell'esempio sopra? Devi costruire il tuo stesso modello Grok.

Modelli personalizzati Grok

Devi provare per costruire il tuo modello Grok. Ho usato Grok Debugger e Modelli Grok.

Tieni presente che la sintassi dei modelli Grok è la seguente: %{SYNTAX:SEMANTIC}

La prima cosa che ho cercato di fare è stata passare alla scheda Scopri nel debugger Grok. Ho pensato sarebbe stato utile se questo strumento potesse generare automaticamente un modello Grok, ma non è stato molto utile, poiché ha trovato solo due corrispondenze.

Suggerimenti e raccomandazioni per trasformare dati non strutturati dai log in ELK Stack utilizzando GROK in LogStash

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

Suggerimenti e raccomandazioni per trasformare dati non strutturati dai log in ELK Stack utilizzando GROK in LogStash

Sperimentando con diverse sintassi, sono finalmente riuscito a strutturare i dati di registro come desideravo.

Suggerimenti e raccomandazioni per trasformare dati non strutturati dai log in ELK Stack utilizzando GROK in LogStash

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

Testo sorgente:

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

Modello:

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

Il risultato finale è stato

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

Con il template Grok e i dati mappati a disposizione, l'ultimo passo è aggiungerlo a Logstash.

Aggiornamento del file di configurazione Logstash.conf

Sul server su cui hai installato lo stack ELK, vai alla configurazione di 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 assicurarti che le modifiche abbiano avuto effetto, aggiorna l'indice Elasticsearch per Logstash in Kibana!

Suggerimenti e raccomandazioni per trasformare dati non strutturati dai log in ELK Stack utilizzando GROK in LogStash

Con Grok i tuoi dati dai log sono strutturati!

Suggerimenti e raccomandazioni per trasformare dati non strutturati dai log in ELK Stack utilizzando GROK in LogStash

Come possiamo vedere nell'immagine sopra, Grok è in grado di mappare automaticamente i dati di log su Elasticsearch. Questo semplifica la gestione dei log e la rapida interrogazione delle informazioni. Invece di frugare nei file di log per il debug, puoi semplicemente filtrare ciò che stai cercando, come l'ambiente o l'URL.

Prova a dare una possibilità alle espressioni Grok! Se hai un altro modo per farlo o hai problemi con gli esempi sopra, lascia semplicemente un commento qui sotto per farmelo sapere.

Grazie per la lettura — e, per favore, seguimi qui su Medium per articoli più interessanti sulla programmazione!

Risorse

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/

P.S Collegamento alla fonte

Canale Telegram su Elasticsearch

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster