在 Splunk 多选中为每个项目设置一个标记

问题描述

我想为表单上多选输入中的每个项目设置一个布尔标记(选中/未选中)。我看到了一种解决方法(奇怪?)缺乏开箱即用的能力来做这样的事情: https://community.splunk.com/t5/Dashboards-Visualizations/Hide-Display-Panels-Using-Multiselect/m-p/336502/highlight/true#M21830

我认为合理的简化是:

<fieldset>
  <input type="multiselect" token="item_selector" searchWhenChanged="true">
    <delimiter>,</delimiter>
    <choice value="item1">item1</choice>
    <choice value="item2">item2</choice>
  </input>
</fieldset>

<search>
  <query>
   eval data="$item_selector$"
   | eval show1=match(data,"item1")
   | eval show2=match(data,"item2")
  </query>
  <done>
    <condition>
      <set token="show1_token">$result.show1$</set>
      <set token="show2_token">$result.show2$</set>
    </condition>
   </done>
 </search>

我认为这行不通,因为:

  <row>
    <panel depends="$my_true$">
      <title>Panel 1</title>
      <html>$show1_token$</html>
      <html>$show1_token$</html>
    </panel>
  </row>

无论在多选中选择了哪些项目,都只会在仪表板上显示以下内容

$show1_token$

$show2_token$

而我会期望“真”或“假”的某种组合(取决于选择的项目)。

他们称之为“虚拟搜索” - 何时执行此搜索

这是为每个项目设置布尔标记的合理方法(如果可以更正)吗?是否有替代方法(除了 javascript,因为我在此仪表板上没有权限)?

解决方法

我对仪表板 XML 进行了一些更改以解决您在“显示”面板中遇到的问题,现在当您更改 multiselect 输入中的选择时,它可以正确显示令牌值。试一试。

<dashboard>
  <label>Multiselect - Token Test</label>
  <fieldset>
    <input type="multiselect" token="item_selector" searchWhenChanged="true">
      <delimiter>,</delimiter>
      <choice value="item1">item1</choice>
      <choice value="item2">item2</choice>
    </input>
  </fieldset>
<search>
  <query>
   | makeresults
   | eval data="$item_selector$"
   | eval show1=toString(match(data,"item1"))
   | eval show2=toString(match(data,"item2"))
  </query>
  <done>
   <condition>
    <set token="show1_token">$result.show1$</set>
    <set token="show2_token">$result.show2$</set>
   </condition>
  </done>
 </search>
<row>
  <panel depends="$item_selector$">
  <title>Panel 1</title>
  <html>$show1_token$</html>
  <html>$show2_token$</html>
  </panel>
 </row>
</dashboard>

一旦用户从 multiselect 下拉列表中选择一个选项,就会执行搜索(虚拟搜索)。

eval 语句中存在问题,因为 - “无法为字段分配布尔结果”。 这就是我将布尔值从 match 函数转换为字符串的原因