Logstash - Guida rapida

Logstash è uno strumento basato sui modelli di filtri / pipe per la raccolta, l'elaborazione e la generazione di log o eventi. Aiuta a centralizzare e fare analisi in tempo reale di registri ed eventi da diverse fonti.

Logstash è scritto sul linguaggio di programmazione JRuby che gira su JVM, quindi puoi eseguire Logstash su diverse piattaforme. Raccoglie diversi tipi di dati come log, pacchetti, eventi, transazioni, dati timestamp, ecc. Da quasi ogni tipo di sorgente. La fonte dei dati può essere dati social, e-commerce, articoli di notizie, CRM, dati di gioco, tendenze web, dati finanziari, Internet of Things, dispositivi mobili, ecc.

Caratteristiche generali di Logstash

Le caratteristiche generali di Logstash sono le seguenti:

  • Logstash può raccogliere dati da diverse origini e inviarli a più destinazioni.

  • Logstash può gestire tutti i tipi di dati di registrazione come registri Apache, registri eventi di Windows, protocolli di dati su rete, dati da input standard e molti altri.

  • Logstash può anche gestire richieste http e dati di risposta.

  • Logstash fornisce una varietà di filtri, che aiutano l'utente a trovare più significato nei dati analizzandoli e trasformandoli.

  • Logstash può anche essere utilizzato per gestire i dati dei sensori in Internet of Things.

  • Logstash è open source e disponibile con la licenza Apache versione 2.0.

Concetti chiave di Logstash

I concetti chiave di Logstash sono i seguenti:

Oggetto evento

È l'oggetto principale di Logstash, che incapsula il flusso di dati nella pipeline di Logstash. Logstash utilizza questo oggetto per memorizzare i dati di input e aggiungere campi aggiuntivi creati durante la fase di filtro.

Logstash offre un'API per eventi agli sviluppatori per manipolare gli eventi. In questo tutorial, questo evento viene indicato con vari nomi come Evento dati di registrazione, Evento di registro, Dati di registro, Dati di registro di input, Dati di registro di output, ecc.

Tubatura

Comprende le fasi del flusso di dati in Logstash dall'input all'output. I dati di input vengono inseriti nella pipeline e vengono elaborati sotto forma di evento. Quindi invia a una destinazione di output nel formato desiderato dall'utente o dal sistema finale.

Ingresso

Questa è la prima fase della pipeline Logstash, che viene utilizzata per ottenere i dati in Logstash per un'ulteriore elaborazione. Logstash offre vari plugin per ottenere dati da diverse piattaforme. Alcuni dei plugin più comunemente usati sono: File, Syslog, Redis e Beats.

Filtro

Questa è la fase centrale di Logstash, dove avviene l'effettiva elaborazione degli eventi. Uno sviluppatore può utilizzare schemi Regex predefiniti di Logstash per creare sequenze per differenziare i campi negli eventi e i criteri per gli eventi di input accettati.

Logstash offre vari plugin per aiutare lo sviluppatore ad analizzare e trasformare gli eventi in una struttura desiderabile. Alcuni dei plugin di filtro più comunemente usati sono: Grok, Mutate, Drop, Clone e Geoip.

Produzione

Questa è l'ultima fase della pipeline Logstash, in cui gli eventi di output possono essere formattati nella struttura richiesta dai sistemi di destinazione. Infine, invia l'evento di output dopo l'elaborazione completa alla destinazione utilizzando i plug-in. Alcuni dei plugin più comunemente usati sono: Elasticsearch, File, Graphite, Statsd, ecc.

Vantaggi di Logstash

I seguenti punti spiegano i vari vantaggi di Logstash.

  • Logstash offre sequenze di pattern regex per identificare e analizzare i vari campi in qualsiasi evento di input.

  • Logstash supporta una varietà di server Web e origini dati per l'estrazione dei dati di registrazione.

  • Logstash fornisce più plugin per analizzare e trasformare i dati di registrazione in qualsiasi formato desiderato dall'utente.

  • Logstash è centralizzato, il che semplifica l'elaborazione e la raccolta di dati da diversi server.

  • Logstash supporta molti database, protocolli di rete e altri servizi come origine di destinazione per gli eventi di registrazione.

  • Logstash utilizza il protocollo HTTP, che consente all'utente di aggiornare le versioni di Elasticsearch senza dover aggiornare Logstash in una fase di blocco.

Svantaggi di Logstash

I seguenti punti spiegano i vari svantaggi di Logstash.

  • Logstash utilizza http, che influisce negativamente sull'elaborazione dei dati di registrazione.

  • Lavorare con Logstash a volte può essere un po 'complesso, poiché richiede una buona comprensione e analisi dei dati di registrazione in ingresso.

  • I plugin dei filtri non sono generici, quindi l'utente potrebbe aver bisogno di trovare la sequenza corretta di pattern per evitare errori nell'analisi.

Nel prossimo capitolo, capiremo cos'è ELK Stack e come aiuta Logstash.

ELK sta per Elasticsearch, Logstash, e Kibana. Nello stack ELK, Logstash estrae i dati di registrazione o altri eventi da diverse origini di input. Elabora gli eventi e successivamente li memorizza in Elasticsearch. Kibana è un'interfaccia web, che accede al modulo dei dati di registrazione Elasticsearch e lo visualizza.

Logstash ed Elasticsearch

Logstash fornisce il plug-in Elasticsearch di input e output per leggere e scrivere eventi di registro su Elasticsearch. Elasticsearch come destinazione di output è consigliato anche da Elasticsearch Company per la sua compatibilità con Kibana. Logstash invia i dati a Elasticsearch tramite il protocollo http.

Elasticsearch fornisce funzionalità di caricamento collettivo, che aiuta a caricare i dati da diverse origini o istanze di Logstash su un motore Elasticsearch centralizzato. ELK presenta i seguenti vantaggi rispetto ad altre soluzioni DevOps:

  • Lo stack ELK è più facile da gestire e può essere ridimensionato per gestire petabyte di eventi.

  • L'architettura dello stack ELK è molto flessibile e fornisce l'integrazione con Hadoop. Hadoop viene utilizzato principalmente per scopi di archiviazione. Logstash può essere collegato direttamente a Hadoop utilizzando flume ed Elasticsearch fornisce un connettore denominatoes-hadoop per connetterti con Hadoop.

  • Il costo totale di proprietà di ELK è molto inferiore rispetto alle sue alternative.

Logstash e Kibana

Kibana non interagisce con Logstash direttamente ma attraverso un'origine dati, che è Elasticsearch nello stack ELK. Logstash raccoglie i dati da ogni fonte ed Elasticsearch li analizza a una velocità molto elevata, quindi Kibana fornisce le informazioni utili su quei dati.

Kibana è uno strumento di visualizzazione basato sul web, che aiuta gli sviluppatori e altri ad analizzare le variazioni in grandi quantità di eventi raccolti da Logstash nel motore di Elasticsearch. Questa visualizzazione semplifica la previsione o la visualizzazione dei cambiamenti nelle tendenze degli errori o di altri eventi significativi della sorgente di input.

Per installare Logstash sul sistema, dobbiamo seguire i passaggi indicati di seguito:

Step 1- Controlla la versione del tuo Java installata sul tuo computer; dovrebbe essere Java 8 perché non è compatibile con Java 9. Puoi verificarlo:

In un sistema operativo Windows (OS) (utilizzando il prompt dei comandi) -

> java -version

Nel sistema operativo UNIX (utilizzando il terminale) -

$ echo $JAVA_HOME

Step 2 - Scarica Logstash da -

https://www.elastic.co/downloads/logstash.

  • Per il sistema operativo Windows, scarica il file ZIP.

  • Per il sistema operativo UNIX, scarica il file TAR.

  • Per il sistema operativo Debian, scarica il file DEB.

  • Per Red Hat e altre distribuzioni Linux, scarica il file RPN.

  • Le utilità APT e Yum possono essere utilizzate anche per installare Logstash in molte distribuzioni Linux.

Step 3- Il processo di installazione di Logstash è molto semplice. Vediamo come puoi installare Logstash su diverse piattaforme.

Note - Non inserire spazi o due punti nella cartella di installazione.

  • Windows OS - Decomprimere il pacchetto zip e il Logstash è installato.

  • UNIX OS - Estrai il file tar in qualsiasi posizione e il Logstash è installato.

$tar –xvf logstash-5.0.2.tar.gz

Using APT utility for Linux OS −

  • Scarica e installa la chiave di firma pubblica -
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
  • Salva la definizione del repository -
$ echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo
   tee -a /etc/apt/sources.list.d/elastic-5.x.list
  • Esegui aggiornamento -
$ sudo apt-get update
  • Ora puoi eseguire l'installazione utilizzando il seguente comando:
$ sudo apt-get install logstash

Using YUM utility for Debian Linux OS -

  • Scarica e installa la chiave di firma pubblica -
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  • Aggiungere il testo seguente nel file con il suffisso .repo nella directory o "/etc/yum.repos.d/". Per esempio,logstash.repo

[logstash-5.x]
name = Elastic repository for 5.x packages
baseurl = https://artifacts.elastic.co/packages/5.x/yum
gpgcheck = 1
gpgkey = https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled = 1
autorefresh = 1
type = rpm-md
  • È ora possibile installare Logstash utilizzando il seguente comando:
$ sudo yum install logstash

Step 4- Vai alla home directory di Logstash. All'interno della cartella bin, esegui il fileelasticsearch.batfile in caso di windows oppure puoi fare lo stesso usando il prompt dei comandi e tramite il terminale. In UNIX, esegui il file Logstash.

È necessario specificare la sorgente di input, la sorgente di output e i filtri opzionali. Per verificare l'installazione, è possibile eseguirla con la configurazione di base utilizzando un flusso di input standard (stdin) come sorgente di input e un flusso di output standard (stdout) come sorgente di output. È possibile specificare la configurazione nella riga di comando anche utilizzando–e opzione.

In Windows −

> cd logstash-5.0.1/bin
> Logstash -e 'input { stdin { } } output { stdout {} }'

In Linux −

$ cd logstash-5.0.1/bin
$ ./logstash -e 'input { stdin { } } output { stdout {} }'

Note- in caso di Windows, potresti ricevere un errore che indica che JAVA_HOME non è impostato. Per questo, impostalo nelle variabili di ambiente su "C: \ Programmi \ Java \ jre1.8.0_111" o nella posizione in cui hai installato java.

Step 5 - Le porte predefinite per l'interfaccia web di Logstash sono da 9600 a 9700 sono definite nel file logstash-5.0.1\config\logstash.yml come la http.port e raccoglierà la prima porta disponibile nell'intervallo dato.

Possiamo verificare se il server Logstash è attivo e in esecuzione navigando http://localhost:9600o se la porta è diversa, quindi controlla il prompt dei comandi o il terminale. Possiamo vedere la porta assegnata come "Endpoint API Logstash avviato con successo {: port ⇒ 9600}. Restituirà un oggetto JSON, che contiene le informazioni sul Logstash installato nel modo seguente:

{
   "host":"manu-PC", 
   "version":"5.0.1",
   "http_address":"127.0.0.1:9600",
   "build_date":"2016-11-11T22:28:04+00:00",
   "build_sha":"2d8d6263dd09417793f2a0c6d5ee702063b5fada",
   "build_snapshot":false
}

In questo capitolo, discuteremo dell'architettura interna e dei diversi componenti di Logstash.

Architettura del servizio Logstash

Logstash elabora i registri da diversi server e origini dati e si comporta come il mittente. Gli spedizionieri vengono utilizzati per raccogliere i registri e questi vengono installati in ogni sorgente di input. Ai broker piaceRedis, Kafka o RabbitMQ sono buffer per contenere i dati per gli indicizzatori, potrebbero esserci più broker come istanze di failover.

Agli indicizzatori piace Lucenevengono utilizzati per indicizzare i log per migliori prestazioni di ricerca e quindi l'output viene archiviato in Elasticsearch o in un'altra destinazione di output. I dati nella memoria di output sono disponibili per Kibana e altri software di visualizzazione.

Architettura interna di Logstash

La pipeline Logstash è composta da tre componenti Input, Filters e Output. La parte di input è responsabile di specificare e accedere all'origine dei dati di input come la cartella di registro del fileApache Tomcat Server.

Esempio per spiegare la pipeline Logstash

Il file di configurazione di Logstash contiene i dettagli sui tre componenti di Logstash. In questo caso, stiamo creando un nome file chiamatoLogstash.conf.

La seguente configurazione acquisisce i dati da un registro di input "inlog.log" e li scrive in un registro di output "outlog.log" senza filtri.

Logstash.conf

Il file di configurazione Logstash copia semplicemente i dati dal file inlog.log file utilizzando il plug-in di input e scarica i dati di registro in outlog.log file utilizzando il plugin di output.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog.log"
   }
}

Esegui Logstash

Logstash utilizza –f opzione per specificare il file di configurazione.

C:\logstash\bin> logstash –f logstash.conf

inlog.log

Il blocco di codice seguente mostra i dati del registro di input.

Hello tutorialspoint.com

outlog.log

L'output di Logstash contiene i dati di input nel campo del messaggio. Logstash aggiunge anche altri campi all'output come Timestamp, Path of the Input Source, Version, Host e Tags.

{
   "path":"C:/tpwork/logstash/bin/log/inlog1.log",
   "@timestamp":"2016-12-13T02:28:38.763Z",
   "@version":"1", "host":"Dell-PC",
   "message":" Hello tutorialspoint.com", "tags":[]
}

Come puoi, l'output di Logstash contiene più dei dati forniti tramite il log di input. L'output contiene il percorso sorgente, il timestamp, la versione, il nome host e il tag, che vengono utilizzati per rappresentare i messaggi aggiuntivi come gli errori.

Possiamo usare filtri per elaborare i dati e renderli utili per le nostre esigenze. Nel prossimo esempio, stiamo usando il filtro per ottenere i dati, che limita l'output ai soli dati con un verbo come GET o POST seguito da unUnique Resource Identifier.

Logstash.conf

In questa configurazione di Logstash, aggiungiamo un filtro denominato grokper filtrare i dati di input. L'evento del log di input, che corrisponde al log di input della sequenza di pattern, arriva solo alla destinazione di output con errore. Logstash aggiunge un tag denominato "_grokparsefailure" negli eventi di output, che non corrisponde alla sequenza del pattern del filtro grok.

Logstash offre molti modelli regex integrati per analizzare i log del server più diffusi come Apache. Il modello usato qui prevede un verbo come get, post, ecc., Seguito da un identificatore di risorsa uniforme.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog2.log"
   }
}
filter {
   grok {
      match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog2.log"
   }
}

Esegui Logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

C:\logstash\bin> logstash –f  Logstash.conf

inlog2.log

Il nostro file di input contiene due eventi separati dal delimitatore predefinito, ovvero un nuovo delimitatore di riga. Il primo evento corrisponde al modello specificato in GROk e il secondo no.

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

Possiamo vedere che il secondo evento di output contiene il tag "_grokparsefailure", perché non corrisponde al pattern del filtro grok. L'utente può anche rimuovere questi eventi senza corrispondenza nell'output utilizzando il‘if’ condition nel plugin di output.

{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:47:10.352Z","@version":"1","host":"Dell-PC","verb":"GET",
   "message":"GET /tutorialspoint/logstash", "uri":"/tutorialspoint/logstash", "tags":[]
}
{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:48:12.418Z", "@version":"1", "host":"Dell-PC",
   "message":"t 1234\r", "tags":["_grokparsefailure"]
}

I registri da diversi server o origini dati vengono raccolti utilizzando spedizionieri. Un mittente è un'istanza di Logstash installata nel server, che accede ai log del server e li invia a una posizione di output specifica.

Invia principalmente l'output a Elasticsearch per l'archiviazione. Logstash riceve input dalle seguenti fonti:

  • STDIN
  • Syslog
  • Files
  • TCP/UDP
  • Log eventi di Microsoft Windows
  • Websocket
  • Zeromq
  • Estensioni personalizzate

Raccolta dei registri utilizzando il server Apache Tomcat 7

In questo esempio, raccogliamo i log del server Apache Tomcat 7 installato in Windows utilizzando il plug-in di input dei file e li inviamo all'altro log.

logstash.conf

Qui, Logstash è configurato per accedere al registro di accesso di Apache Tomcat 7 installato localmente. Un pattern regex viene utilizzato nell'impostazione del percorso del plug-in del file per ottenere i dati dal file di registro. Questo contiene "accesso" nel suo nome e aggiunge un tipo di apache, che aiuta a differenziare gli eventi di apache dagli altri in una sorgente di destinazione centralizzata. Infine, gli eventi di output verranno visualizzati in output.log.

input {
   file {
      path => "C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/*access*"
      type => "apache"
   }
} 
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Esegui Logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

C:\logstash\bin> logstash –f  Logstash.conf

Registro di Apache Tomcat

Accedi al server Apache Tomcat e alle sue app Web (http://localhost:8080) per generare log. I dati aggiornati nei log vengono letti da Logstash in tempo reale e memorizzati in output.log come specificato nel file di configurazione.

Apache Tomcat genera un nuovo file di registro degli accessi in base alla data e registra lì gli eventi di accesso. Nel nostro caso, era localhost_access_log.2016-12-24.txt nel filelogs directory di Apache Tomcat.

0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:00 +0800] "GET / HTTP/1.1" 200 11418
0:0:0:0:0:0:0:1 - munish [
   25/Dec/2016:18:37:02 +0800] "GET /manager/html HTTP/1.1" 200 17472
0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:08 +0800] "GET /docs/ HTTP/1.1" 200 19373
0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:10 +0800] "GET /docs/introduction.html HTTP/1.1" 200 15399

output.log

Puoi vedere negli eventi di output, viene aggiunto un campo tipo e l'evento è presente nel campo messaggio.

{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt",
   "@timestamp":"2016-12-25T10:37:00.363Z","@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:00 +0800] \"GET /
   HTTP/1.1\" 200 11418\r","type":"apache","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt","@timestamp":"2016-12-25T10:37:10.407Z",
   "@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - munish [25/Dec/2016:18:37:02 +0800] \"GET /
   manager/html HTTP/1.1\" 200 17472\r","type":"apache","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt","@timestamp":"2016-12-25T10:37:10.407Z",
   "@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:08 +0800] \"GET /docs/
   HTTP/1.1\" 200 19373\r","type":"apache","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt","@timestamp":"2016-12-25T10:37:20.436Z",
   "@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:10 +0800] \"GET /docs/
   introduction.html HTTP/1.1\" 200 15399\r","type":"apache","tags":[]
}

Raccolta dei registri utilizzando il plug-in STDIN

In questa sezione, discuteremo un altro esempio di raccolta di log utilizzando il STDIN Plugin.

logstash.conf

È un esempio molto semplice, dove Logstash sta leggendo gli eventi inseriti dall'utente in uno standard input. Nel nostro caso, è il prompt dei comandi, che memorizza gli eventi nel file output.log.

input {
   stdin{}
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Esegui Logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

C:\logstash\bin> logstash –f  Logstash.conf

Scrivi il seguente testo nel prompt dei comandi:

L'utente ha inserito le seguenti due righe. Logstash separa gli eventi in base all'impostazione del delimitatore e il suo valore per impostazione predefinita è "\ n". L'utente può modificare modificando il valore del delimitatore nel plugin del file.

Tutorialspoint.com welcomes you
Simply easy learning

output.log

Il blocco di codice seguente mostra i dati del registro di output.

{
   "@timestamp":"2016-12-25T11:41:16.518Z","@version":"1","host":"Dell-PC",
   "message":"tutrialspoint.com welcomes you\r","tags":[]
}
{
   "@timestamp":"2016-12-25T11:41:53.396Z","@version":"1","host":"Dell-PC",
   "message":"simply easy learning\r","tags":[]
}

Logstash supporta una vasta gamma di log da diverse fonti. Funziona con fonti famose come spiegato di seguito.

Raccogli i registri dalle metriche

Gli eventi di sistema e altre attività temporali vengono registrati nelle metriche. Logstash può accedere al registro dalle metriche di sistema ed elaborarli utilizzando i filtri. Questo aiuta a mostrare all'utente il feed live degli eventi in modo personalizzato. Le metriche vengono scaricate in base aflush_interval settingdel filtro delle metriche e per impostazione predefinita; è impostato su 5 secondi.

Stiamo monitorando le metriche di test generate da Logstash, raccogliendo e analizzando gli eventi in esecuzione attraverso Logstash e mostrando il feed live sul prompt dei comandi.

logstash.conf

Questa configurazione contiene un plug-in generatore, che è offerto da Logstash per le metriche di test e imposta l'impostazione del tipo su "generato" per l'analisi. Nella fase di filtraggio, stiamo elaborando solo le righe con un tipo generato utilizzando l'istruzione "if". Quindi, il plug-in delle metriche conta il campo specificato nelle impostazioni del misuratore. Il plug-in delle metriche scarica il conteggio ogni 5 secondi specificati nel fileflush_interval.

Infine, invia gli eventi di filtro a un output standard come il prompt dei comandi utilizzando il codec pluginper la formattazione. Il plug-in Codec utilizza il valore [ events ] [ rate_1m ] per generare gli eventi al secondo in una finestra scorrevole di 1 minuto.

input {
   generator {
     	type => "generated"
   }
}
filter {
   if [type] == "generated" {
      metrics {
         meter => "events"
         add_tag => "metric"
      }
   }
}
output {
   # only emit events with the 'metric' tag
   if "metric" in [tags] {
      stdout {
         codec => line { format => "rate: %{[events][rate_1m]}"
      }
   }
}

Esegui Logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

>logsaths –f logstash.conf

stdout (prompt dei comandi)

rate: 1308.4
rate: 1308.4
rate: 1368.654529135342
rate: 1416.4796003951449
rate: 1464.974293984808
rate: 1523.3119444107458
rate: 1564.1602979542715
rate: 1610.6496496890895
rate: 1645.2184750334154
rate: 1688.7768007612485
rate: 1714.652283095914
rate: 1752.5150680019278
rate: 1785.9432934744932
rate: 1806.912181962126
rate: 1836.0070454626025
rate: 1849.5669494173826
rate: 1871.3814756851832
rate: 1883.3443123790712
rate: 1906.4879113216743
rate: 1925.9420717997118
rate: 1934.166137658981
rate: 1954.3176526556897
rate: 1957.0107444542625

Raccogli i registri dal server Web

I server Web generano un gran numero di registri riguardanti l'accesso e gli errori degli utenti. Logstash aiuta a estrarre i log da diversi server utilizzando plug-in di input e ad archiviarli in una posizione centralizzata.

Stiamo estraendo i dati dal file stderr logs del server Apache Tomcat locale e riporlo in output.log.

logstash.conf

Questo file di configurazione Logstash indica a Logstash di leggere i log degli errori di Apache e di aggiungere un tag denominato "apache-error". Possiamo semplicemente inviarlo a output.log usando il plugin di output del file.

input {
   file {
      path => "C:/Program Files/Apache Software Foundation/Tomcat 7.0 /logs/*stderr*"
      type => "apache-error"  
   }
} 
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Esegui Logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

>Logstash –f Logstash.conf

Esempio di registro di input

Questo è il campione stderr log, che viene generato quando si verificano gli eventi del server in Apache Tomcat.

C: \ Programmi \ Apache Software Foundation \ Tomcat 7.0 \ logs \ tomcat7-stderr.2016-12-25.log

Dec 25, 2016 7:05:14 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-9999"]
Dec 25, 2016 7:05:14 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Dec 25, 2016 7:05:14 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 823 ms

output.log

{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"Dec 25, 2016 7:05:14 PM org.apache.coyote.AbstractProtocol start\r",
   "type":"apache-error","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"INFO: Starting ProtocolHandler [
      \"ajp-bio-8009\"]\r","type":"apache-error","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"Dec 25, 2016 7:05:14 PM org.apache.catalina.startup.Catalina start\r",
   "type":"apache-error","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"INFO: Server startup in 823 ms\r","type":"apache-error","tags":[]
}

Raccogli i registri dalle origini dati

Per cominciare, vediamo come configurare MySQL per la registrazione. Aggiungi le seguenti righe inmy.ini file del server di database MySQL in [mysqld].

In Windows, è presente all'interno della directory di installazione di MySQL, che si trova in -

C:\wamp\bin\mysql\mysql5.7.11

In UNIX, puoi trovarlo in - /etc/mysql/my.cnf

general_log_file   = "C:/wamp/logs/queries.log"
general_log = 1

logstash.conf

In questo file di configurazione, il plug-in del file viene utilizzato per leggere il registro di MySQL e scriverlo su ouput.log.

input {
   file {
      path => "C:/wamp/logs/queries.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

queries.log

Questo è il registro generato dalle query eseguite nel database MySQL.

2016-12-25T13:05:36.854619Z   2 Query		select * from test1_users
2016-12-25T13:05:51.822475Z    2 Query	select count(*) from users
2016-12-25T13:05:59.998942Z    2 Query         select count(*) from test1_users

output.log

{
   "path":"C:/wamp/logs/queries.log","@timestamp":"2016-12-25T13:05:37.905Z",
   "@version":"1","host":"Dell-PC",
   "message":"2016-12-25T13:05:36.854619Z    2 Query\tselect * from test1_users",
   "tags":[]
}
{
   "path":"C:/wamp/logs/queries.log","@timestamp":"2016-12-25T13:05:51.938Z",
   "@version":"1","host":"Dell-PC",
   "message":"2016-12-25T13:05:51.822475Z    2 Query\tselect count(*) from users",
   "tags":[]
}
{
   "path":"C:/wamp/logs/queries.log","@timestamp":"2016-12-25T13:06:00.950Z",
   "@version":"1","host":"Dell-PC",
   "message":"2016-12-25T13:05:59.998942Z    2 Query\tselect count(*) from test1_users",
   "tags":[]
}

Logstash riceve i log utilizzando plug-in di input e quindi utilizza i plug-in di filtro per analizzare e trasformare i dati. L'analisi e la trasformazione dei log vengono eseguite in base ai sistemi presenti nella destinazione di output. Logstash analizza i dati di registrazione e inoltra solo i campi obbligatori. Successivamente, questi campi vengono trasformati nella forma compatibile e comprensibile del sistema di destinazione.

Come analizzare i registri?

L'analisi dei log viene eseguita utilizzando il file GROK (Rappresentazione grafica della conoscenza) e puoi trovarli in Github -

https://github.com/elastic/logstash/tree/v1.4.2/patterns.

Logstash abbina i dati dei log con un pattern GROK specificato o una sequenza di pattern per l'analisi dei log come "% {COMBINEDAPACHELOG}", comunemente usato per i log di Apache.

I dati analizzati sono più strutturati e facili da cercare e per eseguire query. Logstash cerca i pattern GROK specificati nei log di input ed estrae le righe corrispondenti dai log. Puoi utilizzare il debugger GROK per testare i tuoi pattern GROK.

La sintassi per un pattern GROK è% {SYNTAX: SEMANTIC}. Il filtro Logstash GROK è scritto nella seguente forma:

%{PATTERN:FieldName}

Qui, PATTERN rappresenta il pattern GROK e il fieldname è il nome del campo, che rappresenta i dati analizzati nell'output.

Ad esempio, utilizzando il debugger GROK online https://grokdebug.herokuapp.com/

Ingresso

Una riga di errore di esempio in un registro -

[Wed Dec 07 21:54:54.048805 2016] [:error] [pid 1234:tid 3456829102]
   [client 192.168.1.1:25007] JSP Notice:  Undefined index: abc in
   /home/manu/tpworks/tutorialspoint.com/index.jsp on line 11

Sequenza di pattern GROK

Questa sequenza di pattern GROK corrisponde all'evento di registro, che comprende un timestamp seguito da Livello di registro, ID processo, ID transazione e un messaggio di errore.

\[(%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\] \[.*:%{LOGLEVEL:loglevel}\]
   \[pid %{NUMBER:pid}:tid %{NUMBER:tid}\] \[client %{IP:clientip}:.*\]
   %{GREEDYDATA:errormsg}

produzione

L'output è in formato JSON.

{
   "day": [
      "Wed"
   ],
   "month": [
      "Dec"
   ],
   "loglevel": [
      "error"
   ],
   "pid": [
      "1234"
   ],
   "tid": [
      "3456829102"
   ],
   "clientip": [
      "192.168.1.1"
   ],
   "errormsg": [
      "JSP Notice:  Undefined index: abc in
      /home/manu/tpworks/tutorialspoint.com/index.jsp on line 11"
   ]
}

Logstash utilizza filtri nel mezzo della pipeline tra input e output. I filtri delle misure Logstash manipolano e creano eventi comeApache-Access. Molti plugin di filtro utilizzati per gestire gli eventi in Logstash. Qui, in un esempio diLogstash Aggregate Filter, stiamo filtrando la durata di ogni transazione SQL in un database e calcolando il tempo totale.

Installazione del plug-in del filtro aggregato

Installazione del plug-in del filtro aggregato utilizzando l'utilità del plug-in Logstash. Il plugin Logstash è un file batch per Windows inbin folder in Logstash.

>logstash-plugin install logstash-filter-aggregate

logstash.conf

In questa configurazione, puoi vedere tre istruzioni "if" per Initializing, Incrementing, e generating la durata totale della transazione, ovvero il sql_duration. Il plugin aggregato viene utilizzato per aggiungere la sql_duration, presente in ogni evento del log di input.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - 
            %{NOTSPACE:taskid} - %{NOTSPACE:logger} - 
            %{WORD:label}( - %{INT:duration:int})?" 
      ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"    
   }
}

Esegui Logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

>logstash –f logstash.conf

input.log

Il blocco di codice seguente mostra i dati del registro di input.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END - end

output.log

Come specificato nel file di configurazione, l'ultima istruzione "if" in cui si trova il logger - TRANSACTION_END, che stampa il tempo totale della transazione o sql_duration. Questo è stato evidenziato in giallo nel file output.log.

{
   "path":"C:/tpwork/logstash/bin/log/input.log","@timestamp": "2016-12-22T19:04:37.214Z",
   "loglevel":"INFO","logger":"TRANSACTION_START","@version": "1","host":"wcnlab-PC",
   "message":"8566 - TRANSACTION_START - start\r","tags":[]
}
{
   "duration":320,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.366Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 320\r","taskid":"48566","tags":[]
}
{
   "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.373Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 200\r","taskid":"48566","tags":[]
}
{
   "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.380Z","loglevel":"INFO","logger":"TRANSACTION_END",
   "@version":"1","host":"wcnlab-PC","label":"end",
   "message":" INFO - 48566 - TRANSACTION_END - end\r","taskid":"48566","tags":[]
}

Logstash offre vari plugin per trasformare il log analizzato. Questi plugin possonoAdd, Delete, e Update campi nei log per una migliore comprensione e interrogazione nei sistemi di output.

Stiamo usando il Mutate Plugin per aggiungere un nome di campo utente in ogni riga del registro di input.

Installa il plugin Mutate Filter

Per installare il plugin del filtro mutate; possiamo usare il seguente comando.

>Logstash-plugin install Logstash-filter-mutate

logstash.conf

In questo file di configurazione, il plug-in Mutate viene aggiunto dopo il plug-in Aggregate per aggiungere un nuovo campo.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [ "message", "%{LOGLEVEL:loglevel} -
         %{NOTSPACE:taskid} - %{NOTSPACE:logger} -
         %{WORD:label}( - %{INT:duration:int})?" ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ; 
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
   mutate {
      add_field => {"user" => "tutorialspoint.com"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Esegui Logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

>logstash –f logstash.conf

input.log

Il blocco di codice seguente mostra i dati del registro di input.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END - end

output.log

Puoi vedere che c'è un nuovo campo denominato "utente" negli eventi di output.

{
   "path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.383Z",
   "@version":"1",
   "host":"wcnlab-PC",
   "message":"NFO - 48566 - TRANSACTION_START - start\r",
   "user":"tutorialspoint.com","tags":["_grokparsefailure"]
}
{
   "duration":320,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.383Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 320\r",
   "user":"tutorialspoint.com","taskid":"48566","tags":[]
}
{
   "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.399Z","loglevel":"INFO",
   "logger":"SQL","@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 200\r",
   "user":"tutorialspoint.com","taskid":"48566","tags":[]
}
{
   "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.399Z","loglevel":"INFO",
   "logger":"TRANSACTION_END","@version":"1","host":"wcnlab-PC","label":"end",
   "message":" INFO - 48566 - TRANSACTION_END - end\r",
   "user":"tutorialspoint.com","taskid":"48566","tags":[]
}

L'output è l'ultima fase nella pipeline Logstash, che invia i dati del filtro dai log di input a una destinazione specificata. Logstash offre più plug-in di output per riporre gli eventi di registro filtrati in vari motori di archiviazione e ricerca diversi.

Archiviazione dei registri

Logstash può memorizzare i log filtrati in un file File, Elasticsearch Engine, stdout, AWS CloudWatch, ecc. Protocolli di rete come TCP, UDP, Websocket può essere utilizzato anche in Logstash per trasferire gli eventi del registro a sistemi di archiviazione remoti.

Nello stack ELK, gli utenti utilizzano il motore Elasticsearch per archiviare gli eventi di registro. Qui, nel seguente esempio, genereremo eventi di log per un motore Elasticsearch locale.

Installazione del plug-in di output di Elasticsearch

Possiamo installare il plugin di output Elasticsearch con il seguente comando.

>logstash-plugin install Logstash-output-elasticsearch

logstash.conf

Questo file di configurazione contiene un plug-in Elasticsearch, che memorizza l'evento di output in Elasticsearch installato localmente.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [ "message", "%{LOGLEVEL:loglevel} -
      %{NOTSPACE:taskid} - %{NOTSPACE:logger} -  
      %{WORD:label}( - %{INT:duration:int})?" ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
   mutate {
      add_field => {"user" => "tutorialspoint.com"}
   }
}
output {
   elasticsearch {
      hosts => ["127.0.0.1:9200"]
   }
}

Input.log

Il blocco di codice seguente mostra i dati del registro di input.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END - end

Avvia Elasticsearch su Localhost

Per avviare Elasticsearch dall'host locale, è necessario utilizzare il seguente comando.

C:\elasticsearch\bin> elasticsearch

Una volta che Elasticsearch è pronto, puoi verificarlo digitando il seguente URL nel tuo browser.

http://localhost:9200/

Risposta

Il seguente blocco di codice mostra la risposta di Elasticsearch su localhost.

{
   "name" : "Doctor Dorcas",
   "cluster_name" : "elasticsearch",
   "version" : {
      "number" : "2.1.1",
      "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
      "build_timestamp" : "2015-12-15T13:05:55Z",
      "build_snapshot" : false,
      "lucene_version" : "5.3.1"
   },
   "tagline" : "You Know, for Search"
}

Note - Per ulteriori informazioni su Elasticsearch, è possibile fare clic sul seguente collegamento.

https://www.tutorialspoint.com/elasticsearch/index.html

Ora, esegui Logstash con il suddetto Logstash.conf

>Logstash –f Logstash.conf

Dopo aver incollato il testo sopra menzionato nel registro di output, quel testo verrà memorizzato in Elasticsearch da Logstash. È possibile controllare i dati memorizzati digitando il seguente URL nel browser.

http://localhost:9200/logstash-2017.01.01/_search?pretty

Risposta

Sono i dati in formato JSON memorizzati nell'indice Logstash-2017.01.01.

{
   "took" : 20,
   "timed_out" : false,
   "_shards" : {
      "total" : 5,
      "successful" : 5,
      "failed" : 0
   },
   "hits" : {
      "total" : 10,
      "max_score" : 1.0,
      "hits" : [ {
         "_index" : "logstash-2017.01.01",
         "_type" : "logs",
         "_id" : "AVlZ9vF8hshdrGm02KOs",
         "_score" : 1.0,
         "_source":{
            "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log", 
            "@timestamp":"2017-01-01T12:17:49.140Z","loglevel":"INFO",
            "logger":"SQL","@version":"1","host":"wcnlab-PC",
            "label":"transaction1",
            "message":" INFO - 48566 - SQL - transaction1 - 200\r",
            "user":"tutorialspoint.com","taskid":"48566","tags":[]
         }
      },
      {
         "_index" : "logstash-2017.01.01",
         "_type" : "logs",
         "_id" : "AVlZ9vF8hshdrGm02KOt",
         "_score" : 1.0,
         "_source":{
            "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
            "@timestamp":"2017-01-01T12:17:49.145Z","loglevel":"INFO",
            "logger":"TRANSACTION_END","@version":"1","host":"wcnlab-PC",
            "label":"end",
            "message":" INFO - 48566 - TRANSACTION_END - end\r",
            "user":"tutorialspoint.com","taskid":"48566","tags":[]
         }
      }
   }
}

Logstash fornisce più plugin per supportare vari archivi di dati o motori di ricerca. Gli eventi di output dei log possono essere inviati a un file di output, output standard o un motore di ricerca come Elasticsearch. Esistono tre tipi di output supportati in Logstash, che sono:

  • Uscita standard
  • Output di file
  • Output nullo

Cerchiamo ora di discutere ciascuno di questi in dettaglio.

Uscita standard (stdout)

Viene utilizzato per generare gli eventi di registro filtrati come flusso di dati all'interfaccia della riga di comando. Di seguito è riportato un esempio di generazione della durata totale di una transazione di database su stdout.

logstash.conf

Questo file di configurazione contiene un plugin di output stdout per scrivere la sql_duration totale in uno standard output.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid}
            - %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" 
      ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
}
output {
   if [logger] == "TRANSACTION_END" {
      stdout {
         codec => line{format => "%{sql_duration}"}
      }
   }
}

Note - Installa il filtro aggregato, se non è già installato.

>logstash-plugin install Logstash-filter-aggregate

Esegui Logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

>logstash –f logsatsh.conf

Input.log

Il blocco di codice seguente mostra i dati del registro di input.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END – end

stdout (sarà il prompt dei comandi in Windows o il terminale in UNIX)

Questa è la durata_ql totale 320 + 200 = 520.

520

Output di file

Logstash può anche memorizzare gli eventi del registro del filtro in un file di output. Useremo l'esempio sopra menzionato e memorizzeremo l'output in un file invece di STDOUT.

logstash.conf

Questo file di configurazione di Logstash indirizza a Logstash l'archiviazione totale di sql_duration in un file di registro di output.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input1.log"
   }
} 
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid} -
            %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" 
      ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
}
output {
   if [logger] == "TRANSACTION_END" {
      file {
         path => "C:/tpwork/logstash/bin/log/output.log"
         codec => line{format => "%{sql_duration}"}
      }
   }
}

Esegui logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

>logstash –f logsatsh.conf

input.log

Il blocco di codice seguente mostra i dati del registro di input.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END – end

output.log

Il blocco di codice seguente mostra i dati del registro di output.

520

Output nullo

Si tratta di un plug-in di output speciale, utilizzato per analizzare le prestazioni dei plug-in di input e di filtro.

Logstash offre vari plugin per tutte e tre le fasi della sua pipeline (Input, Filter e Output). Questi plugin aiutano l'utente ad acquisire i log da varie fonti come server web, database, protocolli su rete, ecc.

Dopo l'acquisizione, Logstash può analizzare e trasformare i dati in informazioni significative come richiesto dall'utente. Infine, Logstash può inviare o archiviare tali informazioni significative a varie fonti di destinazione come Elasticsearch, AWS Cloudwatch, ecc.

Plugin di input

I plug-in di input in Logstash aiutano l'utente a estrarre e ricevere i log da varie fonti. La sintassi per l'utilizzo del plug-in di input è la seguente:

Input {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

È possibile scaricare il plug-in di input utilizzando il seguente comando:

>Logstash-plugin install Logstash-input-<plugin name>

L'utility del plugin Logstash è presente nel file bin folderdella directory di installazione di Logstash. La tabella seguente contiene un elenco dei plug-in di input offerti da Logstash.

Sr.No. Nome e descrizione del plugin
1

beats

Per ottenere i dati di registrazione o gli eventi dal framework dei battiti elastici.

2

cloudwatch

Per estrarre eventi da CloudWatch, un'offerta API di Amazon Web Services.

3

couchdb_changes

Eventi dall'URI _chages di couchdb spediti utilizzando questo plugin.

4

drupal_dblog

Per estrarre i dati di registrazione del watchdog di drupal con DBLog abilitato.

5

Elasticsearch

Per recuperare i risultati delle query eseguite nel cluster Elasticsearch.

6

eventlog

Per ottenere gli eventi dal registro eventi di Windows.

7

exec

Per ottenere l'output del comando della shell come input in Logstash.

8

file

Per ottenere gli eventi da un file di input. Ciò è utile quando Logstash è installato localmente con la sorgente di input e si ha accesso ai log della sorgente di input.

9

generator

Viene utilizzato a scopo di test, che crea eventi casuali.

10

github

Cattura gli eventi dal webhook GitHub.

11

graphite

Per ottenere i dati delle metriche dallo strumento di monitoraggio della grafite.

12

heartbeat

Viene anche utilizzato per i test e produce eventi simili a battiti cardiaci

13

http

Per raccogliere gli eventi di registro su due protocolli di rete e quelli sono http e https.

14

http_poller

Viene utilizzato per decodificare l'output dell'API HTTP in un evento.

15

jdbc

Converte le transazioni JDBC in un evento in Logstash.

16

jmx

Per estrarre le metriche dalle applicazioni Java remote utilizzando JMX.

17

log4j

Cattura eventi dall'oggetto socketAppender di Log4j su socket TCP.

18

rss

All'output degli strumenti della riga di comando come evento di input in Logstash.

19

tcp

Cattura eventi su socket TCP.

20

twitter

Raccogli eventi dall'API di streaming di Twitter.

21

unix

Raccogli eventi su socket UNIX.

22

websocket

Cattura eventi tramite protocollo websocket.

23

xmpp

Legge gli eventi sui protocolli Jabber / xmpp.

Impostazioni plugin

Tutti i plugin hanno le loro impostazioni specifiche, che aiutano a specificare i campi importanti come Porta, Percorso, ecc. In un plugin. Discuteremo le impostazioni di alcuni dei plugin di input.

File

Questo plug-in di input viene utilizzato per estrarre gli eventi direttamente dai file di registro o di testo presenti nella sorgente di input. Funziona in modo simile al comando tail in UNIX e salva l'ultimo cursore letto e legge solo i nuovi dati aggiunti dal file di input, ma può essere modificato utilizzando l'impostazione star_position. Di seguito sono riportate le impostazioni di questo plug-in di input.

Nome dell'impostazione Valore predefinito Descrizione
add_field {} Aggiungi un nuovo campo all'evento di input.
close_older 3600 I file con l'ora dell'ultima lettura (in secondi) superiore a quella specificata in questo plugin vengono chiusi.
codec "Semplice" Viene utilizzato per decodificare i dati prima di entrare nella pipeline Logstash.
delimitatore "\ N" Viene utilizzato per specificare un nuovo delimitatore di riga.
discover_interval 15 È l'intervallo di tempo (in secondi) tra la scoperta di nuovi file nel percorso specificato.
enable_metric vero Viene utilizzato per abilitare o disabilitare il reporting e la raccolta di metriche per il plug-in specificato.
escludere Viene utilizzato per specificare il nome del file oi modelli, che dovrebbero essere esclusi dal plug-in di input.
Id Per specificare un'identità univoca per quell'istanza di plug-in.
max_open_files Specifica il numero massimo di file di input da Logstash in qualsiasi momento.
sentiero Specifica il percorso dei file e può contenere i modelli per il nome del file.
posizione di partenza "fine" Puoi cambiare in "inizio", se lo desideri; inizialmente Logstash dovrebbe iniziare a leggere i file dall'inizio e non solo il nuovo evento di log.
start_interval 1 Specifica l'intervallo di tempo in secondi, dopo il quale Logstash verifica i file modificati.
tag Per aggiungere qualsiasi informazione aggiuntiva, come Logstash, aggiunge "_grokparsefailure" nei tag, quando un evento di log non è conforme al filtro grok specificato.
genere Questo è un campo speciale, che puoi aggiungere a un evento di input ed è utile nei filtri e nella kibana.

Elasticsearch

Questo particolare plugin viene utilizzato per leggere i risultati delle query di ricerca in un cluster Elasticsearch. Di seguito sono riportate le impostazioni utilizzate in questo plugin:

Nome dell'impostazione Valore predefinito Descrizione
add_field {} Come nel plugin file, viene utilizzato per aggiungere un campo nell'evento di input.
ca_file Viene utilizzato per specificare il percorso del file dell'autorità di certificazione SSL.
codec "Semplice" Viene utilizzato per decodificare gli eventi di input da Elasticsearch prima di entrare nella pipeline Logstash.
docinfo "Falso" Puoi cambiarlo in true, se desideri estrarre le informazioni aggiuntive come indice, tipo e ID dal motore di Elasticsearch.
docinfo_fields ["_index", "_type", "_id"] Puoi eliminare qualsiasi campo che non desideri inserire nel tuo Logstash.
enable_metric vero Viene utilizzato per abilitare o disabilitare il reporting e la raccolta di metriche per quell'istanza di plug-in.
host Viene utilizzato per specificare gli indirizzi di tutti i motori di ricerca elastica, che saranno l'origine di input di quell'istanza di Logstash. La sintassi è host: porta o IP: porta.
Id Viene utilizzato per fornire un numero di identità univoco a quella specifica istanza del plug-in di input.
indice "logstash- *" Viene utilizzato per specificare il nome dell'indice o un modello, che Logstash monitorerà da Logstash per l'input.
parola d'ordine Per scopi di autenticazione.
query "{\" ordina \ ": [\" _ doc \ "]}" Domanda per l'esecuzione.
ssl falso Abilita o disabilita il secure socket layer.
tag Per aggiungere ulteriori informazioni negli eventi di input.
genere Viene utilizzato per classificare i moduli di input in modo che sia facile cercare in tutti gli eventi di input nelle fasi successive.
utente Per scopi autentici.

registro eventi

Questo plug-in di input legge i dati dall'API win32 dei server Windows. Di seguito sono riportate le impostazioni di questo plugin:

Nome dell'impostazione Valore predefinito Descrizione
add_field {} Come nel plugin file, viene utilizzato per aggiungere un campo nell'evento di input
codec "Semplice" Viene utilizzato per decodificare gli eventi di input da Windows; prima di entrare nella pipeline Logstash
file di log ["Applicazione", "Sicurezza", "Sistema"] Eventi richiesti nel file di registro di input
intervallo 1000 È in millisecondi e definisce l'intervallo tra due controlli consecutivi di nuovi registri eventi
tag Per aggiungere ulteriori informazioni negli eventi di input
genere Viene utilizzato per classificare l'input da un plug-in specifico per un determinato tipo, in modo che sia facile cercare tutti gli eventi di input nelle fasi successive

Twitter

Questo plug-in di input viene utilizzato per raccogliere il feed di Twitter dalla sua Streaming API. La tabella seguente descrive le impostazioni di questo plugin.

Nome dell'impostazione Valore predefinito Descrizione
add_field {} Come nel plugin file, viene utilizzato per aggiungere un campo nell'evento di input
codec "Semplice" Viene utilizzato per decodificare gli eventi di input da Windows; prima di entrare nella pipeline Logstash
consumer_key Contiene la chiave utente dell'app Twitter. Per maggiori informazioni, visitahttps://dev.twitter.com/apps/new
consumer_secret Contiene la chiave segreta del consumatore dell'app Twitter. Per maggiori informazioni, visitahttps://dev.twitter.com/apps/new
enable_metric vero Viene utilizzato per abilitare o disabilitare il reporting e la raccolta di metriche per quell'istanza di plug-in
segue

Specifica gli ID utente separati da virgole e LogStash controlla lo stato di questi utenti su Twitter.

Per maggiori informazioni, visita

https://dev.twitter.com

full_tweet falso Puoi cambiarlo in true, se desideri che Logstash legga l'intero oggetto restituito dall'API di Twitter
id Viene utilizzato per fornire un numero di identità univoco a quella specifica istanza del plug-in di input
ignore_retweets Falso Puoi modificare l'impostazione true per ignorare i retweet nel feed Twitter di input
parole chiave È un array di parole chiave, che devono essere tracciate nel feed di input di twitter
linguaggio Definisce la lingua dei tweet necessari a LogStash dal feed di Twitter di input. Questo è un array di identificatori, che definisce una lingua specifica in Twitter
posizioni Per filtrare i tweet dal feed di input in base alla posizione specificata. Questo è un array, che contiene la longitudine e la latitudine della posizione
oauth_token È un campo obbligatorio, che contiene il token oauth dell'utente. Per ulteriori informazioni, visitare il seguente collegamentohttps://dev.twitter.com/apps
oauth_token_secret È un campo obbligatorio, che contiene il token segreto oauth dell'utente. Per ulteriori informazioni, visitare il seguente collegamentohttps://dev.twitter.com/apps
tag Per aggiungere ulteriori informazioni negli eventi di input
genere Viene utilizzato per classificare l'input da un plug-in specifico per un determinato tipo, in modo che sia facile cercare tutti gli eventi di input nelle fasi successive

TCP

TCP viene utilizzato per ottenere gli eventi sul socket TCP; può leggere dalle connessioni utente o dal server, specificato nelle impostazioni della modalità. La tabella seguente descrive le impostazioni di questo plugin:

Nome dell'impostazione Valore predefinito Descrizione
add_field {} Come nel plugin file, viene utilizzato per aggiungere un campo nell'evento di input
codec "Semplice" Viene utilizzato per decodificare gli eventi di input da Windows; prima di entrare nella pipeline Logstash
enable_metric vero Viene utilizzato per abilitare o disabilitare il reporting e la raccolta di metriche per quell'istanza di plug-in
ospite "0.0.0.0" L'indirizzo del sistema operativo del server da cui dipende il client
id Contiene la chiave utente dell'app Twitter
modalità "server" Viene utilizzato per specificare che la sorgente di input è server o client.
porta Definisce il numero di porta
ssl_cert Viene utilizzato per specificare il percorso del certificato SSL
ssl_enable falso Abilita o disabilita SSL
ssl_key Per specificare il percorso del file di chiavi SSL
tag Per aggiungere ulteriori informazioni negli eventi di input
genere Viene utilizzato per classificare l'input da un plug-in specifico per un determinato tipo, in modo che sia facile cercare tutti gli eventi di input nelle fasi successive

Logstash - Plugin di output

Logstash supporta varie origini di output e in diverse tecnologie come database, file, e-mail, output standard, ecc.

La sintassi per l'utilizzo del plug-in di output è la seguente:

output {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

È possibile scaricare il plug-in di output utilizzando il seguente comando:

>logstash-plugin install logstash-output-<plugin name>

Il Logstash-plugin utilityè presente nella cartella bin della directory di installazione di Logstash. La tabella seguente descrive i plugin di output offerti da Logstash.

Sr.No. Nome e descrizione del plugin
1

CloudWatch

Questo plug-in viene utilizzato per inviare dati metrici aggregati a CloudWatch dei servizi Web di Amazon.

2

csv

Viene utilizzato per scrivere gli eventi di output in modo separato da virgole.

3

Elasticsearch

Viene utilizzato per memorizzare i log di output nell'indice Elasticsearch.

4

email

Viene utilizzato per inviare un'e-mail di notifica, quando viene generato l'output. L'utente può aggiungere informazioni sull'output nell'email.

5

exec

Viene utilizzato per eseguire un comando, che corrisponde all'evento di output.

6

ganglia

Scrive le metriche a gmond of Gangila.

7

gelf

Viene utilizzato per produrre output per Graylog2 in formato GELF.

8

google_bigquery

Invia gli eventi a Google BigQuery.

9

google_cloud_storage

Memorizza gli eventi di output su Google Cloud Storage.

10

graphite

Viene utilizzato per memorizzare gli eventi di output in Graphite.

11

graphtastic

Viene utilizzato per scrivere le metriche di output su Windows.

12

hipchat

Viene utilizzato per memorizzare gli eventi del registro di output su HipChat.

13

http

Viene utilizzato per inviare gli eventi del registro di output agli endpoint http o https.

14

influxdb

Viene utilizzato per memorizzare l'evento di output in InfluxDB.

15

irc

Viene utilizzato per scrivere gli eventi di output su irc.

16

mongodb

Memorizza i dati di output in MongoDB.

17

nagios

Viene utilizzato per notificare a Nagios i risultati del controllo passivo.

18

nagios_nsca

Viene utilizzato per notificare a Nagios i risultati del controllo passivo tramite il protocollo NSCA.

19

opentsdb

Memorizza gli eventi di output di Logstash in OpenTSDB.

20

pipe

Trasmette gli eventi di output allo standard input di un altro programma.

21

rackspace

Viene utilizzato per inviare gli eventi del registro di output al servizio di accodamento di Rackspace Cloud.

22

redis

Utilizza il comando rpush per inviare i dati di registrazione dell'output alla coda Redis.

23

riak

Viene utilizzato per memorizzare gli eventi di output nella coppia chiave / valore distribuita Riak.

24

s3

Memorizza i dati di registrazione dell'output su Amazon Simple Storage Service.

25

sns

Viene utilizzato per inviare gli eventi di output al Simple Notification Service di Amazon.

26

solr_http

Indicizza e memorizza i dati di registrazione in uscita in Solr.

27

sps

Viene utilizzato per inviare gli eventi a Simple Queue Service di AWS.

28

statsd

Viene utilizzato per inviare i dati delle metriche al demone di rete di statsd.

29

stdout

Viene utilizzato per mostrare gli eventi di output sull'output standard della CLI come il prompt dei comandi.

30

syslog

Viene utilizzato per inviare gli eventi di output al server syslog.

31

tcp

Viene utilizzato per inviare gli eventi di output al socket TCP.

32

udp

Viene utilizzato per inviare gli eventi di output su UDP.

33

websocket

Viene utilizzato per eseguire il push degli eventi di output sul protocollo WebSocket.

34

xmpp

Viene utilizzato per eseguire il push degli eventi di output sul protocollo XMPP.

Tutti i plugin hanno le loro impostazioni specifiche, che aiutano a specificare i campi importanti come Porta, Percorso, ecc. In un plugin. Discuteremo le impostazioni di alcuni dei plugin di output.

Elasticsearch

Il plug-in di output di Elasticsearch consente a Logstash di memorizzare l'output nei cluster specifici del motore di Elasticsearch. Questa è una delle famose scelte degli utenti perché è inclusa nel pacchetto di ELK Stack e quindi fornisce soluzioni end-to-end per Devops. La tabella seguente descrive le impostazioni di questo plugin di output.

Nome dell'impostazione Valore predefinito Descrizione
azione indice Viene utilizzato per definire l'azione eseguita nel motore Elasticsearch. Altri valori per queste impostazioni sono Elimina, Crea, Aggiorna, ecc.
cacert Contiene il percorso del file con .cer o .pem per la convalida del certificato del server.
codec "Semplice" Viene utilizzato per codificare i dati di registrazione in uscita prima di inviarli all'origine di destinazione.
doc_as_upset falso Questa impostazione viene utilizzata in caso di azione di aggiornamento. Crea un documento nel motore di Elasticsearch, se l'ID del documento non è specificato nel plug-in di output.
tipo di documento Viene utilizzato per memorizzare lo stesso tipo di eventi nello stesso tipo di documento. Se non è specificato, il tipo di evento viene utilizzato per lo stesso.
flush_size 500 Viene utilizzato per migliorare le prestazioni del caricamento collettivo in Elasticsearch
host ["127.0.0.1"] È un array di indirizzi di destinazione per i dati di registrazione in uscita
idle_flush_time 1 Definisce il limite di tempo (secondo) tra i due scaricamenti, Logstash forza lo scaricamento dopo il limite di tempo specificato in questa impostazione
indice "logstash -% {+ YYYY.MM.dd}" Viene utilizzato per specificare l'indice del motore Elasticsearch
manage_temlpate vero Viene utilizzato per applicare il modello predefinito in Elasticsearch
genitore zero Viene utilizzato per specificare l'ID del documento principale in Elasticsearch
parola d'ordine Viene utilizzato per autenticare la richiesta in un cluster protetto in Elasticsearch
sentiero Viene utilizzato per specificare il percorso HTTP di Elasticsearch.
tubatura zero Viene utilizzato per impostare la pipeline di acquisizione, che l'utente desidera eseguire per un evento
proxy Viene utilizzato per specificare il proxy HTTP
retry_initial_interval 2 Viene utilizzato per impostare l'intervallo di tempo iniziale (secondi) tra i tentativi di massa. Ottiene il doppio dopo ogni tentativo fino a raggiungere retry_max_interval
retry_max_interval 64 Viene utilizzato per impostare l'intervallo di tempo massimo per retry_initial_interval
retry_on_conflict 1 È il numero di tentativi effettuati da Elasticsearch per aggiornare un documento
ssl Per abilitare o disabilitare SSL / TLS protetto su Elasticsearch
modello Contiene il percorso del template personalizzato in Elasticsearch
Nome modello "logstash" Viene utilizzato per denominare il modello in Elasticsearch
tempo scaduto 60 È il timeout per le richieste di rete a Elasticsearch
upsert "" Aggiorna il documento o, se document_id non esiste, crea un nuovo documento in Elasticsearch
utente Contiene l'utente per autenticare la richiesta Logstash nel cluster Elasticsearch protetto

E-mail

Il plug-in di output della posta elettronica viene utilizzato per notificare all'utente quando Logstash genera l'output. La tabella seguente descrive le impostazioni per questo plugin.

Nome dell'impostazione Valore predefinito Descrizione
indirizzo "Localhost" È l'indirizzo del server di posta
allegati [] Contiene i nomi e le posizioni dei file allegati
corpo "" Contiene il corpo dell'email e dovrebbe essere testo normale
cc Contiene gli indirizzi di posta elettronica separati da virgole per il cc di posta elettronica
codec "Semplice" Viene utilizzato per codificare i dati di registrazione in uscita prima di inviarli all'origine di destinazione.
tipo di contenuto "text / html; charset = UTF-8" Viene utilizzato per il tipo di contenuto dell'email
debug falso Viene utilizzato per eseguire l'inoltro della posta in modalità debug
dominio "localhost" Viene utilizzato per impostare il dominio per inviare i messaggi di posta elettronica
a partire dal "[email protected]" Viene utilizzato per specificare l'indirizzo e-mail del mittente
htmlbody "" Viene utilizzato per specificare il corpo dell'email in formato html
parola d'ordine Viene utilizzato per autenticarsi con il server di posta
porta 25 Viene utilizzato per definire la porta per comunicare con il server di posta
rispondi a Viene utilizzato per specificare l'ID e-mail per il campo di risposta dell'e-mail
soggetto "" Contiene la riga dell'oggetto dell'email
use_tls falso Abilita o disabilita TSL per la comunicazione con il server di posta
nome utente Contiene il nome utente per l'autenticazione con il server
attraverso "Smtp" Definisce i metodi di invio di e-mail tramite Logstash

Http

Questa impostazione viene utilizzata per inviare gli eventi di output su http alla destinazione. Questo plugin ha le seguenti impostazioni:

Nome dell'impostazione Valore predefinito Descrizione
automatic_retries 1 Viene utilizzato per impostare il numero di tentativi di richiesta http tramite logstash
cacert Contiene il percorso del file per la convalida del certificato del server
codec "Semplice" Viene utilizzato per codificare i dati di registrazione in uscita prima di inviarli all'origine di destinazione.
tipo di contenuto Specifica il tipo di contenuto della richiesta http al server di destinazione
biscotti vero Viene utilizzato per abilitare o disabilitare i cookie
formato "json" Viene utilizzato per impostare il formato del corpo della richiesta http
intestazioni Contiene le informazioni dell'intestazione http
http_method "" Viene utilizzato per specificare il metodo http utilizzato nella richiesta da logstash e i valori possono essere "put", "post", "patch", "delete", "get", "head"
request_timeout 60 Viene utilizzato per autenticarsi con il server di posta
url È un'impostazione richiesta per questo plug-in per specificare l'endpoint http o https

stdout

Il plugin di output stdout viene utilizzato per scrivere gli eventi di output sull'output standard dell'interfaccia della riga di comando. È il prompt dei comandi in Windows e il terminale in UNIX. Questo plugin ha le seguenti impostazioni:

Nome dell'impostazione Valore predefinito Descrizione
codec "Semplice" Viene utilizzato per codificare i dati di registrazione in uscita prima di inviarli all'origine di destinazione.
lavoratori 1 Viene utilizzato per specificare il numero di worker per l'output

statsd

È un demone di rete utilizzato per inviare i dati delle matrici su UDP ai servizi di backend di destinazione. È il prompt dei comandi in Windows e il terminale in UNIX. Questo plugin ha le seguenti impostazioni:

Nome dell'impostazione Valore predefinito Descrizione
codec "Semplice" Viene utilizzato per codificare i dati di registrazione in uscita prima di inviarli all'origine di destinazione.
contare {} Viene utilizzato per definire il conteggio da utilizzare nelle metriche
decremento [] Viene utilizzato per specificare i nomi delle metriche di decremento
ospite "Localhost" Contiene l'indirizzo del server di statsd
incremento [] Viene utilizzato per specificare i nomi delle metriche di incremento
porta 8125 Contiene il port del server statsd
frequenza di campionamento 1 Viene utilizzato per specificare la frequenza di campionamento della metrica
mittente "%{ospite}" Specifica il nome del mittente
impostato {} Viene utilizzato per specificare una metrica impostata
tempismo {} Viene utilizzato per specificare una metrica di temporizzazione
lavoratori 1 Viene utilizzato per specificare il numero di worker per l'output

Plugin di filtro

Logstash supporta vari plugin di filtri per analizzare e trasformare i log di input in un formato più strutturato e facile da interrogare.

La sintassi per l'utilizzo del plug-in del filtro è la seguente:

filter {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

Puoi scaricare il plugin del filtro utilizzando il seguente comando:

>logstash-plugin install logstash-filter-<plugin name>

L'utilità del plug-in Logstash è presente nella cartella bin della directory di installazione di Logstash. La tabella seguente descrive i plugin di output offerti da Logstash.

Sr.No. Nome e descrizione del plugin
1

aggregate

Questo plugin raccoglie o aggrega i dati da vari eventi dello stesso tipo e li elabora nell'evento finale

2

alter

Consente all'utente di modificare il campo degli eventi di registro, che il filtro di mutazioni non gestisce

3

anonymize

Viene utilizzato per sostituire i valori dei campi con un hash coerente

4

cipher

Viene utilizzato per crittografare gli eventi di output prima di archiviarli nell'origine di destinazione

5

clone

Viene utilizzato per creare duplicati degli eventi di output in Logstash

6

collate

Unisce gli eventi di diversi registri in base al loro tempo o conteggio

7

csv

Questo plugin analizza i dati dai log di input in base al separatore

8

date

Analizza le date dai campi nell'evento e le imposta come timestamp per l'evento

9

dissect

Questo plugin aiuta l'utente a estrarre i campi da dati non strutturati e rende facile per il filtro grok analizzarli correttamente

10

drop

Viene utilizzato per eliminare tutti gli eventi dello stesso tipo o qualsiasi altra somiglianza

11

elapsed

Viene utilizzato per calcolare il tempo tra gli eventi di inizio e di fine

12

Elasticsearch

Viene utilizzato per copiare i campi degli eventi di log precedenti presenti in Elasticsearch in quello corrente in Logstash

13

extractnumbers

Viene utilizzato per estrarre il numero dalle stringhe negli eventi del registro

14

geoip

Aggiunge un campo nell'evento, che contiene la latitudine e la longitudine della posizione dell'IP presente nel registro dell'evento

15

grok

È il plug-in di filtro comunemente utilizzato per analizzare l'evento per ottenere i campi

16

i18n

Elimina i caratteri speciali da un evento archiviato nel registro

17

json

Viene utilizzato per creare un oggetto Json strutturato in un evento o in un campo specifico di un evento

18

kv

Questo plugin è utile per confrontare coppie di valori chiave nei dati di registrazione

19

metrics

Viene utilizzato per aggregare metriche come il conteggio della durata del tempo in ogni evento

20

multiline

È anche uno dei plugin di filtro di uso comune, che aiuta l'utente in caso di conversione di dati di registrazione multilinea in un singolo evento.

21

mutate

Questo plugin viene utilizzato per rinominare, rimuovere, sostituire e modificare i campi nei tuoi eventi

22

range

Utilizzato per controllare i valori numerici dei campi negli eventi rispetto a un intervallo previsto e la lunghezza della stringa all'interno di un intervallo.

23

ruby

Viene utilizzato per eseguire codice Ruby arbitrario

24

sleep

In questo modo Logstash rimane inattivo per un periodo di tempo specificato

25

split

Viene utilizzato per dividere un campo di un evento e inserire tutti i valori di divisione nei cloni di quell'evento

26

xml

Viene utilizzato per creare eventi parando i dati XML presenti nei log

Plugin codec

I plugin del codec possono essere una parte dei plugin di input o output. Questi plugin vengono utilizzati per modificare o formattare la presentazione dei dati di registrazione. Logstash offre più plug-in di codec e quelli sono i seguenti:

Sr.No. Nome e descrizione del plugin
1

avro

Questo plugin codifica serializzare eventi Logstash in datum avro o decodificare record avro in eventi Logstash

2

cloudfront

Questo plug-in legge i dati codificati dal cloudfront AWS

3

cloudtrail

Questo plugin viene utilizzato per leggere i dati da AWS cloudtrail

4

collectd

Questo legge i dati dal protocollo binario chiamato raccolti su UDP

5

compress_spooler

Viene utilizzato per comprimere gli eventi di registro in Logstash in batch di spool

6

dots

Viene utilizzato il monitoraggio delle prestazioni impostando un punto per ogni evento su stdout

7

es_bulk

Viene utilizzato per convertire i dati di massa da Elasticsearch in eventi Logstash, inclusi i metadati di Elasticsearch

8

graphite

Questo codec legge i dati dalla grafite in eventi e modifica l'evento in record formattati in grafite

9

gzip_lines

Questo plugin viene utilizzato per gestire i dati codificati in gzip

10

json

Viene utilizzato per convertire un singolo elemento nell'array Json in un singolo evento Logstash

11

json_lines

Viene utilizzato per gestire i dati Json con delimitatore di nuova riga

12

line

Il plugin leggerà e scriverà eventi in un unico live, il che significa che dopo il delimitatore di nuova riga ci sarà un nuovo evento

13

multiline

Viene utilizzato per convertire i dati di registrazione multilinea in un singolo evento

14

netflow

Questo plugin viene utilizzato per convertire i dati di nertflow v5 / v9 in eventi di logstash

15

nmap

Analizza i dati dei risultati di nmap in un formato XML

16

plain

Questo legge il testo senza delimitatori

17

rubydebug

Questo plugin scriverà gli eventi Logstash di output usando la fantastica libreria di stampa di Ruby

Crea il tuo plugin

Puoi anche creare i tuoi plugin in Logstash, che soddisfano le tue esigenze. L'utilità del plug-in Logstash viene utilizzata per creare plug-in personalizzati. Qui creeremo un plugin di filtro, che aggiungerà un messaggio personalizzato negli eventi.

Genera la struttura di base

Un utente può generare i file necessari utilizzando l'opzione di generazione dell'utilità logstash-plugin oppure è disponibile anche su GitHub.

>logstash-plugin generate --type filter --name myfilter --path c:/tpwork/logstash/lib

Qui, typeviene utilizzata per specificare che il plug-in è Input, Output o Filter. In questo esempio, stiamo creando un plugin di filtro denominatomyfilter. L'opzione percorso viene utilizzata per specificare il percorso in cui si desidera creare la directory del plug-in. Dopo aver eseguito il comando sopra menzionato, vedrai che viene creata una struttura di directory.

Sviluppa il plugin

Puoi trovare il file di codice del plugin nel file \lib\logstash\filterscartella nella directory dei plugin. L'estensione del file sarà.rb.

Nel nostro caso, il file di codice si trovava nel seguente percorso:

C:\tpwork\logstash\lib\logstash-filter-myfilter\lib\logstash\filters\myfilter.rb

Modifichiamo il messaggio in - predefinito ⇒ "Ciao, lo stai imparando su tutorialspoint.com" e salviamo il file.

Installa il plugin

Per installare questo plugin, è necessario modificare il Gemfile di Logstash. È possibile trovare questo file nella directory di installazione di Logstash. Nel nostro caso, sarà inC:\tpwork\logstash. Modifica questo file utilizzando qualsiasi editor di testo e aggiungi il seguente testo al suo interno.

gem "logstash-filter-myfilter",:path => "C:/tpwork/logstash/lib/logstash-filter-myfilter"

Nel comando precedente, specifichiamo il nome del plugin insieme a dove possiamo trovarlo per l'installazione. Quindi, esegui l'utilità del plugin Logstash per installare questo plugin.

>logstash-plugin install --no-verify

Test

Qui stiamo aggiungendo myfilter in uno degli esempi precedenti -

logstash.conf

Questo file di configurazione Logstash contiene myfilter nella sezione dei filtri dopo il plug-in del filtro grok.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input1.log"
   } 
}
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid} -
            %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" ]
   }
   myfilter{}
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output1.log"
      codec => rubydebug
   }
}

Run logstash

Possiamo eseguire Logstash utilizzando il seguente comando.

>logstash –f logsatsh.conf

input.log

Il blocco di codice seguente mostra i dati del registro di input.

INFO - 48566 - TRANSACTION_START - start

output.log

Il blocco di codice seguente mostra i dati del registro di output.

{
   "path" => "C:/tpwork/logstash/bin/log/input.log",
   "@timestamp" => 2017-01-07T06:25:25.484Z,
   "loglevel" => "INFO",
   "logger" => "TRANSACTION_END",
   "@version" => "1",
   "host" => "Dell-PC",
   "label" => "end",
   "message" => "Hi, You are learning this on tutorialspoint.com",
   "taskid" => "48566",
   "tags" => []
}

Pubblicalo su Logstash

Uno sviluppatore può anche pubblicare il suo plug-in personalizzato su Logstash caricandolo su GitHub e seguendo i passaggi standardizzati definiti da Elasticsearch Company.

Fare riferimento al seguente URL per ulteriori informazioni sulla pubblicazione:

https://www.elastic.co/guide/en/logstash/current/contributing-to-logstash.html

Logstash offre API per monitorare le sue prestazioni. Queste API di monitoraggio estraggono le metriche di runtime su Logstash.

API Info nodo

Questa API viene utilizzata per ottenere le informazioni sui nodi di Logstash. Restituisce le informazioni del sistema operativo, della pipeline Logstash e della JVM in formato JSON.

È possibile estrarre le informazioni inviando un file get richiesta a Logstash utilizzando il seguente URL -

GET http://localhost:9600/_node?pretty

Risposta

Di seguito sarebbe la risposta dell'API Node Info.

{
   "host" : "Dell-PC",
   "version" : "5.0.1",
   "http_address" : "127.0.0.1:9600",
   
   "pipeline" : {
      "workers" : 4,
      "batch_size" : 125,
      "batch_delay" : 5,
      "config_reload_automatic" : false,
      "config_reload_interval" : 3
   },
   "os" : {
      "name" : "Windows 7",
      "arch" : "x86",
      "version" : "6.1",
      "available_processors" : 4
   },
   "jvm" : {
      "pid" : 312,
      "version" : "1.8.0_111",
      "vm_name" : "Java HotSpot(TM) Client VM",
      "vm_version" : "1.8.0_111",
      "vm_vendor" : "Oracle Corporation",
      "start_time_in_millis" : 1483770315412,
      
      "mem" : {
         "heap_init_in_bytes" : 16777216,
         "heap_max_in_bytes" : 1046937600,
         "non_heap_init_in_bytes" : 163840,
         "non_heap_max_in_bytes" : 0
      },
      "gc_collectors" : [ "ParNew", "ConcurrentMarkSweep" ]
   }
}

Puoi anche ottenere le informazioni specifiche di Pipeline, OS e JVM, semplicemente aggiungendo i loro nomi nell'URL.

GET http://localhost:9600/_node/os?pretty
GET http://localhost:9600/_node/pipeline?pretty
GET http://localhost:9600/_node/jvm?pretty

Plugin Info API

Questa API viene utilizzata per ottenere le informazioni sui plug-in installati nel Logstash. Puoi recuperare queste informazioni inviando una richiesta get all'URL indicato di seguito -

GET http://localhost:9600/_node/plugins?pretty

Risposta

Di seguito sarebbe la risposta dell'API Plugins Info.

{
   "host" : "Dell-PC",
   "version" : "5.0.1",
   "http_address" : "127.0.0.1:9600",
   "total" : 95,
   "plugins" : [ {
      "name" : "logstash-codec-collectd",
      "version" : "3.0.2"
   },
   {
      "name" : "logstash-codec-dots",
      "version" : "3.0.2"
   },
   {
      "name" : "logstash-codec-edn",
      "version" : "3.0.2"
   },
   {
      "name" : "logstash-codec-edn_lines",
      "version" : "3.0.2"
   },
   ............
}

API Node Stats

Questa API viene utilizzata per estrarre le statistiche del Logstash (Memoria, Processo, JVM, Pipeline) negli oggetti JSON. Puoi recuperare queste informazioni inviando una richiesta get agli URL menzionati di seguito -

GET http://localhost:9600/_node/stats/?pretty
GET http://localhost:9600/_node/stats/process?pretty
GET http://localhost:9600/_node/stats/jvm?pretty
GET http://localhost:9600/_node/stats/pipeline?pretty

API Hot Threads

Questa API recupera le informazioni sui thread attivi in ​​Logstash. Gli hot thread sono i thread java, che hanno un elevato utilizzo della CPU e durano più a lungo del normale tempo di esecuzione. Puoi recuperare queste informazioni inviando una richiesta get all'URL indicato di seguito -

GET http://localhost:9600/_node/hot_threads?pretty

Un utente può utilizzare il seguente URL per ottenere la risposta in una forma più leggibile.

GET http://localhost:9600/_node/hot_threads?human = true

In questo capitolo, discuteremo gli aspetti di sicurezza e monitoraggio di Logstash.

Monitoraggio

Logstash è un ottimo strumento per monitorare i server e i servizi negli ambienti di produzione. Le applicazioni nell'ambiente di produzione producono diversi tipi di dati di log come log di accesso, log di errori, ecc. Logstash può contare o analizzare il numero di errori, accessi o altri eventi utilizzando plugin di filtro. Questa analisi e il conteggio possono essere utilizzati per monitorare diversi server e i loro servizi.

Logstash offre plugin come HTTP Pollerper monitorare il monitoraggio dello stato del sito web. Qui stiamo monitorando un sito web denominatomysite ospitato su un server Apache Tomcat locale.

logstash.conf

In questo file di configurazione, il plug-in http_poller viene utilizzato per raggiungere il sito specificato nel plug-in dopo un intervallo di tempo specificato nell'impostazione dell'intervallo. Infine, scrive lo stato del sito su uno standard output.

input {
   http_poller {
      urls => {
         site => "http://localhost:8080/mysite"
      }
      request_timeout => 20
      interval => 30
      metadata_target => "http_poller_metadata"
   }
}
output {
   if [http_poller_metadata][code] == 200 {
      stdout {
         codec => line{format => "%{http_poller_metadata[response_message]}"}
      }
   }
   if [http_poller_metadata][code] != 200 {
      stdout {
         codec => line{format => "down"}
      }
   }
}

Esegui logstash

Possiamo eseguire Logstash con il seguente comando.

>logstash –f logstash.conf

stdout

Se il sito è attivo, l'output sarà:

Ok

Se interrompiamo il sito utilizzando il Manager App di Tomcat, l'output cambierà in -

down

Sicurezza

Logstash fornisce numerose funzionalità per una comunicazione sicura con sistemi esterni e supporta il meccanismo di autenticazione. Tutti i plug-in di Logstash supportano l'autenticazione e la crittografia su connessioni HTTP.

Sicurezza con protocollo HTTP

Ci sono impostazioni come utente e password per scopi di autenticazione in vari plugin offerti da Logstash come nel plugin Elasticsearch.

elasticsearch {
   user => <username>
   password => <password>
}

L'altra autenticazione è PKI (public key infrastructure)per Elasticsearch. Lo sviluppatore deve definire due impostazioni nel plug-in di output di Elasticsearch per abilitare l'autenticazione PKI.

elasticsearch {
   keystore => <string_value>
   keystore_password => <password>
}

Nel protocollo HTTPS, uno sviluppatore può utilizzare il certificato dell'autorità per SSL / TLS.

elasticsearch {
   ssl => true
   cacert => <path to .pem file>
}

Sicurezza con protocollo di trasporto

Per utilizzare il protocollo di trasporto con Elasticsearch, gli utenti devono impostare l'impostazione del protocollo su trasporto. Ciò evita l'annullamento del marshalling di oggetti JSON e porta a una maggiore efficienza.

L'autenticazione di base è la stessa eseguita nel protocollo http nel protocollo di output Elasticsearch.

elasticsearch {
   protocol => “transport”
   user => <username>
   password => <password>
}

L'autenticazione PKI richiede anche che i set SSL siano veri con altre impostazioni nel protocollo di output di Elasticsearch -

elasticsearch {
   protocol => “transport”
   ssl => true
   keystore => <string_value>
   keystore_password => <password>
}

Infine, la sicurezza SSL richiede un po 'di più impostazioni rispetto ad altri metodi di sicurezza nella comunicazione.

elasticsearch {
   ssl => true
   ssl => true
   keystore => <string_value>
   keystore_password => <password>
   truststore => 
      
        truststore_password => <password> } 
      

Altri vantaggi per la sicurezza di Logstash

Logstash può aiutare a inserire fonti di sistema per prevenire attacchi come attacchi denial of service. Il monitoraggio dei registri e l'analisi dei diversi eventi in tali registri possono aiutare gli amministratori di sistema a verificare la variazione delle connessioni in entrata e degli errori. Queste analisi possono aiutare a vedere se l'attacco sta avvenendo o sta per avvenire sui server.

Altri prodotti di Elasticsearch Company come x-pack e filebeat fornisce alcune funzionalità per comunicare in modo sicuro con Logstash.