2014-12-18 5 views
21

Sto utilizzando ELK per creare dashboard dai miei file di registro. Ho un file di log con voci che contengono un valore id e un valore "success"/"failure", che mostra se un'operazione con un determinato ID ha avuto esito positivo o negativo. Ogni operazione/id può fallire un numero illimitato di volte e riuscire al massimo una volta. Nella mia dashboard di Kibana voglio visualizzare il conteggio delle voci di registro con un valore di "fallimento" per ogni id di operazione, ma voglio filtrare i casi in cui esiste una voce di registro "riuscita" per l'ID. io sono interessato solo a operazioni che non hanno mai avuto successo. Qualche suggerimento per trucchi che raggiungerebbe questo?Come fare il filtro di tipo "dove non esiste" in Kibana/ELK?

risposta

0

sono stato in grado di realizzare questo con un semplice trucco utilizzando la nuova Kibana 4 (attualmente in versione beta), che ha la possibilità di sommare su campi numerici. Ho semplicemente creato un nuovo campo numerico per l'esito positivo/negativo, i valori assegnati 1 (errore) o -1000000 (esito positivo) per le voci nel mio filtro Logstash e sommato i valori per ciascun ID. Non soddisfa tecnicamente il mio originale requisito "numero illimitato di volte", ma in pratica un numero negativo molto ampio è stato sufficiente per produrre sempre una somma negativa per i casi che hanno avuto successo.

+0

Sembra un po 'kludgy - perché -1000000 invece di solo 0? Si può semplicemente usare un filtro logstash per incrementare un contatore all'interno di un documento i cui ID sono basati su (o equivalgono a) l'ID che si sta cercando. Ogni volta che vede arrivare una linea di successo, incrementa il contatore nel documento ES corrispondente. È quindi molto semplice interrogare gli ID con un conteggio di 0 o nessun contatore. Vedi http://stackoverflow.com/a/39157195/32536 per un filtro di esempio. –

-2

Un'opzione sarebbe quella di creare una propria query per questo criterio in Kibana. Quindi è sufficiente avere il pannello che esegue il conteggio solo per utilizzare questa query.

value:failure 

Maggiori informazioni qui: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax

+0

Posso vedere solo le opzioni per selezionare un documento in base al suo contenuto lì, mentre sto cercando una soluzione che seleziona i documenti in base alla tenda di altri documenti, cioè una query di stile "non esiste"/"non in" di SQL. Ho dimenticato qualcosa? –

+0

Non è il seguente lavoro per voi: 1. In Kibana, creare una nuova query con i criteri per ottenere le voci del registro. Nel tuo caso solo con valore: l'errore è probabilmente sufficiente se i dati si trovano nello stesso campo, ma ciò funzionerebbe anche con operatori booleani come NOT. 2. Aggiungi un nuovo pannello in Kibana, il pannello basato su semplici termini dovrebbe fare. Per i parametri Field inserisci il tuo ID che vuoi contare, quindi sul menu a tendina delle query seleziona Selezionato e evidenzia solo la query che hai fatto nel passaggio precedente. –

+0

Il problema sta filtrando con lo stile sql "non esiste": voglio contare solo le voci con valore = errore quando nessuna voce con valore = successo per lo stesso id esiste. –

63

Questo è facile nella barra di ricerca di Kibana 5. Basta aggiungere un filtro

!(_exists_:"your_variable") 

è possibile attivare o disattivare il filtro o scrivere query inversa come

_exists_:"your_variable" 

In Kibana 4 e Kibana 3 è possibile utilizzare questa query che ora è deprecato

_missing_:"your_variable" 
+1

per riferimento, ecco il link dove è documentata la \ _ notazione per "esiste" e "mancante": https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query -string-query.html # _field_names –

+0

grazie mlalahoi. –

+2

'_missing_' non sembra più presente in ElasticSearch 5.0. '! (_ exists _:" field ")' funziona bene. – mindex

Problemi correlati