You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Timestream 单查询检测全设备心跳缺失宕机的实现方法

AWS Timestream 批量检测设备宕机状态实现方案

直接按设备维度聚合+差集匹配即可,不需要硬编码单个设备ID,自动适配设备新增、下线的场景。注意不要直接对检测时间窗口内的数据分组——否则完全没心跳的宕机设备不会出现在分组结果中,会漏判。

可直接复用的查询语句

这个查询会自动返回指定时间窗口内无心跳的所有宕机设备列表:

-- 调整ago()里的参数即可修改检测窗口,比如ago(10m)代表检测最近10分钟的心跳
WITH all_active_devices AS (
    -- 取留存周期内所有上报过的设备,自动去重
    SELECT DISTINCT Thing
    FROM "Uptime"."Uptime"
    WHERE time > ago(7d) -- 和表的7天自动清理策略对齐,无需手动维护下线设备
),
devices_with_recent_heartbeat AS (
    -- 取检测窗口内有正常心跳的设备
    SELECT DISTINCT Thing
    FROM "Uptime"."Uptime"
    WHERE time BETWEEN ago(15m) AND now()
)
-- 左关联匹配,未匹配到最近心跳的即为宕机设备
SELECT a.Thing AS down_device
FROM all_active_devices a
LEFT JOIN devices_with_recent_heartbeat b ON a.Thing = b.Thing
WHERE b.Thing IS NULL

逻辑说明

  • 完全自动适配设备生命周期:新设备首次上报心跳后会自动进入检测列表,设备下线超过7天后会随表数据自动过期从列表移除,不需要手动增删查询规则。
  • 用DISTINCT替代count统计,查询效率更高:只要确认设备在窗口内存在上报记录即可,不需要统计具体心跳条数,适配Timestream的列式查询优化逻辑。
  • 检测窗口建议比心跳上报间隔留冗余:当前心跳间隔为4分钟,建议窗口设置为12~20分钟,避免网络波动、单次上报丢包导致的误判。
  • 如果需要返回所有设备的在线/离线状态,而不是只返回宕机设备,把最后一段查询替换为以下内容即可:
SELECT 
    a.Thing AS device_name,
    CASE WHEN b.Thing IS NOT NULL THEN 'Up' ELSE 'Down' END AS status
FROM all_active_devices a
LEFT JOIN devices_with_recent_heartbeat b ON a.Thing = b.Thing

内容的提问来源于stack exchange,提问作者Eric Snyder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:33:19