日志数据归档
在 HAP 私有部署系统中,工作流执行数据与工作表日志是长久保留的,对于一些使用场景可能造成这类数据量庞大,占用较多数据库空间。
你可以在 MongoDB 中通过 show dbs
命令查看各库大小,再通过统计表大小的命令找到占用空间大的表。
我们提供了日志数据归档方案,根据设定的规则,可以将相关日志数据归档到一个新的 MongoDB 实例,并删除源数据库中已经归档的数据。在删除操作完成后,页面上对应时间段的工作流执行记录、审批流日志(审批流也属于工作流的范畴)、工作表行记录日志将不再显示。
首先,你需要部署一个新的 MongoDB 实例。我们建议新实例的版本与当前 HAP 所使用的 MongoDB 版本保持一致。单机环境内置的 MongoDB 版本默认为 v3.4.24,我们提供了一个 v3.4.24 版本的 单节点 MongoDB 部署文档 供参考。如果你只需要删除相关数据而不进行归档,则无需准备新的 MongoDB 实例。
在 HAP 私有部署单机环境中,为确保日志归档程序访问 MongoDB,需事先将 MongoDB 端口映射至主机,可参考外部如何访问各存储组件,并注意千万不要将端口暴露在公网之上。
配置步骤:
-
下载镜像(离线包下载)
docker pull nocoly/hap-archivetools:1.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_catch
、hooks_catch
、webhooks_catch
这三张表可以在微服务停止状态直接 drop 删除,drop 方式删除速度很快并且会直接释放对应数据表所占用的磁盘空间 -
如果你需要删除工作表行记录日志,也可以选择到
mdworksheetlog
库下 drop 删除对应月份的 wslog 表,这个表是按照月份命名的,drop 方式删除速度很快并且会直接释放对应数据表所占用的磁盘空间
-
启动归档服务,在
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.2
-
程序运行期间,会对来源库、目标库及程序所在机器产生一定的资源占用压力,建议在业务空闲期间执行。
-
服务启动后,程序执行日志会在容器日志中输出,程序执行完成后容器会退出(定时归档模式下不会退出)。
-
你可以通过
docker ps -a
找到你运行的容器,再通过docker logs 容器ID
观察程序执行日志。 -
容器默认是放在后台运行,如果你想要观察数据表归档、删除进度,可以去掉
docker run
命令中的-d
参数,这样日志会在前台直接输出并可以观察到进度条,但程序执行期间要保证前台不可中断。 -
在
config.json
配置文件示例中,以源库名-archive-日期时间
格式给新库命名。每次执行时,请修改 archive 目标库名。- 因为程序在归档完成后会先统计目标表的数据量,如果不相等则不会进行删除。如果第二次运行时未修改 archive 目标库名,则可能导致目标表中数据总量比本次归档的多,导致源数据未删除。
-
定时归档任务模式下,可以通过自定义
ENV_ARCHIVE_INTERVAL
变量修改执行间隔,单位毫秒,默认值86400000。
-