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

64

我正在使用ELK从我的日志文件创建仪表板。我有一个包含id值和“success” / “failure”值的条目的日志文件,显示给定id的操作是否成功或失败。每个操作/ id可以无限次失败,并且最多成功一次。在我的Kibana仪表板中,我想显示具有“failure”值的每个操作id的日志条目计数,但我想过滤掉该id存在“success”日志条目的情况。也就是说,我只对从未成功的操作感兴趣。有什么技巧可以实现这个需求吗?

5个回答

117

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

!(_exists_:"your_variable") 

你可以切换筛选器或编写反向查询

_exists_:"your_variable"
在Kibana 4和Kibana 3中,您可以使用现在已被弃用的查询。
_missing_:"your_variable"  

注意: 在 Elasticsearch 7.x 版本中,Kibana现在在搜索栏中提供下拉菜单以选择KQL或Lucene风格的查询。请注意,诸如 _exists_:FIELD 的语法是 Lucene 语法,您需要相应地设置下拉菜单。



1
以下是有关编程的内容,请将其从英语翻译成中文。仅返回已翻译的文本:供参考,这里是记录“存在”和“缺失”的下划线符号的链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_field_names - Ted Tomlinson
3
在ElasticSearch 5.0中似乎不再存在_missing_!(_exists_:"field")可以正常工作。 - mindex
感谢 @Fedearne 更新查询语法! - Mlalahoi
2
注意:在7.x版本中,当存在“OR”时,我必须将(!_exists_:"your_variable")放在括号中。 - ricka

29

顺便说一下,在 Kibana 搜索栏中,我只能使用大写的“NOT”。 - kimreik

13

! (_exists_:NAME)这个语句对我无效。我参照了以下建议:

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

NOT _exists_:NAME

更新 我面临的问题是,ES语法禁止在否定操作符后面使用空格。请使用以下其中一种:

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

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


注意:在 Elasticsearch 7.x 中,Kibana 现在有一个下拉菜单可以选择 KQL 或 Lucene 风格的查询语句。请注意,如 _exists_:FIELD 这样的语法是 Lucene 语法,您需要相应地设置下拉菜单。


8

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

your_variable:*

为了回答你的问题,你可以将其否定:
not your_variable:*

您可以在此处找到更多文档:https://www.elastic.co/guide/en/kibana/7.15/kuery-query.html 您也可以在搜索字段内点击按钮切换回Lucene,但我认为新语言更易于使用:enter image description here

-4

我只能看到基于内容选择文档的选项,而我正在寻找一种根据其他文档的内容选择文档的解决方案,即类似于SQL的“not exists”/“not in”的查询。我错过了什么吗? - Anton Kupias
以下方案是否适合您:
  1. 在 Kibana 中创建一个新的查询,使用条件获取日志条目。在您的情况下,如果数据在同一字段上,只需使用 value:failure 即可,但这也适用于布尔运算符,如 NOT。
  2. 在 Kibana 中添加一个新面板,简单术语面板即可。对于参数“Field”,请放置您要计数的 ID,然后在查询下拉菜单中选择已选择,并突出显示您在上一步中执行的查询。
- tony v
问题是按照SQL的“不存在”样式进行过滤:当具有相同ID的值=成功的条目不存在时,我只想计算值=失败的条目。 - Anton Kupias
好的,那么上面的方法不可行,抱歉。如果您有任何其他指示成功日志条目的字段,可以将其从查询中排除,然后上述方法应该可行。此外,Kibana 4现在支持聚合,这可能允许您执行更高级的唯一计数操作。 - tony v

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接