我正在使用CEP检查事件是否在指定的时间内到达(假设1分钟)。如果没有,我想发布警报。
更具体地说,(服务器)机器生成心跳数据流并将其发送到CEP。 心跳线流包含服务器ID和时间戳。如果在1分钟内没有心跳数据到达,则应生成警报。
是否可以使用CEP做类似的事情?我已经看到了关于检测非事件的其他问题,但我仍然不确定如何处理上述情况。
答案 0 :(得分:1)
你可以试试这个:
define stream heartbeats (serverId string, timestamp long);
from heartbeats#window.time(1 minute) insert expired events into delayedStream;
from every e = heartbeats -> e2 = hearbeats[serverId == e.serverId]
or expired = delayedStream[serverId == e.serverId]
within 1 minute
select e.serverId, e2.serverId as id2, expired.serverId as id3
insert into tmpStream;
// every event on tmpStream with a 'expired' match has timeout
from tmpStream[id3 is not null]
select serverId
insert into expiredHearbeats;