我有两种来源类型:
A
定义了活动时间段:
_time,entity,start_time,end_time,activity,...
B
定义实体的2D位置:
_time,entity,x,y,....
现在我试图只提取B中所有在A中定义的时段内的实体的那些行,我该怎么做?我似乎无法与'join'命令进行比较?
答案 0 :(得分:0)
你是对的,join在这里没有多大帮助。我发现在两个索引中匹配信息的splunk方法是从两个索引开始并操纵异构事件,就好像它们是单个索引一样。
在这种情况下,一种方法使用streamstats来生成非规范化的事件,以包括每个位置事件的相关活动字段。首先,确保索引A中的每个事件都将start_time视为_time
字段。然后,使用streamstats
使用start_time
,end_time
或activity
字段(应该来自索引B)填充每个事件,并使用{{1}的最新值1}}非null(应该来自索引A)。最后过滤掉entity
>中的所有事件_time
,这是任何位于活动窗口之外的位置事件。
end_time
请记住,此方法假定活动整齐有序,因此任何活动都不会与其他活动重叠。如果活动可以重叠,这将会有点棘手。
我有时使用的另一种方法是使用transaction代替index=A OR index=B
| eval _time=coalesce(start_time, _time)
| streamstats latest(start_time) as activity_start_time, latest(end_time) as activity_end_time, latest(activity) as activity by entity
| where _time<=end_time
。这样可以更好地控制一个活动开始和结束时的逻辑,并为每个活动生成一个具有多值字段的事件。你想要从一个单一的点开始#34;如果你采取这条路线,每个位置的字段。