Kibana:我可以将 "Time" 存储为变量并将 运行 存储为连续搜索吗?

Kibana: can I store "Time" as a variable and run a consecutive search?

我想将多个搜索合而为一,步骤如下:

  1. 在 Kibana 中搜索此 ID:"b2c729b5-6440-4829-8562-abd81991e2a0" 这将 return 给我一堆日志。在这些日志中,我需要获取第一个和最后一个时间戳:

  1. 我现在想将这两个数据从:September 3rd 2019, 21:28:22.155,到:September 3rd 2019, 21:28:23.524 存储在 2 个变量中

  2. 运行 在 Kibana 中第二次搜索单词 "fail" 在这两个时间变量之间

如何在不需要 copy/paste 和 运行 第二次查询的情况下自动化 整个过程?

编辑:

长篇小故事: 我在一家生产自动驾驶汽车软件的公司工作。 情景: 预订被拒绝,我们需要了解原因。
问题出在哪里: 我需要在 3 台不同的机器上监控几秒钟的日志。每个日志是完全分开的,日志之间没有关系所以我不能在发现中写查询,我需要 运行 3 个分开的查询。

示例:

  1. 一个预订被拒绝了,所以我打开 Chrome 并在 "elk-prod.myhost.com" 上搜索 BookingID:"b2c729b5-6440-4829-8562-abd81991e2a0" 我有很多日志 return范围为 2 秒(从:September 3rd 2019, 21:28:22.155,到:September 3rd 2019, 21:28:23.524)。
  2. 现在我需要知道车上发生了什么,所以我打开一个新的 Chrome 选项卡并在 "elk-prod.myhost.com" 上搜索 CarID:"Tesla-45-OU" 时间范围从: September 3rd 2019, 21:28:22.155, 收件人: September 3rd 2019, 21:28:23.524
  3. 现在我需要知道为什么计算匹配的服务器拒绝了预订,所以我打开一个新的 Chrome 选项卡并始终在 FROM 的时间范围内搜索词 CalculationMatrixSeptember 3rd 2019, 21:28:22.155,收件人:September 3rd 2019, 21:28:23.524

结论: 我想停止手动打开 Chrome 选项卡并将整个过程自动化。我不知道这本书是什么时候制作的,所以我首先需要搜索 BookingID "b2c729b5-6440-4829-8562-abd81991e2a0",然后存储第一个和最后一个日志的时间戳以及 运行 基于这些时间戳的第二个和第三个查询.

我搜索的 3 个日志之间没有任何关系,因此无法从 Discover 中过滤,我需要自动执行 3 个不同的查询。

Kibana 确实是这样工作的(任何顺序都可以):

  1. Select时间过滤器:https://www.elastic.co/guide/en/kibana/current/set-time-filter.html

  2. 添加额外的搜索条件,例如字段 sb2c729b5-6440-4829-8562-abd81991e2a0

  3. 添加额外的搜索条件,例如字段 xFail

另外你可以view surrounding documentshttps://www.elastic.co/guide/en/kibana/current/document-context.html#document-context

这就是 Kibana 的工作方式。

你可以事先准备一些filters,保存起来,如果你想automate以某种方式发现的过程,就可以使用它们。 您可以在 KibanaDiscover 选项卡中使用 New/Save/Open 选项执行此操作。

编辑: 我不认为你可以在 Kibana 中实现你所需要的。正如我之前提到的,一种选择是更改传入 Elasticsearch 的数据,以便您可以通过在 Kibana 中发现来搜索它。另一种选择可能是构建 Java 应用程序,即使用 Elasticsearch - 然后您可以编写 returns 所需数据的算法。但我认为这是一个很大的开销,我建议先检查数据。

编辑:为了澄清 - 你可以创建外部 Java 让我们说 SpringBoot 使用 Elasticsearch 的应用程序 - 你需要在里面。 但在此选项中,您根本不会使用 Kibana。 您可以将结果导出到 csv 或代码中您想要的内容。 SpringBoot 应用程序可以向 ElasticSearch 询问它需要的任何内容,然后很容易将这些时间变量存储在 Java 代码中。

编辑:在 OP 编辑​​问题以对其进行显着更改后:

@FrancescoMantovani 好吧,编辑后的版本与您第一次在此处发布 How to automate the whole process without need of copy/paste and running a second query? 并一次性搜索单词 fail 的版本有很大不同。在接受的答案中,您仍然一次使用三个过滤器,因此不是一次搜索,而是三个。 更重要的是,如果您使用一个索引,并通过 filebeat 从多个主机发送数据,您甚至不必创建此 dashboard 即可。然后你可以 you can select the exact period from when the very first document happened to the very last 关于过滤器,然后删除它并添加你需要的另一个过滤器 - 就这么简单。在你写 one query

之前

How to automate the whole process without need of copy/paste and running a second query?

不是three。并且您不需要在每次要更改过滤器时都在 Chrome 中打开新选项卡,只需组织数据,例如使用前面提到的 filebeat

There is no relation between the 3 logs

从你写的内容来看,现实是存在的,现在是时间

如果数据在 three diferent indicies 中(因为文档没有太多相似的数据)你可以这样做:

您可以在 dicover 中轻松更改它们,请参阅: 你可以去discoverselectindex 1搜索,select你需要的时间段,当你改index的时候time range还是那个你 selected,你只需要改变过滤器 - 你会得到你需要的。

这是我的做法。首先,据我了解,你有三个不同的索引:

  • "bookings"
  • 一个
  • 一个 "cars"
  • 一个 "matchings"

首先,在 Discover 中,我将创建三个保存的搜索,每个索引模式一个。然后在 Visualize 中,我将在预订保存的搜索上创建一个垂直条形图(在 timestamp 字段上按 date_histogram 划分 X 轴,其余部分保持原样)。您会得到一个很好的按时间划分的所有预订事件的直方图。 最后,我将创建一个仪表板并在其中添加垂直条形图 + 这三个已保存的搜索。

完成后,我按照你上面描述的流程进行搜索的方式如下:

  1. 在顶部过滤栏中搜索预订 ID b2c729b5-6440-4829-8562-abd81991e2a0。在条形图直方图(预订)中,您将看到与 selected 预订相关的所有文档。在该图表上,您可以 select 从第一个预订文件发生到最后一个预订文件发生的确切时间段。这将调整顶部的主要时间选择器,start/end 时间将由 Kibana"remembered"

  2. 从顶部过滤器中删除预订 ID(因为我们现在知道时间范围并且 Kibana 存储了它)。在顶部过滤栏中搜索 Tesla-45-OU。条形直方图 + 预订保存的搜索 + 匹配保存的搜索将为空,但您将在第二个列表(汽车列表)中有数据。在那里找到你需要找到的任何东西,然后进入下一步。

  3. 从顶部过滤器中删除汽车 ID 并搜索 ComputationMatrix。现在,第三个保存的搜索将显示您在该时间范围内需要查看的任何文档。

我缺乏实际数据来尝试这个,但我绝对认为这是可能的,因为我已经在上面列出了,可能需要一些改编。