我在 splunk 中有以下情况(见下图)。
我需要在 Splunk 中使用以下模式(见下图)。
我有不同的通用列,其中 column-name(后缀)的最后一部分是动态的和未知的。我需要 combine/merge 这个通用列到一个 target-column。在 target-column 中我想计算每个通用字段的平均值。我认为图片很好地解释了这种情况。
所以有很多方法可以达到你想要的目的......我对你的初始点的搜索感到好奇,因为可能有一些更好的选择,你可以达到你想要的输出没有中间点,我将在这里展示......
首先,我将给你一个基本搜索,我将使用...这将基于你的设置模拟数据集,但没有聚合。
| 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将为我做什么,这将是很方便的。 (对于好奇,相反的方向当然是xyseries)
<base search> | untable _time key value
现在我只需按键执行聚合,在您的平均情况下。而且我希望保留原始数据集中的所有原始行,因此eventstats便于使用
<base search> | untable _time key value | eventstats avg(value) as average by key
我现在有_time,键,值,平均值的输出。接下来要获得单独的后缀列,我可以使用EVAL的语法技巧并为另一个字段的值指定一个名称,并使用领域删除现在超级字段。
<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:*字段中运行 eval 以创建新的平均字段,并删除所有 StaticPart 字段,如下所示:
<base search> | foreach StaticPart:* [eval average=coalesce('<<FIELD>>',average)] | fields - StaticPart:*
1 回答
所以有很多方法可以达到你想要的目的......我对你的初始点的搜索感到好奇,因为可能有一些更好的选择,你可以达到你想要的输出没有中间点,我将在这里展示......
首先,我将给你一个基本搜索,我将使用...这将基于你的设置模拟数据集,但没有聚合。
从这里我只有后缀及其在某些数据点的相应值。要计算每个后缀的聚合,如果我可以将其转换为一个键(使用中的特定后缀)和一个值...这将是untable将为我做什么,这将是很方便的。 (对于好奇,相反的方向当然是xyseries)
现在我只需按键执行聚合,在您的平均情况下。而且我希望保留原始数据集中的所有原始行,因此eventstats便于使用
我现在有_time,键,值,平均值的输出。接下来要获得单独的后缀列,我可以使用EVAL的语法技巧并为另一个字段的值指定一个名称,并使用领域删除现在超级字段。
完成上述实验后,让我们使用上面的一些技巧,进行与上述当前状态相匹配的新基本搜索。
从这一点来看,另一个选择可能是使用foreach在所有 StaticPart:*字段中运行 eval 以创建新的平均字段,并删除所有 StaticPart 字段,如下所示: