如何在一个 field/column 中 combine/merge 多个通用 fields/columns 并在 Splunk 中对每个通用 field/column 值进行平均计算?
how to combine/merge multiple generic fields/columns in one field/column with average calculation per generic field/column values in Splunk?
我在splunk中有以下情况(见下图)。
我需要 Splunk 中的以下模式(见下图)。
我有不同的通用列,其中列名的最后部分(后缀)是动态的和未知的。我需要 combine/merge 这个通用列到一个目标列。在目标列中,我想计算每个通用字段的平均值。我觉得这张图很好的说明了情况。
所以有很多方法可以达到您想要的点...我对让您到达初始点的搜索有点好奇,因为可能有一些更好的选择,您可以在没有中间点的情况下达到您想要的输出,正如我将在此处演示的那样...
首先,我将为您提供一个基本搜索,我将使用它...这会根据您的数据设置一个模拟数据集,但没有聚合。
| makeresults
| eval raw=split("10.10.2016 05:55 SuffixA=17
10.10.2016 05:57 SuffixA=15
10.10.2016 05:55 SuffixB=16
10.10.2016 05:59 SuffixB=12
10.10.2016 06:01 SuffixB=11
10.10.2016 06:03 SuffixC=9
10.10.2016 06:05 SuffixC=18
10.10.2016 06:09 SuffixC=21","
")
| mvexpand raw | rename raw -> _raw
| rex "^(?<_time>\S+\s+\S+)" | eval _time=strptime(_time,"%m.%d.%Y %H:%M")
| kv | table _time Suffix*
从这里我只有后缀和它们在某些数据点的相应值。要计算每个后缀的聚合,如果我可以将其转换为一个键(作为正在使用的特定后缀)和一个值,那将很方便......这就是 untable would do for me. ( For the curious, the opposite direction is of course xyseries )
<base search> | untable _time key value
现在我只需要按键执行聚合,在你的例子中是平均值。我想保留原始数据集中的所有原始行,所以这就是 eventstats 方便的地方
<base search> | untable _time key value
| eventstats avg(value) as average by key
我现在有 _time、key、value、average 的输出。接下来要取回单独的后缀列,我可以使用语法技巧 eval and assign a field named for the value of another field, and use fields 来删除现在多余的字段。
<base search> | untable _time key value
| eventstats avg(value) as average by key
| eval {key}=value | fields - key value
在上面的实验之后,让我们使用上面的一些技巧,进行一个新的碱基搜索来匹配你上面的当前状态。
| makeresults | eval raw=split("10.10.2016 05:55 SuffixA=17
10.10.2016 05:57 SuffixA=15
10.10.2016 05:55 SuffixB=16
10.10.2016 05:59 SuffixB=12
10.10.2016 06:01 SuffixB=11
10.10.2016 06:03 SuffixC=9
10.10.2016 06:05 SuffixC=18
10.10.2016 06:09 SuffixC=21","
") | mvexpand raw | rename raw -> _raw
| rex "^(?<_time>\S+\s+\S+)" | eval _time=strptime(_time,"%m.%d.%Y %H:%M")
| kv | table _time Suffix* | untable _time key value
| eventstats avg(value) as average by key
| eval {key}=value, StaticPart:{key}=average | fields - key value average
| table _time StaticPart:* Suffix*
从这一点来看,另一种选择可能是使用 foreach 到 运行 对所有 StaticPart:* 字段进行评估以创建新的平均字段,并删除所有 StaticPart 字段像这样:
<base search>
| foreach StaticPart:* [eval average=coalesce('<<FIELD>>',average)]
| fields - StaticPart:*
我在splunk中有以下情况(见下图)。
我需要 Splunk 中的以下模式(见下图)。
我有不同的通用列,其中列名的最后部分(后缀)是动态的和未知的。我需要 combine/merge 这个通用列到一个目标列。在目标列中,我想计算每个通用字段的平均值。我觉得这张图很好的说明了情况。
所以有很多方法可以达到您想要的点...我对让您到达初始点的搜索有点好奇,因为可能有一些更好的选择,您可以在没有中间点的情况下达到您想要的输出,正如我将在此处演示的那样...
首先,我将为您提供一个基本搜索,我将使用它...这会根据您的数据设置一个模拟数据集,但没有聚合。
| makeresults
| eval raw=split("10.10.2016 05:55 SuffixA=17
10.10.2016 05:57 SuffixA=15
10.10.2016 05:55 SuffixB=16
10.10.2016 05:59 SuffixB=12
10.10.2016 06:01 SuffixB=11
10.10.2016 06:03 SuffixC=9
10.10.2016 06:05 SuffixC=18
10.10.2016 06:09 SuffixC=21","
")
| mvexpand raw | rename raw -> _raw
| rex "^(?<_time>\S+\s+\S+)" | eval _time=strptime(_time,"%m.%d.%Y %H:%M")
| kv | table _time Suffix*
从这里我只有后缀和它们在某些数据点的相应值。要计算每个后缀的聚合,如果我可以将其转换为一个键(作为正在使用的特定后缀)和一个值,那将很方便......这就是 untable would do for me. ( For the curious, the opposite direction is of course xyseries )
<base search> | untable _time key value
现在我只需要按键执行聚合,在你的例子中是平均值。我想保留原始数据集中的所有原始行,所以这就是 eventstats 方便的地方
<base search> | untable _time key value
| eventstats avg(value) as average by key
我现在有 _time、key、value、average 的输出。接下来要取回单独的后缀列,我可以使用语法技巧 eval and assign a field named for the value of another field, and use fields 来删除现在多余的字段。
<base search> | untable _time key value
| eventstats avg(value) as average by key
| eval {key}=value | fields - key value
在上面的实验之后,让我们使用上面的一些技巧,进行一个新的碱基搜索来匹配你上面的当前状态。
| makeresults | eval raw=split("10.10.2016 05:55 SuffixA=17
10.10.2016 05:57 SuffixA=15
10.10.2016 05:55 SuffixB=16
10.10.2016 05:59 SuffixB=12
10.10.2016 06:01 SuffixB=11
10.10.2016 06:03 SuffixC=9
10.10.2016 06:05 SuffixC=18
10.10.2016 06:09 SuffixC=21","
") | mvexpand raw | rename raw -> _raw
| rex "^(?<_time>\S+\s+\S+)" | eval _time=strptime(_time,"%m.%d.%Y %H:%M")
| kv | table _time Suffix* | untable _time key value
| eventstats avg(value) as average by key
| eval {key}=value, StaticPart:{key}=average | fields - key value average
| table _time StaticPart:* Suffix*
从这一点来看,另一种选择可能是使用 foreach 到 运行 对所有 StaticPart:* 字段进行评估以创建新的平均字段,并删除所有 StaticPart 字段像这样:
<base search>
| foreach StaticPart:* [eval average=coalesce('<<FIELD>>',average)]
| fields - StaticPart:*