CloudWatch按日期分组后选取每日首条消息的实现问题问询
实现方案
CloudWatch Logs Insights没有单独的first聚合函数,但可以通过内置的其他聚合函数实现按天取单条消息的需求,不需要额外做去重处理,具体查询语句如下:
方案1:严格取每日第一条消息(按时间戳最早)
fields @timestamp, msg | sort @timestamp asc | stats earliest(msg) as daily_first_msg by datefloor(@timestamp, 1d) as TT
如果需要同时返回该条消息对应的原始时间戳,可以调整为:
fields @timestamp, msg | stats earliest(@timestamp) as first_msg_time, earliest(msg) as daily_first_msg by datefloor(@timestamp, 1d) as TT
方案2:仅需每日任意一条消息(性能更优)
如果你对每日返回的具体消息没有要求,优先用any函数,不需要排序步骤,查询效率更高:
fields @timestamp, msg | stats any(msg) as daily_msg by datefloor(@timestamp, 1d) as TT
函数说明
earliest(字段名):返回分组内时间最早的对应字段值,完全匹配取每日第一条消息的需求any(字段名):返回分组内随机一个对应字段值,计算成本更低,适合只需要按天抽样一条的场景
内容的提问来源于stack exchange,提问作者user2679290
相关产品推荐
相关产品推荐

