SEQ查询语法:检测服务停机后30分钟无重启日志的方法
SEQ查询实现服务未重启告警逻辑
要实现你需要的“找出停机后30分钟内未出现对应重启的日志”需求,SEQ的SeqQL不支持exists子句,可通过左连接+空匹配筛选的方式替代,具体查询语句如下:
select $left.* from stream as $left where $left.@Message = 'Environment XYZ has completed shutdown.' left join stream as $right on $right.CorrelationId = $left.CorrelationId and $right.@Message = 'Application Start for Environment XYZ.' and $right.@Timestamp between $left.@Timestamp and $left.@Timestamp + 30m where $right.@Message is null
逻辑说明:
- 先从日志流中筛选出所有服务停机的日志,标记为
$left - 左连接同日志流中的重启日志(标记为
$right),关联规则为:- 两条日志的
CorrelationId一致(确保是同一服务实例的日志) - 重启日志的消息匹配指定内容
- 重启日志的时间在停机日志产生后的30分钟范围内
- 两条日志的
- 最后筛选出没有匹配到对应重启日志的停机记录(
$right.@Message is null即表示无匹配),这类记录就是需要触发告警的目标。
内容的提问来源于stack exchange,提问作者Will Russell
相关产品推荐
相关产品推荐

