Splunk SQL 到 SPL

17 Mar 2025 | 6 分钟阅读

在本节中,我们将向用户介绍 SPL(搜索处理语言)格式和各种 Splunk 搜索命令样式。 我们还打算帮助您确定哪个命令形式更适合您的问题。 它将帮助您了解 SPL 甚至其数据类型和用法。

搜索处理语言 (SPL) 有多种搜索命令可供选择,这有助于用户执行各种不同的工作。 Splunk 平台允许其用户使用广泛的处理语言。 此功能使用户能够减少并将来自数据集的大量数据转换为重要的、可以用于构建报告的小块信息。

SQL 和 Splunk 搜索处理语言 (SPL) 之间并非完全映射,但如果您熟悉 SQL,则此快速比较可能对您入门使用搜索命令有所帮助。

概念

Splunk 平台不会在标准数据库中处理任何数据。 相反,它使用隐式时间维度将数据存储在分布式、非关系、半结构化数据库中。 但是,在数据库领域中,有许多概念的类似物。

从 SQL 到 Splunk SPL

SQL 旨在搜索由列组成的 关系数据库表。 SPL 旨在扫描由字段组成的事件。 您经常在 SQL 中看到使用“mytable”和“mycolumn”的示例。 您将在 SPL 中看到与“字段”相关的示例。 在这些示例中,字段“source”用作“表”代理。“Source”是 Splunk 中特定数据片段来源的文件、流或其他输入的名称。

  • 搜索处理语言中的搜索很难

由于用户界面提供了更方便的过滤方法,因此并不需要 FIELDS 命令来过滤掉 Splunk 中的列。 FIELDS 命令用于 SPL 示例中的并行性。

  • 我们不需要在带有 SPL 的布尔搜索中使用 AND 运算符,因为在各个术语之间隐含了 AND。 但是,当您使用 AND 或 OR 运算符时,必须以大写形式指定它们。
  • 不需要以大写形式定义 SPL 命令。 为了更容易识别和清晰起见,这些 SPL 示例中的命令以大写形式指定。

数据类型

bool

< bool > 参数的值表示布尔数据的形式。 声明了“真”或“假”的文档。 在命令中,接受布尔值的其他组合。 例如,您也可以使用“t”、“T”、“TRUE”或数字 1“1”来表示“true”。 您可以使用“f”、“F”、“FALSE”或数字零“0”来表示“false”。

int

< int > 参数的值表示整数数据的类型。

num

< num > 的参数值表示数据的数字类型。

float

< float > 参数的值表示浮点数据的类型。

通用语法子句

bin-span

语法

说明:设置每个 bin 的大小。

示例:span=2d

示例:span=5m

示例:span=10

by-clause

语法

说明:按...分组的字段。

例如 port, BY addr

搜索处理语言有多种搜索命令可供选择,这有助于用户执行各种不同的工作。 Splunk 平台提供了一种广泛的处理语言,允许用户将来自数据集的大量数据减少并转换为重要的信息片段。

Splunk 搜索管道

Splunk 平台中的“信息管道”是 Splunk 搜索结构,其中包含一组由键盘中存在的管道字符分隔的命令。

该查询由管道到另一个命令的命令组成,这有助于将结果减少和转换为用户需要的内容。

在管道的开头,对 Splunk 的搜索从搜索词开始。 关键字、布尔表达式、短语、键/值对等是搜索词,用于确定我们要从数据库中检索哪个索引的事件。

然后将收集到的事件作为输入传递到查询/搜索命令中,该命令在 Splunk 平台中使用管道字符以进行更好的搜索。 它将被进一步转换为我们需要的结果。 即使我们没有直接声明,也会在搜索管道的开头推断出搜索命令。 因此,如果我们立即键入:host="localhost ",它将完成为 search host=" localhost."。

字段

在 Splunk 平台中,流经搜索管道的结果和事件作为一系列字段存在,这些字段源自平台中存在的数据。 这些字段包含适用于特定数据事件的值字符串,可用于与搜索命令一起过滤数据。 在搜索时,它可以来自索引。 此外,它可以从各种来源收集,例如事件类型、正则表达式提取、标签等。 对于给定的出现,一个字段名称可能存在或不存在,如果存在,它可能包含单个或多个字符串值。

一些重要的字段包括索引、时间、主机、源和原始数据。

一些值得注意的字段是

Null: 在给定结果或事件中不存在的字段。 对于此字段,同一查询中的特定事件或结果可以具有值。

空字段: 空字段是由空值组成的字段。 它被称为空字符串。

空值: 空字符串值,或“。 这也可以表示为零长度的字符串。

多值字段: 具有大于一个值的区域。 所有非空字段都包含一个字符串的有序列表。 典型情况是,这是一个单值列表。 如果列表包含多个条目,则它是一个多值字段。

Splunk 中的引号和转义字符

当需要对整个字符串进行评估时,将使用引号。 Splunk 需要在字段值中包含空格、逗号、管道、引号或括号的引号。 必须区分引号。

Splunk 平台中的转义字符 (\) 用于在搜索字符串时转义评估引号、管道本身。

SPL 组件

在编写搜索处理语言时,搜索中包含一些组件,这些组件用于在 Splunk 平台中格式化或过滤数据。 SPL 中包含的查询具有各种组件的组合。 以下是组件列表。

搜索词

为了过滤掉我们想要的结果,搜索词有一些特定的关键字或句子。 在 Splunk 中,搜索词可以是任何我们感兴趣的东西,例如它们可以是我们要搜索的字段的名称,也许是我们感兴趣的任何索引。

命令

当我们想对结果执行一些操作,例如更改、格式化、重命名、排序等时,我们使用命令。 我们可以使用各种搜索命令,本博客的其余部分将讨论更多内容。

函数

搜索函数与命令一起使用,以确定要在特定字段中执行的计算类型。 通常,函数与统计指令一起使用,例如统计信息。

子句

子句帮助对字段进行分组或重命名,以帮助组织文档中的结果。 一些常见的子句是“BY”子句,它按某个字段对结果进行排序,“AS”子句用于重命名它,而“WHERE”子句用于对结果进行排序或过滤。

过滤结果中用到的一些有用子句包括“AND”和“OR”子句,它们通常用于搜索词,以确定要包含的单词。 如果在搜索开始时未提供任何子句,将自动使用“AND”子句。

参数

Splunk 中的参数是可选参数或必需参数。 允许命令运行所需的参数,并且通常,如果未给出,则在 Splunk 中返回错误。 参数包含字段的名称、含义或布尔含义。 命令参数包含一个默认值,以防未为参数指定任何值。

子搜索

在 Splunk 平台中,当完成搜索,然后查询搜索其搜索,并且在搜索完成后,结果作为参数值发送到父命令时,这种类型的搜索称为子搜索。 它写在方括号中,并且在 Splunk 中运行命令之前先运行。 当我们需要从数据库中过滤出更多数据,或者我们需要组合两个搜索时,使用子搜索。

示例


下一个主题Splunk 搜索优化