2014-06-13 107 views
5

Sto utilizzando logstash, elasticsearch e kibana per analizzare i miei registri. sto avvisando via email quando una particolare stringa viene al registro tramite email uscita in logstash:Avviso via email dopo la soglia attraversata, logstash?

email { 
     match => [ "Session Detected", "logline,*Session closed*" ] 
........................... 
} 

Questo funziona bene.

Ora, voglio avvertire sul conteggio di un campo (quando una soglia è attraversata):

Ad esempio, se user è il campo, voglio avvisare quando il numero di utenti unici andare oltre 5.

È possibile farlo tramite l'output email nel logstash ??
Per favore aiuto.

EDIT: Come @Alcanzar detto ho fatto questo:

file di configurazione:

if [server] == "Server2" and [logtype] == "ABClog" { 

     grok{ 
     match => ["message", "%{TIMESTAMP_ISO8601:timestamp} %{HOSTNAME:server-name} abc\[%{INT:id}\]: 
\(%{USERNAME:user}\) CMD \(%{GREEDYDATA:command}\)"]  
     } 

     metrics { 
       meter => ["%{user}"] 
       add_tag => "metric" 
      } 

     } 

Quindi, secondo sopra, per server2 e abclog ho un modello per l'analisi di Grok mia file e sul campo user analizzato da grok Voglio applicare la metrica .

L'ho fatto nel file di configurazione come sopra, ma ho un comportamento strano quando controllo la console di logstash con -vv.

Quindi, se ci sono 9 linee di registro nel file analizza il 9 prima, dopo di che inizia parte metrica ma c'è il campo message non è il logline nel file di registro, ma è il nome utente del mio PC , quindi dà _grokparsefailure. Qualcosa del genere:

output received { 
    :event=>{"@version"=>"1", "@timestamp"=>"2014-06-17T10:21:06.980Z", "message"=>"my-pc-name", 
    "root.count"=>2, "root.rate_1m"=>0.0, "root.rate_5m"=>0.0, "root.rate_15m"=>0.0, 
    "abc.count"=>2, "abc.rate_1m"=>0.0, "abc.rate_5m"=>0.0, "abc.rate_15m"=>0.0, "tags"=>["metric", 
    "_grokparsefailure"]}, :level=>:debug, :file=>"(eval)", :line=>"137" 
    } 

Qualsiasi aiuto è apprezzato.

+0

se hai trovato una soluzione adeguata, Potete per favore condividere con otheres –

+0

@TzookBarNoy: non ho potuto ottenere una soluzione adeguata attraverso metriche così ho provato lo strumento di avviso di riemann (http://riemann.io/) e l'ho usato. –

risposta

7

Credo che quello che ti serve è http://logstash.net/docs/1.4.1/filters/metrics.

Che ci si vuole utilizzare un tag metrics per calcolare il tasso del vostro evento, e quindi utilizzare la thing.rate_1m o thing.rate_5m in un if dichiarazione intorno alla vostra uscita e-mail.

Ad esempio:

filter { 
    if [message] =~ /whatever_message_you_want/ { 
    metrics { 
     meter => "user" 
     add_tag => "metric" 
    } 
    } 
} 

output { 
    if "metric" in [tags] and [user.rate_1m] > 1 { 
    email { ... } 
    } 
} 
+0

La risposta di cui sopra conterà il numero di utenti, ma voglio avvisare quando il numero di soglia di utenti UNICI (come in questione) è superato. Può essere fatto ?? –

+0

Si prega di verificare la modifica alla domanda –

+0

Se si misura la velocità degli utenti unici, sarà necessario creare un filtro personalizzato per quello conforme alla propria situazione poiché nessuno dei filtri preesistenti farà esattamente ciò che si volere. C'è un filtro del throttle che potrebbe aiutarti, ma sembra che i tuoi requisiti non si adattino a ciò che Logstash può fare fuori dalla scatola. – Alcanzar

0

Aggregando sul lato logstash è piuttosto limitata. Aumenta anche le dimensioni dello stato, quindi il consumo di memoria potrebbe aumentare. Gli avvisi eseguiti sul livello Elasticsearch offrono più libertà e possibilità.

avvisi Logz.io in cima ELK sono offerti nel blog di seguito: http://logz.io/blog/introducing-alerts-for-elk/