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

Ant*_*ias 35 elasticsearch logstash kibana

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

Mla*_*hoi 88

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

!(_exists_:"your_variable") 
Run Code Online (Sandbox Code Playgroud)

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

_exists_:"your_variable"
Run Code Online (Sandbox Code Playgroud)

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

_missing_:"your_variable"  
Run Code Online (Sandbox Code Playgroud)

  • `_missing_`似乎不再存在于ElasticSearch 5.0中.`!(_ exists _:"field")`工作正常. (3认同)
  • 注意:在 7.x 中,当出现 `OR` 时,我必须将 `(!_exists_:"your_variable")` 放在括号中 (2认同)

Ali*_*Ali 16

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

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


gav*_*koa 9

! (_exists_:NAME)不适合我。我使用来自以下方面的建议:

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

NOT _exists_:NAME
Run Code Online (Sandbox Code Playgroud)

更新我面临的问题是 ES 语法在否定运算符之后禁止空格。使用以下之一:

NOT _exists_:FIELD
!_exists_:FIELD
-_exists_:FIELD
Run Code Online (Sandbox Code Playgroud)

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


注意:在 Elasticsearch 7.x 中,Kibana 现在有一个下拉菜单,可以在搜索栏中选择 KQL 或 Lucene 样式的查询。请注意诸如_exists_:FIELDLucene 语法之类的语法,您需要相应地设置下拉菜单。


小智 8

在较新版本的 Kibana 中,默认语言现在是KQL(Kibana 查询语言),不再是 Lucene。所以这里的大多数答案都已经过时了。查询字段是否存在如下:

your_variable:*
Run Code Online (Sandbox Code Playgroud)

要回答你的问题,你可以否定这一点:

not your_variable:*
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到更多文档:https://www.elastic.co/guide/en/kibana/7.15/kuery-query.html

如果您单击搜索字段内的该按钮,您也可以切换回 Lucene,但在我看来,新语言更容易使用: 在此输入图像描述