2026/9/13 14:13:36

TDengine 流式计算可观测性实战:用系统视图监控延迟、吞吐与重算进度

TDengine 流式计算可观测性实战:用系统视图监控延迟、吞吐与重算进度 TDengine 流式计算可观测性实战用系统视图监控延迟、吞吐与重算进度【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengineTDengine 的流式计算通过information_schema下的三个系统视图暴露运行状态流级视图ins_streams、任务级视图ins_stream_tasks、重算作业视图ins_stream_recalculates。本文围绕这三张视图讲解如何查看流的实时处理延迟、输入输出吞吐、历史计算进度和手动重算状态并给出可复制的诊断查询与一套标准的故障排查顺序。读完本篇你可以独立完成“发现异常 → 定位任务节点 → 跟踪重算作业”的完整流式计算诊断流程。诊断路径先流级发现异常再任务级定位最后查重算TDengine 的流式计算可观测性遵循自上而下的三层结构流级information_schema.ins_streams每个流一行用于发现状态异常、延迟增长、吞吐下跌等宏观问题任务级information_schema.ins_stream_tasks每个任务Reader / Trigger / Runner一行用于定位具体出问题的节点或任务类型重算级information_schema.ins_stream_recalculates每个手动重算作业一行用于跟踪重算请求的范围、进度与状态。建议先在流级视图中发现异常再进入任务级视图定位节点或任务最后按需查看重算作业避免一开始就在海量任务行中盲目检索。查看流的总体状态下面的查询同时显示流状态、错误信息和主要运行指标SELECT stream_name, status, message, realtime_lag_ms, input_rows_per_sec_1m, output_rows_per_sec_1m, runner_result_latency_avg_1m_ms, history_progress_pct FROM information_schema.ins_streams ORDER BY stream_name;核心指标的含义与单位如下指标单位含义realtime_lag_ms毫秒最慢有效入口 Reader 的实时处理延迟input_rows_per_sec_1m行/秒最近一个完整 60 秒窗口内Trigger 接纳的逻辑输入速率output_rows_per_sec_1m行/秒最近一个完整 60 秒窗口内所有最终结果 Runner 成功交付的结果速率runner_result_latency_avg_1m_ms毫秒最近一个完整 60 秒窗口内从 Runner 开始处理计算请求到形成逻辑结果的加权平均时间history_progress_pct百分比建流时历史数据计算的完成进度取值为 0 到 100如何正确理解realtime_lag_ms该字段取所有有效入口 Reader 中最慢的进度任何一个 Reader 掉队都会体现在这里已经追平但暂时没有新数据的 Reader 不会使该值持续增长因此“值不变”不代表“卡住”需要结合status判断引用外部数据源的流没有 WAL 实时进度该字段为NULL这是正常行为而非故障。输入速率与输出速率不是同一层数据输入速率统计的是过滤和路由后由流实际接纳的逻辑行Trigger 视角输出速率只统计成功交付的最终结果行Runner 视角。二者处于流执行图的不同位置不能用二者直接推导丢失率。窗口聚合、过滤条件、以及一个输入产生多个结果等情况都可能使两者数值不同。同理runner_result_latency_avg_1m_ms只覆盖 Runner 内部“从开始处理计算请求到形成逻辑结果”的时间不包含请求进入 Runner 前的排队和网络时间也不包含结果形成后的写入或通知时间。下钻到任务级视图当流状态异常、流级指标为NULL或需要定位具体节点时查询任务视图SELECT stream_name, task_id, type, deploy_id, node_type, node_id, status, last_update, message, input_rows_per_sec_1m, output_rows_per_sec_1m, runner_result_latency_avg_1m_ms FROM information_schema.ins_stream_tasks WHERE stream_name your_stream_name ORDER BY type, deploy_id, task_id;任务级指标按职责提供这是理解该视图的关键入口Reader提供物理输入速率即 Reader 实际读取和处理的输入行数负责最终结果交付的Runner提供输出速率和结果形成延迟Trigger、计算数据 Reader 和非最终结果 Runner 的上述列为NULL因为它们不承担该职责不要把这些NULL误判为故障。此外任务视图比流级视图多一个last_update列用status查看任务是否正常用last_update判断状态和指标是否仍然新鲜。流级视图没有last_update列因此判断数据新鲜度必须下钻到任务级。源码视角三个视图的字段定义从源码结构看三个视图的列定义集中在系统表 schema 中。systable.c 定义了streamSchema、streamTaskSchema和streamRecalculateSchema可以据此核对字段类型与长度streamSchemaL192-L208除文档中使用的 8 个指标列外还包含db_name、create_time、stream_id、sql、snodeLeader、snodeReplica、external_sources等列可用于查看流的部署副本和关联的外部数据源数量streamTaskSchemaL210-L228包含task_id、type、deploy_id、node_type、node_id、task_idx、start_time、last_update等其中速率与延迟列与流级视图同名便于两层对照streamRecalculateSchemaL230-L240start/end为 TIMESTAMP 类型对应重算时间范围progress为 VARCHAR 类型如百分比字符串status与message长度分别为 16 和 256 字节。三个系统视图的完整字段定义可参见 系统信息文档中的ins_streams一节。查看历史计算进度使用STREAM_OPTIONS(FILL_HISTORY)或STREAM_OPTIONS(FILL_HISTORY_FIRST)创建流后ins_streams.history_progress_pct显示初始历史范围的计算进度0到99历史计算尚未完成100历史计算已经完成NULL未启用历史计算或当前没有有效进度信息。需要注意该百分比表示已完成的原始历史时间范围覆盖率不表示已经输出的结果行比例。窗口聚合、过滤等因素都会使输出行数与输入时间范围不成线性关系因此不能用它反推结果表的数据量。查看手动重算下面的查询显示每个手动重算作业的范围、进度和状态SELECT stream_name, recalc_id, start, end, progress, status, request_time, message FROM information_schema.ins_stream_recalculates WHERE stream_name your_stream_name ORDER BY start, recalc_id;状态含义Pending请求已接受重算尚未开始Running重算已经开始但尚未完成Finished重算已经完成进度为100%Failed发生不可恢复错误重算无法完成滚动升级期间如果旧版本任务只能提供重算进度status可能为NULL但progress仍可用。跟踪重算请求时有几个关键约定SQL 成功返回仅表示重算请求已被接受不表示重算已经完成重算在后台执行如果服务或流任务重启、重新部署时请求尚未达到终态未完成的请求会被恢复并继续执行临时执行失败会自动重试请使用recalc_id跟踪同一个请求处于Pending或Running时不要重复提交相同请求request_time是 mnode 接受请求的时间message在可用时包含重算状态或错误信息。记录保留策略方面已结束的重算记录从 mnode 首次观察到终态开始保留 1 小时每个流最多保留 100 条Pending和Running记录不受该数量上限影响。这些记录只保存在内存中进程重启后可能消失。上述保留策略只适用于已结束的记录与未完成请求的持久化恢复机制相互独立。关于重算的语义细节如计数窗口触发的手动重算必须同时指定起止时间、结果表可能产生重复结果需先删除等可参见 流式计算指令说明。理解 NULL 和零值一分钟指标统计最近 60 个已经结束的完整秒不包含当前秒。任务启动、重启或重新部署后需要形成首个完整窗口在此之前相应指标为NULL。常见取值规则完整窗口内没有输入或输出时对应速率为0Runner 在完整窗口内没有形成结果样本时结果延迟为NULL流级输出速率要求所有最终结果 Runner 都具有有效的完整窗口任一相关 Runner 尚未就绪时该字段为NULL流级结果延迟还要求至少有一个结果样本否则为NULL指标不适用于当前任务类型时为NULL见任务级指标按职责分布的说明某个字段为NULL不会使其他无关字段失效例如没有结果延迟样本时输入速率仍可正常显示心跳短暂中断时管理节点可能保留最后一次成功的指标快照应结合任务的status和last_update判断其是否新鲜滚动升级期间尚未升级的任务无法提供新增指标对应列可能暂时为NULL。常见诊断顺序查询ins_streams的status和message先确认流是否处于正常状态查看realtime_lag_ms是否持续增长。如果流使用外部数据源该字段为NULL是正常行为查看输入、输出和结果延迟。输入不为零但输出为零不一定是故障窗口尚未关闭或过滤后没有结果时也会出现这种情况查询ins_stream_tasks结合status、last_update、node_id和任务级指标定位异常任务对历史计算或手动重算问题分别查看history_progress_pct和ins_stream_recalculates。小结TDengine 的流式计算可观测性以“流 → 任务 → 重算”三层视图为核心流级视图快速发现延迟、吞吐和状态异常任务级视图借助type、node_id和last_update精确定位重算视图用recalc_id跟踪异步作业的完整生命周期。配合本文给出的查询语句与NULL/零值判读规则可以在不读取日志的情况下完成大多数流式计算的健康检查与故障定位视图字段的具体实现可对照 systable.c 中的 schema 定义进一步核实。【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考