用途与实际影响
这项功能怎样使用
为什么需要它
采集程序可能真的退出,也可能还挂在任务列表里却不写数据。只看进程在不在,会留下看不见的记录空档;恢复还得避免同时启动两份。
举个实际例子
大盘突然停住,但任务列表里的采集进程还在。系统会看最后一次真正写入是什么时候;确认主采集已经“人还在、活不干了”后,只重启这一条,其他仍在正常记录的组件不跟着折腾。
最后我会得到什么
看到哪一条记录链还在写、哪一条停住、系统是否已尝试恢复,以及失败时还缺什么。重新启动后缺失的历史仍是缺口,不会被填成正常。
正常时
对应程序真正持续写入,而且它依赖的保存服务也可用时,才说这条链活着。
发现问题时
程序退出或假活时只恢复确认故障的部分,保留失败原因。
入口不可用或证据不足时
自动任务或保存服务读不到时只说对应层未知,不拿其他组件仍在运行代替。
从哪里开始
TimeAudit 大盘停止更新时,在已接入本机诊断的 AI 对话中说明最后正常时间;现有看门狗负责精确组件恢复。
需要准备什么
- 停更时间
- 受影响的是采集、入库还是大盘
从开始到拿到结果
- 1
先查最后真实写入
不要只看任务管理器里的进程,核对心跳和数据新鲜度。
- 2
定位失效组件
看门狗区分启动、睡眠宽限和真停写,只恢复确认异常的一条链。
- 3
验证恢复
回读新心跳与入库;恢复后的在线状态不填补过去空档,也不证明历史值都正确。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
8月31日容器/LHM/全链测试与9月8日受管换代180个GPU有效样本保留原日期;2026-09-14只读摘要新鲜,本轮未换代或注入故障关键规则与设计选择
健康由成功推进证明,不由进程名决定。
恢复串行,睡眠后先宽限。
只恢复精确组件,不结束未知同名进程。
前台采集必须在交互会话运行。
本模块用到的名词
- native crash(原生崩溃)
- C 扩展访问冲突直接终止进程,Python 异常捕获无效。
- false alive(假活)
- 进程仍在但采集/入库停止。
- bounded backoff(有界退避)
- 连续失败延长重试并设上限。
专业定义
用单例、无 payload heartbeat、外部 Watchdog、退避、睡眠宽限和精确身份,把 native 崩溃、假活、探针掉线与数据库重连限制在受影响组件。
解决什么
解决 native 崩溃、假活、多实例日志锁、计划任务 PATH、探针重启循环和恢复竞争。
当前怎样实现
- Python 主调度程序提供单例与外层异常恢复。
- runtime_health.py 原子写 heartbeat,并提供路径识别与有界退避辅助。
- telemetry_watchdog.ps1 每分钟串行检查 main.py、LHM 18085、AHK 与 audit-ingester;全局 mutex(互斥锁)阻止恢复重叠。
- LHM 独立任务拥有运行实例;hardware worker 只读,Watchdog 经 15 秒宽限、20 秒启动等待和精确项目路径过滤恢复端点。
- start_all.bat 固定 CRLF、绝对 Python 3.11 和 WorkingDirectory。
- 历史摘要只做有界聚合:语句8秒、锁1秒并限客户端输出,拒绝畸形/非有限/意外字段。异常v2依≤2.5秒连续观测与实际持续时间,31秒lookbehind衔接游标;PCConfig在重查下游前持久pending_projection_refresh,失败后即使无新数据也续做,不因游标推进丢掉未完动作。
- GUI状态、AI健康与看门狗消费同一个timeaudit_health.py;core-only排除备份/blackbox/上一守护结果,避免递归。exit2可以是有效degraded/unavailable,心跳、实际持久写入和最后守护结果独立;可选两秒overhead只看精确主采集链子进程,不含独立传感器、Docker与原生记录,RSS相加不是独占内存。
执行流程
- 1
交互用户会话提权启动。
- 2
成功循环/事务写 heartbeat。
- 3
Watchdog 检查身份、心跳、端点、数据库依赖和启动/睡眠宽限。
- 4
异常只恢复目标;互斥、任务 IgnoreNew、探测超时、宽限和执行上限共同约束恢复。
- 5
以新 heartbeat 验证恢复。
边界
- Watchdog 只恢复 TimeAudit 精确组件。
- heartbeat 不含采样值、窗口、进程或凭据。
- 在线不证明数据正确或历史无空档。
失败与恢复
- native 崩溃或假活
- 陈旧 heartbeat 触发精确重启。
- LHM 持续故障
- worker 保持只读并留空;Watchdog 在端点宽限后只结束项目路径的有线程实例,再调用独立 LHM 任务并限时等待 18085。
- 计划任务环境不全
- 使用绝对解释器、工作目录与 PATH bootstrap。
真实入口
E:\Projects\Tools\TimeAudit\main.py主循环、重连与心跳
E:\Projects\Tools\TimeAudit\runtime_health.py心跳与退避
E:\Projects\Tools\TimeAudit\telemetry_watchdog.ps1外部恢复
E:\Projects\Tools\TimeAudit\start_all.bat启动顺序与绝对路径
E:\Projects\Tools\TimeAudit\test_runtime_hardening.py运行回归
E:\Projects\Tools\TimeAudit\test_ingest_resilience.py入库恢复回归
如何验证
- 8月31日基线:三条heartbeat新鲜、3容器运行、ingester healthy、LHM18085返回HTTP200、Watchdog结果0。
- 8月31日运行/入库回归纳入001cee0的182项+11子测试,LHM/Watchdog定向10/10;本批e5459ce另验证39项相关回归。
- 8月31日的hardware_worker字节/进程时序与LHM单一活实例是历史证明;9月8日e5459ce换代后的worker61904与新样本窗口另列,两个运行时代不能混用。
- 8月31日21/21只读健康没有做故障注入;本批已真实停止旧采集worker并通过既有Watchdog恢复,但未阻断LHM18085、断库或模拟睡眠,其他恢复E2E(端到端验证)仍缺。
与其他模块的关系
监管采集和探针持续性;备份模块处理持久恢复。
