在 实际的 Kibana 使用中,我们经常会使用到 filter。比如,当我们进行威胁捕获时,我们通过 filter 的使用,快速地定位那些异常的服务器,并采取相应的行动。filter 可以很方便地帮我们筛选所需要的数据,更重要的是它很方便地让我们随时编辑,启动或者禁止这个 filter 的使用。过滤器在很多方面与搜索非常相似。 例如,过滤器和搜索都将转换为查询 DSL(Elasticsearch 使用的查询),并且两者都可以过滤将要显示的文档。 但是,过滤器提供的主要优点之一是你不仅限于一个过滤器。 你可以根据需要创建任意数量的过滤器。 而对于搜索,你只有一个搜索栏。 创建过滤器后,你将可以执行以下操作:
- 启动或禁止过滤器
- 固定你的过滤器
- 反转你的过滤器
- 删除你的过滤器
- 编辑你的过滤器
在今天的文章中,我来介绍一下创建 filter 的几种方法。
如何在 Kibana 中使用 filter 来过滤数据
准备数据
在今天的展示中,我将使用 Elastic Stack 7.10 来进行展示。我使用 Kibana 自带的数据来进行展示。首先我们打开 Kibana,并进入到 home:
点击上面的 Add data 按钮:
这样就在 Elasticsearch 中创建一个叫做 kibana_sample_data_logs 的索引。接下来,我们将以这个索引为例来进行展示。
创建 filters
使用 “Discover”界 面中的值来创建过滤器
我们首先打开 Discover j界面。我们需要选择合适的时间范围已经我们需要分析的索引名称。针对我们的情况,这个索引是 kibana_sample_data_logs。你可以通过鼠标来选择 time filter 的范围:
你也可以直接通过在 time picker 里直接输入你想要的时间范围:
我展开文档的内容:
当我们把光标停留于一个字段上面时,在该字段的左边会出现 + 以及 - 符号的图标。他们分别表示设置一个 filter。如果选择 +,它表示显示所有的目的地为 CZ 的文档,而当我们选择 - 时,它则表示显示所有目的地为非 CZ 的所有文档。我们点击 + 符号:
我们在屏幕的左上方出现了一个新添加的 filter。它查询所有目的地为 CZ 的文档。目前只有一个文档。我们针对这个 filter 也可以进行修改,比如:
当我们选择 Exclude results 这个选项的时候,它表示我们想要查询那些非 CZ 目的地的文档。从上面的图标可以看出来是一个 - 符号:
上面的 filter 显示的是 NOT geo.dest: CZ。现在这次显示的文档的数目非常多。当然,我们也可以针对这个 filter 进行编辑:
在上面,我们修改这个 filter 来查询目的地位 CN (中国)的所有文档。点击上面的 Save 按钮:
这样,我们可以看到所有的目的地位 CN 的所有文档。当然,在进行 thread hunting 时,我们有时需要禁止这个 filter 的操作。我们可选择禁止的操作:
这样的操作使得我们很容易启动或禁止这个 filter。这样往往比在 search bar 中进行搜索来的更方便直接。上面显示该 filter 完全失去作用。文档数又回到最先的文档数 1833。
当然,我们也可以重新启动该 filter:
或者通过 Delete 来删除之前已经创建的 filter。细心的读者,可以能已经发现在上还有一个 Pin across all apps 这样的一个选项。它的意思是一旦我们选择这个,那么这个 filter 将在任何其它的可视化图中或者 Dashboard 中显示并起作用。我们现在选择这个选项:
我们发现这个 filter 的边框会有所改变。我们接下来打开这个索引相对应的 Dashboard:
在这个 Dashboard 中,我们可以看到 geo.dest: CN 这个 filter 已经存在,并对 Dashboard 的展示起作用。
如果我们想了解这个 filter 到底是如何用 Query DSL 来实现的,我们可以通过如下的操作来完成:
在上面,我们可以清楚地看到它使用的是 match_phrase 来实现的。如果你想了解更多关于如何使用 Query DSL 来进行 filter 操作的,请参阅我之前的文章 “开始使用Elasticsearch (2)”。你可以阅读里面的 “复合查询” 部分。
你还可以通过字段列表来创建 filter:
如果我们点击上面的 + 号,那么我们可以看到添加的 filter:
上面显示 geo.src 是 CN,也就是来自中国的文档。
手动创建 filter
我们也可以通过手动的方式来进行创建 filter:
我们点击 Add filter:
在上面,我们创建一个 filter。它出现来自 CN 或者 US 的所有文档。我们也可以启动上面的 Create custom label 开关来为这个 filter 取一个自己喜欢的名字。
点击上面的 Save 按钮:
在上面我们已经创建了一个 filter。它显示来自 CN 已经 US 共有 452 个文档。当然,如果我们不用 filter,而直接使用 search bar,我们也可以达到同样的效果:
在某种程度上讲,搜索和 filter 的效果是一样的,但是 filter 更具有灵活性。我们可以直接启动或者禁止,我们可以甚至创建多于一个的 filter 来同时起作用。
通过可视化来创建 filter
我们还是回到先前的 Dashboard:
我们找到一个我们想要分析的可视化图,并点击相应的部分。比如,我们点击上面的 win xp :
我们可以看到它创建了一个叫做 machine.os.keyword: win xp 的 filter,而且所有其它的可视化图中的数据都立即发生改变。在可视化化中通过这样的方法来创建 filter,很方便我们对数据进行分析。特别是在异常分析中非常有用,比如当我们的数据发生异常,在某个时间有特别大的请求,我们可以通过地图显示哪个国家发生在那个时代的请求比较多,进而找出在那个国家发送大量数据请求的服务器 IP 地址。我们可以很方便地使用可视化所创建的 filter 来帮助我们查出问题的根源。
在上面的 Dashboard 中,我们也可以针对地图来进行设置 filter:
我们选择一个四方形来过滤数据:
在上面我画了一个四方形,那么它将自动帮我们创建一个在这个范围里的过滤器,也就是说只有在这个范围里的数据才可以被搜索和展示:
当然,我们可以通过编辑来查看这个过滤器的边界设置:
通过 control 来设置 filter
在上面我们直接通过 Kibana 的 discover 或者 Dashboard 来创建 filter。我们可以通过 control 来设置 filter。在今天的文章中,我就不累述了。有兴趣的读者可以参阅我之前的文章 “Kibana:使用定制 control 可视化简化数据展示”。
总结
filter 在 Kibana 中很方便地为我们提供了一种便捷和灵活的方式来对数据进行搜索。本文介绍了我们常用的几种创建 filter 的方式。希望对大家的使用带来方便。