跳到主要内容

日志数据清理

在 HAP 私有部署系统中,一些“日志”类数据是长久保留在 MongoDB 中的,对于一些使用场景可能造成这类数据量庞大,占用较多数据库存储空间。

你可以在 MongoDB 中通过 show dbs 命令查看各库大小,再通过统计表大小的命令找到占用存储空间大的表。

我们提供了日志数据清理方案,根据设定的规则,可以将相关表中的数据物理删除。在删除操作完成后,页面上对应时间段的“日志”类数据将不再显示。例如工作流执行记录、审批流记录(审批流也属于工作流的范畴)、工作表行记录日志、集成中心请求日志。

可清理的表白名单:

归属库表名是否可以直接 drop表用途简述
mdworkflowcode_catch代码块运行时产生的缓存数据
mdworkflowhooks_catch触发器临时缓存数据
mdworkflowwebhooks_catchWebhook 运行产生的缓存数据
mdworkflowwf_instance主流程执行历史关联数据
mdworkflowwf_subInstanceActivity子流程执行历史关联数据
mdworkflowwf_subInstanceCallback子流程执行历史关联数据
mdworkflowapp_multiple_catch获取多条数据节点,勾选“直接获取”后存储的数据
mdworkflowcustom_apipackageapi_catch调用API集成接口返回的数据
mdworksheetlogwslog*存储对应月份的工作表行记录日志
表名格式为 wslog+日期(例如 wslog202409)
mdintegrationwf_instance集成中心-请求日志
mdintegrationwf_instance_relation集成中心-请求日志关联数据
mdintegrationwebhooks_catch集成中心-请求日志中“查看详情”对应的数据
mdintegrationcode_catch集成中心-请求日志中“查看详情”对应的数据
mdintegrationjson_catch集成中心-请求日志中“查看详情”对应的数据
mdintegrationcustom_parameter_catch集成中心-请求日志中“查看详情”对应的数据
  • 可直接 drop 的表,建议通过 db.collection.drop() 命令删除,因为 drop 删除后会直接释放对应表所占用的存储空间。

    例如,以下操作会删除 mdworkflow 库下的 code_catch 表:

    use mdworkflow
    db.code_catch.drop()
  • 不可以 drop 的表需参考下方步骤,配置清理任务。

配置数据清理任务

  1. 下载镜像(离线包下载

    docker pull nocoly/hap-archivetools:1.0.3
  2. 创建 config.json 配置文件,示例内容如下:

    [
    {
    "id": "1",
    "text": "描述",
    "start": "2023-05-31 16:00:00",
    "end": "2023-06-30 16:00:00",
    "src": "mongodb://root:password@192.168.1.20:27017/mdworkflow?authSource=admin",
    "archive": "",
    "table": "wf_instance",
    "delete": true,
    "batchSize": 500,
    "retentionDays": 0
    },
    {
    "id": "2",
    "text": "描述",
    "start": "2023-05-31 16:00:00",
    "end": "2023-06-30 16:00:00",
    "src": "mongodb://root:password@192.168.1.30:27017/mdworkflow?authSource=admin",
    "archive": "",
    "table": "wf_subInstanceActivity",
    "delete": true,
    "batchSize": 500,
    "retentionDays": 0
    }
    ]
    • 根据上述配置文件格式,调整或添加配置内容,以清理你所需的数据表

    参数说明:

    "id": "任务标识ID",
    "text": "描述",
    "start": "指定删除的数据起始时间,UTC 时区(retentionDays值大于0则此配置自动失效)",
    "end": "指定删除的数据结束时间,UTC 时区(retentionDays值大于0则此配置自动失效)",
    "src": "来源库连接地址",
    "archive": "目标库连接地址(如果值为空,则不归档只按照设定的规则进行删除)",
    "table": "数据表",
    "delete": "固定为true,在当次归档任务完成后,并且校验记录数量正确时清理来源库已归档数据",
    "batchSize": "单次批量插入以及批量删除条数",
    "retentionDays": "默认值为0。大于0时代表删除多少天前的数据,并开启定时删除任务模式,start与end指定的日期自动失效,默认每24h执行一次"
  3. 启动归档服务,在 config.json 文件所在目录下执行

    docker run -d -it -v $(pwd)/config.json:/usr/local/MDArchiveTools/config.json  -v /usr/share/zoneinfo/Etc/GMT-8:/etc/localtime nocoly/hap-archivetools:1.0.3

    其他事项:

    • 资源占用: 程序运行期间,会对来源库、目标库及程序所在机器产生一定的资源占用压力,建议在业务空闲期间执行。

    • 日志查看:

      • 后台运行(默认): 使用 docker ps -a 找到容器ID,然后执行 docker logs 容器ID 查看日志。

      • 前台运行: 去掉 -d 参数,日志会实时输出到终端,方便观察进度。

    • 定时任务:

      • 设置执行间隔: 可以通过自定义 ENV_ARCHIVE_INTERVAL 变量修改执行间隔,单位毫秒,默认值86400000。
    • 回收磁盘空间:当通过清理工具删除数据后,已删除数据所占用的磁盘空间不会立即释放,但通常会相同表被复用。