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
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.
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
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? –
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. –
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. –
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"
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 –
grazie mlalahoi. –
'_missing_' non sembra più presente in ElasticSearch 5.0. '! (_ exists _:" field ")' funziona bene. – mindex
- 1. Come posso fare un inserto dove non esiste?
- 2. SELECT * DOVE NON ESISTE
- 3. Come fare se non esiste in SQLite
- 4. LINQ - Dove non esiste
- 5. ActiveRecord DOVE NON ESISTE
- 6. Il filtro dplyr non maschera il filtro di base?
- 7. Scala: filtro basato sul tipo
- 8. Postgresql: ERRORE: il tipo "citext" non esiste
- 9. Il tipo 'X' non esiste nel tipo 'Y.Z'
- 10. MC3074 - il tipo non esiste in "clr-namespace ..."
- 11. Il nome del tipo {myUserControl} non esiste nel tipo {} myNamespace.myNamespace
- 12. Come fare gruppo da filtro nel Aurelia
- 13. Esiste qualche tipo di "ReferenceComparer" in .NET?
- 14. Inserisci dove non esiste, senza chiave primaria
- 15. Tipo di filtro String in Clojure
- 16. Filtro MQL di Freebase dove valore! = Null?
- 17. Dove è definito il filtro in TFS 2012?
- 18. In Django QuerySet, come posso fare la negazione nel filtro?
- 19. DOVE NON esiste in PostgreSQL dà errore di sintassi
- 20. Symfony2 - Il tipo di blocco sonata.user.block.menu non esiste
- 21. Cancellare il filtro senza fare clic sul pulsante di cancellazione
- 22. Come fare un filtro minore o uguale in Django queryset?
- 23. scintilla Scala: Filtro RDD se il record della RDD non esiste in un altro RDD
- 24. Amazon Cloudsearch: filtro se esiste
- 25. Esiste un filtro per dividere per il modello Django?
- 26. Come fare "o" filtro nella chiazza di petrolio
- 27. creare dinamicamente Includere con Dove Filtro
- 28. Esiste un vincolo di tipo generico per "dove NON viene derivato da"?
- 29. Come applicare il filtro video in Android?
- 30. Esiste un tipo di funzione in C#?
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. –