健康监测

更新时间:2023-12-19 08:36:58下载pdf

健康监测主要用于监测设备的运行是否异常,定时监控设备的健康状况。当某项功能出现异常时,框架会通知应用。此时,应用采取预定的措施,这些措施可以是以告警的形式来人工干预或者是设备自动修复(如复位)等,使设备始终处于健康状态,从而提高设备的控制体验。

功能描述

健康监测指标类型

  • 查询型

    该类指标主要用于定时查询一些重要信息,例如内存和队列深度等。

  • 事件型

    该类指标主要监控是否触发了特别的状态,例如 HTTP 接口调用错误等。

    为了统一,事件型的监测会利用框架的 事件服务 订阅一个公共的事件 ID,在触发异常的地方发布该事件,入参为监测指标索引。

    #define EVENT_HEALTH_ALERT      "health.alert"      //健康监测公共事件 ID
    

系统健康监测指标

框架内嵌了一些系统健康监测指标,用来监测框架是否正常运行。即只要调用健康监测初始化接口,这些指标会自动被添加至监测列表中。

宏定义 监测指标 类型 异常次数
(门限)
监测周期 s 异常 异常处理
HEALTH_RULE_FREE_MEM_SIZE 剩余内存 查询型 1 600 内存小于 8K 设备重启
HEALTH_RULE_MAX_MEM_SIZE 一次性能申请的最大内存 查询型 1 600 / /
HEALTH_RULE_ATOP_REFUSE 访问云端接口被拒绝 事件型 5 / / /
HEALTH_RULE_ATOP_SIGN_FAILED 访问云端接口 sign 错误 事件型 5 / / /
HEALTH_RULE_WORKQ_DEPTH 队列深度 查询型 1 600 队列深度超过 50 打印系统队列信息,帮助用户进行诊断
HEALTH_RULE_MSGQ_NUM 消息队列数量 查询型 1 600 队列深度超过 50 打印消息队列信息,帮助用户进行诊断
HEALTH_RULE_TIMER_NUM 软件定时器数量 查询型 1 600 数量超过 100 /
HEALTH_RULE_FEED_WATCH_DOG 喂狗 查询型 0 20 / /
HEALTH_RULE_RUNTIME_REPT 向云端上报设备实时状态
时间戳,夏令时,剩余内存,信号强度
查询型 0 3600 / /

工作原理

查询型

Y
N
Y
N
Y
N
开始
达到监测周期
调用查询回调
等待下一个监测周期
指标异常
异常次数超过门限值
清空异常累计次数
调用通知回调
累计异常次数

事件型

健康监测事件服务其他服务订阅健康监测公共事件EVENT_HEALTH_ALERT发生异常发布事件推送事件获取入参传入的监控指标索引判断该指标发生异常次数是否超过门限并作出相应处理健康监测事件服务其他服务

开发指导

使用方法

  • 框架在 系统服务初始化 时会调用健康监测的初始化接口。系统健康指标的查询回调以及通知回调,内部会自行注册和处理,无需您做其他处理。也就是说,您只需要调用 系统服务初始化 接口。

  • 如果您想要增加自定义的指标,可调用相应接口,实现增加、删除和更新指标。

API 说明

初始化健康监测服务

创建健康监测任务线程,注册系统健康指标。该接口会在 系统服务初始化 中被调用。

/**
 * @brief devos health init function
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
INT_T tuya_devos_health_init_and_start();

增加自定义指标

typedef VOID (*health_notify_cb)();
typedef BOOL_T(*health_query_cb)();

/**
 * @brief add health item
 *
 * @param[in] threshold: the threshold
 * @param[in] period: the period
 * @param[in] query: query cb
 * @param[in] notify: notify cb
 *
 * @return type id, success when large than 0,others failed
 */
INT_T tuya_devos_add_health_item(UINT_T threshold,UINT_T period,health_query_cb query,health_notify_cb notify);

删除指标

/**
 * @brief delete health item
 *
 * @param[in] type: the type
 *
 */
VOID tuya_devos_delete_health_item(INT_T type);

更新指标的监测周期

/**
 * @brief update health item period
 *
 * @param[in] type: the type
 * @param[in] period: the period
 *
 */
VOID tuya_devos_update_health_item_period(INT_T type,UINT_T period);

更新指标的异常次数门限

/**
 * @brief update health item threshold
 *
 * @param[in] type: the type
 * @param[in] threshold: the threshold
 *
 */
VOID tuya_devos_update_health_item_threshold(INT_T type,UINT_T threshold);

参考示例

添加自定义健康指标的示例代码,可参考框架内自带的 TuyaOS 示例集合 中的 service_health_manager

常见问题

健康监测的优先级是多少?

健康监测的优先级是最高的,即 THREAD_PRIO_0

健康监测除了异常监测,还做了哪些事情?

目前,在健康监测的任务里还添加了定时喂狗、定时上报运行时的日志序。