首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Splunk中使用rex标记?

如何在Splunk中使用rex标记?
EN

Stack Overflow用户
提问于 2022-04-05 12:33:58
回答 1查看 552关注 0票数 2

我在仪表板中设置了一个令牌$token_rex$,如下所示:

代码语言:javascript
复制
<set>mvjoin(mvmap('token_keywords_mv',"(?&lt;".'token_keywords_mv'."&gt;".'token_keywords_mv'."+?)"), "|")</set>

token_keyrowrds_mv基本上如下:

代码语言:javascript
复制
lorem
ipsum
situs

得到的令牌如下所示:

代码语言:javascript
复制
(?<lorem>lorem+?)|(?<ipsum>ipsum+?)|(?<situs>situs+?)

我试图运行的查询如下:

代码语言:javascript
复制
index=* | rex field _raw "(?i)".$token_rex$

理想情况下,上面的内容应该呈现如下:

代码语言:javascript
复制
index=* | rex field _raw "(?i)(?<lorem>lorem+?)|(?<ipsum>ipsum+?)|(?<situs>situs+?)"

我尝试过使用令牌过滤器$token_rex|s$$token_rex|n$,但两者都不起作用。我甚至尝试从子搜索中返回值:

代码语言:javascript
复制
index=* | rex field _raw [| makeresults | eval string_rex=$token_rex$ | return $token_rex]

Update:发现令牌是作为rex命令的详细内容给出的。我的令牌设置如下:

代码语言:javascript
复制
<set token="token_rex">mvjoin(mvmap('token_keywords_mv',"(?&gt;".'token_keywords_mv'."&lt;".'token_keywords_mv'."+?)"), "|")</set>

当我将它用作... | rex field=_raw '(?i)$token_rex$'时,它会给出以下错误:

“rex”命令中的

错误:编译regex‘(?i)mvjoin时遇到以下错误(mvmap(’token_关键字_mv‘):Regex:缺少结束括号。

但是,当我直接将它设置为值时,它会工作:

代码语言:javascript
复制
<set token="token_rex">(?&lt;lorem&gt;lorem+?)|(?&lt;ipsum&gt;ipsum+?)|(?&lt;situs&gt;situs+?)</set>

更新:这是一个示例仪表板。

代码语言:javascript
复制
<dashboard theme="dark">
  <init>
    <set token="token_keywords_mv">split("lorem,ipsum,situs", ",")</set>
    <set token="token_keywords_starred">"*".mvjoin($token_keywords_mv$, "* OR *")."*"</set>
    <set token="token_rex">"(?i)".mvjoin(mvmap('token_keywords_mv', "(?&lt;".'token_keywords_mv'."&gt;".'token_keywords_mv'."+?)"), "|")</set>
    <set token="token_raw">(?&lt;lorem&gt;lorem+?)|(?&lt;ipsum&gt;ipsum+?)|(?&lt;situs&gt;situs+?)</set>
  </init>
  <label>Test Search</label>
  <description>Multivalue</description>
  <row>
    <panel>
      <table>
        <search>
          <query>index=* 
    [| makeresults 
    | eval string_search=$token_keywords_starred$ 
    | return $string_search] 
| rex field=_raw $token_raw|s$ 
| stats count(lorem) AS Lorem, count(ipsum) AS Ipsum, count(situs) AS Situs
| eval header="Count" 
| transpose column_name="String" header_field=header</query>
          <earliest>-24h@h</earliest>
          <latest>now</latest>
        </search>
        <option name="drilldown">none</option>
        <option name="refresh.display">progressbar</option>
      </table>
    </panel>
  </row>
  <row>
    <panel>
      <table>
        <title>ECHO</title>
        <search>
          <query>| localop 
| makeresults 
| eval token_keywords_starred=$token_keywords_starred$, token_keywords_mv=$token_keywords_mv$, token_rex=$token_rex$, token_raw=$token_raw|s$</query>
          <earliest>-24h@h</earliest>
          <latest>now</latest>
        </search>
        <option name="drilldown">none</option>
        <option name="refresh.display">progressbar</option>
      </table>
    </panel>
  </row>
</dashboard>

如果任何其他令牌替换了$token_raw|s$,则会出现错误。使用Splunk 8.0.3。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 17:40:11

当我试图用这个仪表板代码再现您的结果时:

代码语言:javascript
复制
<form>
  <label>test</label>
  <fieldset submitButton="false">
    <input type="text" token="token_rex">
      <label>field1</label>
    </input>
  </fieldset>
  <row>
    <panel>
      <event>
        <title>test</title>
        <search>
          <query>| makeresults | eval _raw="lorem ipsum dolor"
| rex "(?i)$token_rex$"
|  table lorem ipsum situs</query>
          <earliest>$earliest$</earliest>
          <latest>$latest$</latest>
        </search>
        <option name="refresh.display">progressbar</option>
      </event>
    </panel>
  </row>
</form>

我得到了这个优化的搜索结果(如“职务检查器”所报告的):

代码语言:javascript
复制
| makeresults | rex field=_raw "(?i)(?<lorem>lorem+?)|(?<ipsum>ipsum+?)|(?<situs>situs+?)"

看来不需要串连。

更新:将所有set标记更改为eval,使用mvzip而不是mvmapset标记不计算,而eval标记计算。

代码语言:javascript
复制
    <eval token="token_keywords_mv">split("lorem,ipsum,situs", ",")</eval>
    <eval token="token_keywords_starred">"*".mvjoin($token_keywords_mv$, "* OR *")."*"</eval>
    <eval token="token_rex">"(&lt;".mvjoin(mvzip('token_keywords_mv','token_keywords_mv',"&gt;"),"+?)|(?&lt;")."+?)"</eval>
    <set token="token_raw">(?&lt;lorem&gt;lorem+?)|(?&lt;ipsum&gt;ipsum+?)|(?&lt;situs&gt;situs+?)</set>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71751863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档