Splunk搜索优化

17 Mar 2025 | 6 分钟阅读

优化搜索是一种使搜索尽可能有效地运行的策略。在本节中,我们将学习如何在Splunk平台上优化搜索

当未配置搜索时,它也会运行更长时间,从索引中检索比所需更多的数据,并低效地消耗更多内存和网络资源。将这些问题乘以数百或数千次搜索,结果就是缓慢或迟钝。

我们可以遵守一系列基本概念来最大限度地提高我们的搜索效率。

  • 仅检索所需数据
  • 尽可能少地移动数据
  • 尽可能并行化工作
  • 设置适当的时间窗口

我们正在使用以下方法来结合搜索优化概念。

  • 在初始搜索中尽可能多地进行过滤
  • 仅对所需数据执行联接和查找
  • 尽可能在最少数量的事件上执行评估
  • 将那些将数据带到搜索头的命令尽可能晚地放置在我们的搜索条件中。

索引和查找

当运行扫描时,Splunk程序使用索引文件中的信息来对可以从磁盘检索的事件进行分类。从磁盘检索的事件数量越少,搜索速度越快。

我们构建搜索的方式会对从磁盘检索的事件数量产生巨大影响。

当数据被索引时,数据将根据时间转换为事件

处理后的数据由几个文件组成

  • 原始数据以压缩形式(rawdata
  • 指向原始数据的索引(索引文件,也称为tsidx文件
  • 一些元数据文件

这些文件被写入磁盘,并驻留在称为存储桶的年龄组织的目录集中。

有效地使用索引

限制从磁盘提取数据的一种方法是将数据划分为不同的索引。如果我们很少同时扫描多种数据类型,则将各种数据类型划分为单独的索引。将我们的搜索限制到特定的索引。例如,将有关 Web 访问的数据存储在一个索引中,将防火墙数据存储在另一个索引中。对于稀疏数据,建议使用不同的索引,否则可能会丢失在大量不相关的数据中。

优化搜索

我们可以通过将某些组件从第二个搜索移到搜索过程的早期位置来优化整个搜索。

在第一个管道之前移动条件 A=25 可以在早期过滤事件并减少访问索引的次数。提取的事件数量为 300,000。与原始搜索相比,这减少了 700,000。查找在 300,000 个事件上执行,而不是 100 万个事件。

在查找之后立即移动条件 L>100 会进一步过滤事件,从而减少返回的事件数量 100,000。评估在 200,000 个事件上执行,而不是 100 万个事件。

条件 E>50 取决于 eval 命令的结果,并且无法移动。结果与原始搜索相同。返回 50,000 个事件,但对资源的影响要小得多。

优化的快速提示

快速搜索的关键是限制从磁盘中提取的绝对最少数据量。在搜索中,尽可能早地过滤数据,以便在所需的最少数据量上进行处理。

限制磁盘中的数据

限制从磁盘检索的数据量的技术包括设置狭窄的时间范围、尽可能精确以及检索所需的最少事件。

缩小时间窗口

限制时间范围是限制从磁盘获取数据的一种最有效方法。使用拾取器时间范围或在我们的搜索中指定时间调整器,以确定我们的搜索所需的最短时间窗口。

如果我们只需要查看过去一小时的数据,请不要使用“过去 24 小时”的默认时间范围。

如果必须使用广泛的时间范围,例如“上周”或“全部时间”,则使用其他技术来限制从磁盘检索的数据量。

指定索引、源或源类型

为了优化我们的搜索,有必要了解我们的数据是如何构造的。花时间学习哪些索引包含我们的数据、我们的数据源以及源的类型。了解有关此信息的数据,可以让我们缩小搜索范围。

  1. 运行以下搜索。
    搜索=*
    此搜索未进行优化,但它为我们提供了了解我们可以访问的数据的机会。
  2. 在“已选字段”列表中,单击每个字段并查看 host、source 和 sourcetype 的值。
  3. 在“感兴趣的字段”列表中,单击索引。查看我们可以访问的索引的名称。

在我们的搜索中,尽可能定义索引、源或源形式。当 Splunk 程序索引数据时,它将自动将许多字段添加到每个案例中。索引、源和源类型的字段将作为默认字段自动添加到每个事件中。默认字段是 Splunk 程序在我们的情况下搜索时识别的索引字段。host 和 source 以及 source type 字段描述了事件的来源。

编写更好的搜索

本主题考察了一些导致搜索缓慢的原因,并包括帮助我们编写更有效搜索的准则。几个因素,包括:会影响我们的搜索速度

  • 我们正在搜索的数据量
  • 我们的搜索是如何构建的
  • 并发搜索的数量

为了优化我们的搜索运行速度,请尽量减少搜索每个组件所需的处理时间。

了解您的搜索类型

搜索优化指南取决于我们正在运行的搜索类型以及我们正在寻找的数据的特征。搜索分为两类,基于我们希望完成的目标。搜索旨在检索事件,或者搜索旨在生成总结或组织数据的报告。

检索事件的搜索

原始事件搜索从 Splunk 数据库中检索事件,而无需进一步处理检索到的事件。当从索引中获取事件时,请清楚地了解我们想要想象的事件。这可以通过对事件唯一的关键字和字段值对来完成。

如果我们要检索的数据集中发生的事件很频繁,则该搜索称为密集搜索。如果我们要检索的数据集中的事件很少见,则该搜索称为稀疏搜索。针对大量数据运行的稀疏搜索比针对相同数据集的密集搜索需要更长的时间。

生成报告的搜索

生成报告的搜索或转换搜索在从索引中检索事件后,对事件进行额外的分析。此处理可以包括使用一个或多个统计函数对结果集进行过滤、转换和其他操作。由于此处理是在内存中进行的,因此我们检索事件的限制性和精确性越高,搜索的运行速度就越快。

调整搜索的提示

在大多数情况下,由于我们的查询的复杂性,我们的搜索需要很长时间才能从索引中检索事件。例如,如果我们的搜索包含非常大的 OR 列表、复杂的子搜索(分解为 OR 列表)和短语搜索类型,则处理时间会更长。本节探讨了微调我们的搜索以使其更成功的技巧。

使用 BY 子句对具有高基数、许多不常见或特殊值的一组字段值进行统计时,需要大量内存。一种潜在的解决方案是降低与命令 tstats 一起使用的块大小设置的值。此外,减少 BY 子句必须处理的不同值的数量也可能是有益的。

将搜索限制到特定的索引

如果我们很少同时搜索多个数据类型,请将不同的数据类型划分为单独的索引。然后将我们的搜索限制到相同的索引 - 例如,将 Web 访问数据存储在一个索引中,将另一个防火墙数据存储在另一个索引中。建议将此用于稀疏数据,否则可能会埋在一大堆不相关的数据中。


下一主题Splunk转换命令