0

我有一个运行良好的搜索

index=event_db environment=prod release = 2020150015 
| timechart count as Events

但是,我想修改它以搜索版本数组中的任何版本。我知道“in”运算符。

问题是我提供的版本数组(“Releases”)的格式略有不同,如下所示:

[ver2020.15.0015, ver2020.15.0016, ver2020.22.0019]  // in general, many more than 3!

有没有办法使用 in 运算符和一些映射来释放

[2020150015, 2020150016, 2020220019] ?

这可以放在搜索中吗?

这是面板的一部分,所以如果它更简单,我可以在其他地方有代码转换[ver2020.15.0015, ver2020.15.0016, ver2020.22.0019][2020150015, 2020150016, 2020220019]

但是,如前所述,我是新手,所以我对在哪里放置代码来转换数组的了解是有限的:)

我有一个字段集部分和一个带有查询的面板。

“Releases”数组在字段集部分填充,如下所示:

<input type="text" token="Releases">
  <label>Release or Releases</label>
  <default>*</default>
</input>

用户输入 ver2020.15.0015 或者可能是 ver2020.15.*。

我不能只让用户输入 2020150015 因为 ver2020.15.0015 格式在其他地方使用。

也许有办法Releases_Alt在得到这个之后立即创建新领域?

让我知道我可以提供的任何其他信息。正如我所说,我是 Splunk 的新手,所以我仍在为术语而苦恼。

4

1 回答 1

1

试试这个查询。它使用子搜索来构建IN参数。Splunk 中的子搜索在主搜索之前运行,并且子搜索的输出替换子搜索本身。

index=event_db environment=prod release IN ( 
    [ | makeresults 
    | eval Releases=replace ($Releases|s$, "[ver\.]+","") 
    | return $Releases ] )
| timechart count as Events

makeresults命令在那里,因为即使子搜索也必须从生成命令开始。 makeresults创建一个允许其他命令工作的“虚拟”事件。

eval命令执行将发布版本转换为所需格式的工作。请注意|s与 Releases 令牌一起使用。此构造确保标记的内容包含在引号中,这是replace函数所期望的。

最后,return带有的命令$返回 的结果eval,但没有字段名本身。没有它,子搜索将返回releases="2020150015, 2020150016, 2020220019",这是行不通的。

于 2021-09-26T21:17:34.597 回答