如何动态限制时间范围?
How to dynamically limit time range?
我有两个来源类型:
A
定义活动周期:
_time, entity, start_time, end_time, activity, ...
B
定义实体的二维位置:
_time, entity, x, y, ....
现在我试图只提取 B 中所有实体中在 A 中定义的时间段内的那些行,我该怎么做?看来我无法与命令 'join' for time?
进行比较
你说得对,join 在这里帮不上什么忙。我发现在两个索引中匹配信息的 splunk 方法是从两个索引开始并像处理单个索引一样操作异构事件。
在这种情况下,一种方法使用 streamstats 生成非规范化的事件,以在每个位置事件上包含相关的 activity 字段。首先,确保来自索引 A 的每个事件都将 start_time 视为 _time
字段。然后,使用 streamstats
为每个事件填充 null start_time
、end_time
或 activity
字段(应来自索引 B),其中 entity
是非空的(应该来自索引 A)。最后过滤掉任何 _time
> end_time
的事件,这将是任何落在 activity window.
之外的位置事件
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
请记住,此方法假定活动有序排列,因此没有 activity 重叠。如果活动可以重叠,这会有点棘手。
我有时使用的另一种方法是使用transaction而不是streamstats
。这样可以更好地控制一个 activity 何时开始和结束的逻辑,并且每个 activity 产生一个事件,该事件具有多值字段。如果您选择这条路线,您会希望从每个位置的单个 "point" 字段开始。
我有两个来源类型:
A
定义活动周期:
_time, entity, start_time, end_time, activity, ...
B
定义实体的二维位置:
_time, entity, x, y, ....
现在我试图只提取 B 中所有实体中在 A 中定义的时间段内的那些行,我该怎么做?看来我无法与命令 'join' for time?
进行比较你说得对,join 在这里帮不上什么忙。我发现在两个索引中匹配信息的 splunk 方法是从两个索引开始并像处理单个索引一样操作异构事件。
在这种情况下,一种方法使用 streamstats 生成非规范化的事件,以在每个位置事件上包含相关的 activity 字段。首先,确保来自索引 A 的每个事件都将 start_time 视为 _time
字段。然后,使用 streamstats
为每个事件填充 null start_time
、end_time
或 activity
字段(应来自索引 B),其中 entity
是非空的(应该来自索引 A)。最后过滤掉任何 _time
> end_time
的事件,这将是任何落在 activity window.
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
请记住,此方法假定活动有序排列,因此没有 activity 重叠。如果活动可以重叠,这会有点棘手。
我有时使用的另一种方法是使用transaction而不是streamstats
。这样可以更好地控制一个 activity 何时开始和结束的逻辑,并且每个 activity 产生一个事件,该事件具有多值字段。如果您选择这条路线,您会希望从每个位置的单个 "point" 字段开始。