Splunk 搜索宏

17 Mar 2025 | 5 分钟阅读

在本节中,我们将学习 Splunk 中的 搜索宏。我们还将学习 如何将宏插入到搜索字符串,在搜索字符串中预览搜索宏,创建搜索宏的步骤,设计搜索宏定义。

搜索宏 是可以重用并插入到其他搜索中的搜索处理语言 (SPL) 代码块。 搜索宏可以是搜索的任何部分,例如求值语句或搜索词,并且不必按完整顺序排列。 此外,我们可以指定宏字段是否接受任何参数。

将宏插入到搜索字符串

当我们将搜索宏放入搜索字符串中时,在宏名称前后放置一个反引号 (')。 在大多数英语键盘上,该字符与波浪号 (~) 位于同一键上。 使用相同的语法,我们可以在其他搜索宏中引用搜索宏。 例如,如果我们有一个名为 mymacro 的搜索宏,当在搜索中引用它时,它看起来如下

sourcetype=access_* | `mymacro`

宏不会在带引号的值内展开。 搜索宏 bar 不会在下面的示例中扩展。

"foo`bar`baz"

在搜索字符串中预览搜索宏

使用搜索页面上搜索栏中的以下键盘快捷键检查搜索宏的内容

  • Control+Shift+E(Mac OSX)
  • Control+Shift+E(Linux 或 Windows)

该快捷方式会打开扩展搜索字符串的预览,其中包含所有嵌套的搜索宏和保存的结果。 如果允许语法标记或行编号,这些功能也会出现在预览中。

我们可以复制要扩展的搜索字符串的部分内容。 现在,要在新窗口中运行扩展的搜索字符串,我们可以单击“在 搜索显示我们的结果 预览中打开”。

包含生成命令的搜索宏

通过在搜索字符串中使用搜索宏,请考虑宏是否扩展为以请求、metadata、inputlookup、pivottstats 顺序开头的 SPL 字符串。 当它这样做时,我们需要在搜索宏前面放置一个管道字符。

例如,如果我们知道搜索宏 mygeneratingmacro 以命令 tstats 开头,我们将如下所示将其插入到我们的搜索字符串中

| `mygeneratingmacro`

搜索宏何时接受参数

如果我们的搜索宏接受参数,则在将它们插入到 Splunk 中的搜索字符串时定义这些参数。 例如,如果搜索宏 argmacro(2) 包含两个整数参数,我们可以如下所示插入该宏: 'argmacro(120,300)' 在我们的搜索字符串中。

如果我们的搜索宏参数中包含引号,请在调用宏时转义搜索中的引号。 例如,如果我们传递一个带引号的字符串作为我们的宏参数,我们将使用: 'mymacro('He said \'hello!\').'

我们的搜索宏定义可以包括以下内容

  • 验证表达式,用于确定我们输入的参数是否有效。
  • 验证错误消息,当我们给出无效参数时会显示。

创建搜索宏的步骤。

  1. 选择 设置 > 高级搜索 > 搜索宏
  2. 单击新建以创建搜索宏。
  3. 检查目标应用程序并验证我们要将搜索宏限制到的应用程序是否已设置为。 如果我们要将搜索宏限制到不同的应用程序,请从“目标应用程序”列表中选择不同的应用程序。
  4. 输入唯一的搜索宏名称。 如果我们的搜索宏中包含参数,请将参数的数量附加到名称。 例如,如果我们的 mymacro quest 有两个参数,则将其命名为 mymacro(2)。
  5. 在“描述”中,请输入宏在特定搜索中引用时扩展到的搜索字符串。
  6. 单击“使用基于评估的定义?”。 表示“描述”值是一个 eval 表达式,它返回一个宏 quest 扩展到的字符串。
  7. 输入任何宏搜索参数。 这是一个以逗号分隔的参数名称字符串。 参数名称只能包含字母数字字符(a-Z、A-Z、0-9)、下划线和破折号。 该字符串不能包含参数名称的重复项。
  8. 输入一个验证表达式,用于验证调用搜索宏时使用的参数值的可接受性。 表达式“validation”是对应于布尔值或字符串值的表达式。
  9. (可选)如果我们定义了验证表达式,请输入验证错误消息。 当验证表达式未能验证调用搜索宏的参数值时,将显示此消息。
  10. 单击“保存”以保存我们的搜索宏。

设计搜索宏定义

搜索宏的基本部分是其含义,即当我们以另一种搜索引用它时宏扩展到的 SPL 代码块。

如果我们的搜索宏定义中存在变量,那么宏用户必须将变量输入到搜索宏的定义中,作为两侧带有美元符号的标记。 例如,$arg1 $可能是搜索宏定义中的第一个参数。

宏定义中的管道字符和生成命令

当我们在 Splunk Web 中使用生成命令,如搜索、inputlookuptstats 时,将它们放在搜索的开头,并带有前导管道字符。

如果我们希望我们的搜索宏使用生成命令,请从宏定义中删除前导管道字符。 将它放在我们将搜索宏插入到的搜索字符串的开头,位于搜索宏引用之前。

例如,我们有一个名为 mygeneratingmacro 的搜索宏,其定义为

tstats latest(_time) as latest where index!=filemon by index host source sourcetype

mygeneratingmacro 的概念以生成命令 tstats 开头。 我们没有在宏描述中用管道字符前导 tstats,而是将管道字符放在搜索字符串中,在搜索宏引用之前。 例如

| `mygeneratingmacro`

验证搜索宏参数。

如果我们创建一个包含要由用户输入的参数的 搜索宏,我们将创建一个 验证表达式,该表达式将确定用户的参数是否正确。 我们可以描述一个验证错误消息,当搜索宏参数的验证失败时会发生该错误消息。

验证表达式必须是评估为布尔值或字符串的表达式。 如果验证表达式是布尔值,则如果验证表达式返回 true,则验证成功。 如果它返回 false 或返回 null,则验证失败。