首页 文章

如何在一个 field/column 中 combine/merge 多个泛型 fields/columns,并在 Splunk 中按照通用 field/column 值进行平均计算?

提问于
浏览
0

我在 splunk 中有以下情况(见下图)。

实际情况

我需要在 Splunk 中使用以下模式(见下图)。

目标情况

我有不同的通用列,其中 column-name(后缀)的最后一部分是动态的和未知的。我需要 combine/merge 这个通用列到一个 target-column。在 target-column 中我想计算每个通用字段的平均值。我认为图片很好地解释了这种情况。

1 回答

  • 0

    所以有很多方法可以达到你想要的目的......我对你的初始点的搜索感到好奇,因为可能有一些更好的选择,你可以达到你想要的输出没有中间点,我将在这里展示......

    首先,我将给你一个基本搜索,我将使用...这将基于你的设置模拟数据集,但没有聚合。

    | 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:*
    

相关问题