Kibana:我可以将 "Time" 存储为变量并将 运行 存储为连续搜索吗?
Kibana: can I store "Time" as a variable and run a consecutive search?
我想将多个搜索合而为一,步骤如下:
- 在 Kibana 中搜索此 ID:
"b2c729b5-6440-4829-8562-abd81991e2a0"
这将 return 给我一堆日志。在这些日志中,我需要获取第一个和最后一个时间戳:
我现在想将这两个数据从:September 3rd 2019, 21:28:22.155
,到:September 3rd 2019, 21:28:23.524
存储在 2 个变量中
运行 在 Kibana 中第二次搜索单词 "fail"
在这两个时间变量之间
如何在不需要 copy/paste 和 运行 第二次查询的情况下自动化 整个过程?
编辑:
长篇小故事: 我在一家生产自动驾驶汽车软件的公司工作。
情景: 预订被拒绝,我们需要了解原因。
问题出在哪里: 我需要在 3 台不同的机器上监控几秒钟的日志。每个日志是完全分开的,日志之间没有关系所以我不能在发现中写查询,我需要 运行 3 个分开的查询。
示例:
- 一个预订被拒绝了,所以我打开 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
)。
- 现在我需要知道车上发生了什么,所以我打开一个新的 Chrome 选项卡并在 "elk-prod.myhost.com" 上搜索 CarID:
"Tesla-45-OU"
时间范围从: September 3rd 2019, 21:28:22.155
, 收件人: September 3rd 2019, 21:28:23.524
- 现在我需要知道为什么计算匹配的服务器拒绝了预订,所以我打开一个新的 Chrome 选项卡并始终在 FROM 的时间范围内搜索词
CalculationMatrix
:September 3rd 2019, 21:28:22.155
,收件人:September 3rd 2019, 21:28:23.524
结论: 我想停止手动打开 Chrome 选项卡并将整个过程自动化。我不知道这本书是什么时候制作的,所以我首先需要搜索 BookingID "b2c729b5-6440-4829-8562-abd81991e2a0"
,然后存储第一个和最后一个日志的时间戳以及 运行 基于这些时间戳的第二个和第三个查询.
我搜索的 3 个日志之间没有任何关系,因此无法从 Discover 中过滤,我需要自动执行 3 个不同的查询。
Kibana 确实是这样工作的(任何顺序都可以):
Select时间过滤器:https://www.elastic.co/guide/en/kibana/current/set-time-filter.html
添加额外的搜索条件,例如字段 s
是 b2c729b5-6440-4829-8562-abd81991e2a0
。
添加额外的搜索条件,例如字段 x
是 Fail
。
另外你可以view surrounding documents
https://www.elastic.co/guide/en/kibana/current/document-context.html#document-context
这就是 Kibana
的工作方式。
你可以事先准备一些filters
,保存起来,如果你想automate
以某种方式发现的过程,就可以使用它们。
您可以在 Kibana
的 Discover
选项卡中使用 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
中轻松更改它们,请参阅:
你可以去discover
selectindex 1
搜索,select你需要的时间段,当你改index
的时候time range
还是那个你 selected,你只需要改变过滤器 - 你会得到你需要的。
这是我的做法。首先,据我了解,你有三个不同的索引:
- "bookings"
一个
- 一个 "cars"
- 一个 "matchings"
首先,在 Discover 中,我将创建三个保存的搜索,每个索引模式一个。然后在 Visualize 中,我将在预订保存的搜索上创建一个垂直条形图(在 timestamp
字段上按 date_histogram
划分 X 轴,其余部分保持原样)。您会得到一个很好的按时间划分的所有预订事件的直方图。
最后,我将创建一个仪表板并在其中添加垂直条形图 + 这三个已保存的搜索。
完成后,我按照你上面描述的流程进行搜索的方式如下:
在顶部过滤栏中搜索预订 ID b2c729b5-6440-4829-8562-abd81991e2a0
。在条形图直方图(预订)中,您将看到与 selected 预订相关的所有文档。在该图表上,您可以 select 从第一个预订文件发生到最后一个预订文件发生的确切时间段。这将调整顶部的主要时间选择器,start/end 时间将由 Kibana"remembered"
从顶部过滤器中删除预订 ID(因为我们现在知道时间范围并且 Kibana 存储了它)。在顶部过滤栏中搜索 Tesla-45-OU
。条形直方图 + 预订保存的搜索 + 匹配保存的搜索将为空,但您将在第二个列表(汽车列表)中有数据。在那里找到你需要找到的任何东西,然后进入下一步。
从顶部过滤器中删除汽车 ID 并搜索 ComputationMatrix
。现在,第三个保存的搜索将显示您在该时间范围内需要查看的任何文档。
我缺乏实际数据来尝试这个,但我绝对认为这是可能的,因为我已经在上面列出了,可能需要一些改编。
我想将多个搜索合而为一,步骤如下:
- 在 Kibana 中搜索此 ID:
"b2c729b5-6440-4829-8562-abd81991e2a0"
这将 return 给我一堆日志。在这些日志中,我需要获取第一个和最后一个时间戳:
我现在想将这两个数据从:
September 3rd 2019, 21:28:22.155
,到:September 3rd 2019, 21:28:23.524
存储在 2 个变量中运行 在 Kibana 中第二次搜索单词
"fail"
在这两个时间变量之间
如何在不需要 copy/paste 和 运行 第二次查询的情况下自动化 整个过程?
编辑:
长篇小故事: 我在一家生产自动驾驶汽车软件的公司工作。
情景: 预订被拒绝,我们需要了解原因。
问题出在哪里: 我需要在 3 台不同的机器上监控几秒钟的日志。每个日志是完全分开的,日志之间没有关系所以我不能在发现中写查询,我需要 运行 3 个分开的查询。
示例:
- 一个预订被拒绝了,所以我打开 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
)。 - 现在我需要知道车上发生了什么,所以我打开一个新的 Chrome 选项卡并在 "elk-prod.myhost.com" 上搜索 CarID:
"Tesla-45-OU"
时间范围从:September 3rd 2019, 21:28:22.155
, 收件人:September 3rd 2019, 21:28:23.524
- 现在我需要知道为什么计算匹配的服务器拒绝了预订,所以我打开一个新的 Chrome 选项卡并始终在 FROM 的时间范围内搜索词
CalculationMatrix
:September 3rd 2019, 21:28:22.155
,收件人:September 3rd 2019, 21:28:23.524
结论: 我想停止手动打开 Chrome 选项卡并将整个过程自动化。我不知道这本书是什么时候制作的,所以我首先需要搜索 BookingID "b2c729b5-6440-4829-8562-abd81991e2a0"
,然后存储第一个和最后一个日志的时间戳以及 运行 基于这些时间戳的第二个和第三个查询.
我搜索的 3 个日志之间没有任何关系,因此无法从 Discover 中过滤,我需要自动执行 3 个不同的查询。
Kibana 确实是这样工作的(任何顺序都可以):
Select时间过滤器:https://www.elastic.co/guide/en/kibana/current/set-time-filter.html
添加额外的搜索条件,例如字段
s
是b2c729b5-6440-4829-8562-abd81991e2a0
。添加额外的搜索条件,例如字段
x
是Fail
。
另外你可以view surrounding documents
https://www.elastic.co/guide/en/kibana/current/document-context.html#document-context
这就是 Kibana
的工作方式。
你可以事先准备一些filters
,保存起来,如果你想automate
以某种方式发现的过程,就可以使用它们。
您可以在 Kibana
的 Discover
选项卡中使用 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
中轻松更改它们,请参阅:
discover
selectindex 1
搜索,select你需要的时间段,当你改index
的时候time range
还是那个你 selected,你只需要改变过滤器 - 你会得到你需要的。
这是我的做法。首先,据我了解,你有三个不同的索引:
- "bookings" 一个
- 一个 "cars"
- 一个 "matchings"
首先,在 Discover 中,我将创建三个保存的搜索,每个索引模式一个。然后在 Visualize 中,我将在预订保存的搜索上创建一个垂直条形图(在 timestamp
字段上按 date_histogram
划分 X 轴,其余部分保持原样)。您会得到一个很好的按时间划分的所有预订事件的直方图。
最后,我将创建一个仪表板并在其中添加垂直条形图 + 这三个已保存的搜索。
完成后,我按照你上面描述的流程进行搜索的方式如下:
在顶部过滤栏中搜索预订 ID
b2c729b5-6440-4829-8562-abd81991e2a0
。在条形图直方图(预订)中,您将看到与 selected 预订相关的所有文档。在该图表上,您可以 select 从第一个预订文件发生到最后一个预订文件发生的确切时间段。这将调整顶部的主要时间选择器,start/end 时间将由 Kibana"remembered"从顶部过滤器中删除预订 ID(因为我们现在知道时间范围并且 Kibana 存储了它)。在顶部过滤栏中搜索
Tesla-45-OU
。条形直方图 + 预订保存的搜索 + 匹配保存的搜索将为空,但您将在第二个列表(汽车列表)中有数据。在那里找到你需要找到的任何东西,然后进入下一步。从顶部过滤器中删除汽车 ID 并搜索
ComputationMatrix
。现在,第三个保存的搜索将显示您在该时间范围内需要查看的任何文档。
我缺乏实际数据来尝试这个,但我绝对认为这是可能的,因为我已经在上面列出了,可能需要一些改编。