将子搜索结果分配给变量



我有一个Splunk仪表板,显示两个站点之间的流量。我需要得到a)每个域的用户数量和b)在面板中使用的总用户数。此时,我有以下简单的XML:

<search id="app_logs">
<query>
index=my_logs
| eval domain1Count = [
search "Middleware" "www.example-domain-1.com"
| stats distinct_count(UserId) as domain1Users
] 
| eval domain2Count = [
search "Middleware 2" "www.example-domain-2.com"
| stats distinct_count(UserId) as domain2Users
] 

| eval totalCount = domain1Count + domain2Count
| table 
domain1Count
domain2Count
totalCount
</query>
<done>
<set token="domain1Count">$result.domain1Count$</set>
<set token="domain2Count">$result.domain2Count$</set>
<set token="totalCount">$result.totalCount$</set>
</done>
</search>

查询无法正常工作。eval语句会生成错误。但是,eval语句右侧的查询可以正常工作。如何将子搜索的单个值分配给变量,以便将这些值用作标记?

我可能会在仪表板上单独搜索,除非迫切需要将所有内容都放在一个中

或者,您可以每次搜索| append,&| stats values在这样的ed:

index=ndx sourcetype=srctp "middleware 1" "domain1.tld" userid=*
| stats dc(userid) as domain1users
| append
[| search index=ndx sourcetype=srctp "middleware 2" "domain2.tld" userid=*
| stats dc(userid) as domain2users ]
| stats values(*) as *

然后在你的<done>...</done>子句中,有多个<set token="...">$results.domain{N}users</set>

子搜索在主搜索中用其结果替换自身。要查看替换是什么,请运行附加了| format的子搜索。如果结果在主搜索的上下文中是有意义的,那么你就可以了;否则,调整子搜索以产生工作结果。在这种情况下,子搜索将生成类似domain2Users=3的内容,这将导致无效的eval domain2Count = domain2Users=3

@沃伦的方法要好得多。

最新更新