跳到主要内容

日志数据归档

在 HAP 私有部署系统中,工作流执行数据与工作表日志是长久保留的,对于一些使用场景可能造成这类数据量庞大,占用较多数据库空间。

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

我们提供了日志数据归档方案,根据设定的规则,可以将相关日志数据归档到一个新的 MongoDB 实例,并删除源数据库中已经归档的数据。在删除操作完成后,页面上对应时间段的工作流执行记录、审批流日志(审批流也属于工作流的范畴)、工作表行记录日志将不再显示。

首先,你需要部署一个新的 MongoDB 实例。我们建议新实例的版本与当前 HAP 所使用的 MongoDB 版本保持一致。单机环境内置的 MongoDB 版本默认为 v3.4.24,我们提供了一个 v3.4.24 版本的 单节点 MongoDB 部署文档 供参考。如果你只需要删除相关数据而不进行归档,则无需准备新的 MongoDB 实例。

在 HAP 私有部署单机环境中,为确保日志归档程序访问 MongoDB,需事先将 MongoDB 端口映射至主机,可参考外部如何访问各存储组件,并注意千万不要将端口暴露在公网之上。

配置步骤:

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

    docker pull registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-archivetools:1.0.0
  2. 创建 config.json 配置文件,示例内容如下:

    [
    {
    "id": "1",
    "text": "工作流执行历史数据归档",
    "start": "2023-01-01",
    "end": "2023-02-01",
    "src": "mongodb://root:password@192.168.1.20:27017/mdworkflow?authSource=admin",
    "archive": "mongodb://root:password@192.168.1.30:27017/mdworkflow-archive-2023271003?authSource=admin",
    "table": "wf_instance",
    "delete": true,
    "batchSize": 500,
    "retentionDays": 0
    },
    {
    "id": "2",
    "text": "工作流执行历史数据归档",
    "start": "2023-01-01",
    "end": "2023-02-01",
    "src": "mongodb://root:password@192.168.1.30:27017/mdworkflow?authSource=admin",
    "archive": "mongodb://root:password@192.168.1.30:27017/mdworkflow-archive-2023271003?authSource=admin",
    "table": "wf_subInstanceActivity",
    "delete": true,
    "batchSize": 500,
    "retentionDays": 0
    },
    {
    "id": "3",
    "text": "工作表行记录日志数据归档",
    "start": "2023-01-01",
    "end": "2023-02-01",
    "src": "mongodb://root:password@192.168.1.20:27017/mdworksheetlog?authSource=admin",
    "archive": "mongodb://root:password@192.168.1.30:27017/mdworksheetlog-archive-2023271003?authSource=admin",
    "table": "wslog*",
    "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执行一次"

    可清理的数据表白名单:

    code_catch
    hooks_catch
    webhooks_catch
    app_multiple_catch
    wf_instance
    wf_subInstanceActivity
    wf_subInstanceCallback
    custom_apipackageapi_catch
    wslog* # * 为通配符,代表所有 wslog 开头的表,对应工作表的行记录日志
    • wslog*mdworksheetlog 库下的数据表,对应工作表的行记录日志

    • 除了 wslog* 表 ,其他都为 mdworkflow 库下的数据表,对应工作流的执行历史数据(包含审批流)

    • mdworkflow 库下的 code_catchhooks_catchwebhooks_catch 这三张表可以在微服务停止状态直接 drop 删除,drop 方式删除速度很快并且会直接释放对应数据表所占用的磁盘空间

    • 如果你需要删除工作表行记录日志,也可以选择到 mdworksheetlog 库下 drop 删除对应月份的 wslog 表,这个表是按照月份命名的,drop 方式删除速度很快并且会直接释放对应数据表所占用的磁盘空间

  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 registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-archivetools:1.0.0
    • 程序运行期间,会对来源库、目标库及程序所在机器产生一定的资源占用压力,建议在业务空闲期间执行。

    • 服务启动后,程序执行日志会在容器日志中输出,程序执行完成后容器会退出(定时归档模式下不会退出)。

    • 你可以通过 docker ps -a 找到你运行的容器,再通过 docker logs 容器ID 观察程序执行日志。

    • 容器默认是放在后台运行,如果你想要观察数据表归档、删除进度,可以去掉 docker run 命令中的 -d 参数,这样日志会在前台直接输出并可以观察到进度条,但程序执行期间要保证前台不可中断。

    • config.json 配置文件示例中,以 源库名-archive-日期时间 格式给新库命名。每次执行时,请修改 archive 目标库名。

      • 因为程序在归档完成后会先统计目标表的数据量,如果不相等则不会进行删除。如果第二次运行时未修改 archive 目标库名,则可能导致目标表中数据总量比本次归档的多,导致源数据未删除。
    • 定时归档任务模式下,可以通过自定义 ENV_ARCHIVE_INTERVAL 变量修改执行间隔,单位毫秒,默认值86400000。