如何在Kibana / ELK中进行“where not exists”类型过滤?

时间:2014-12-18 00:55:22

标签: elasticsearch logstash kibana

我正在使用ELK从我的日志文件创建仪表板。我有一个日志文件,其中的条目包含一个id值和一个“success”/“failure”值,显示具有给定id的操作是成功还是失败。每个操作/ id可以无限次地失败并且最多可以成功一次。在我的Kibana仪表板中,我想显示每个操作ID的“失败”值的日志条目计数,但我想过滤掉id存在“成功”日志条目的情况。即我只对从未成功的行动感兴趣。任何可以实现此目的的技巧提示?

4 个答案:

答案 0 :(得分:81)

这在Kibana 5搜索栏中很容易。只需添加一个过滤器

!(_exists_:"your_variable") 

您可以切换过滤器或将反向查询写为

_exists_:"your_variable"

在Kibana 4和Kibana 3中,您可以使用现已弃用的此查询

_missing_:"your_variable"  

答案 1 :(得分:2)

! (_exists_:NAME)对我不起作用。我使用的建议来自:

https://discuss.elastic.co/t/kibana-5-0-0--missing--is-not-working-anymore/64336

NOT _exists_:NAME

UPDATE 我遇到的问题是ES语法禁止在否定运算符之后的空格。使用以下之一:

NOT _exists_:FIELD
!_exists_:FIELD
-_exists_:FIELD

查看教程:https://www.timroes.de/2016/05/29/elasticsearch-kibana-queries-in-depth-tutorial/

答案 2 :(得分:2)

在较新的ELK版本中(我认为在Elasticsearch 6之后),您应该使用field:*检查字段是否存在,并使用not field:*检查字段是否丢失。

弹性搜索参考: https://www.elastic.co/guide/en/elasticsearch/reference/6.5/query-dsl-query-string-query.html#_wildcards

答案 3 :(得分:-2)

一种选择是在Kibana中为此条件创建自己的查询。然后让你的面板进行计数只是为了使用这个查询。

value:failure

更多信息: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax