如何在搜索中或仪表板中的其他地方转换数组

How do I transform array in search or elsewhere in dashboard

我的搜索工作正常

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

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

要注意的是,我提供的一系列版本(“版本”)的格式略有不同,如下所示:

[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]

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

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

“版本”数组在字段集部分中的填充如下:

<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 的新手,所以我仍在为术语而苦苦挣扎。

试试这个查询。它使用子搜索来构建 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 命令带有 $ returns eval 的结果,但没有字段名称本身。没有它,子搜索将 return releases="2020150015, 2020150016, 2020220019",这是行不通的。