日志数据清理
在 HAP 私有部署系统中,一些“日志”类数据是长久保留在 MongoDB 中的,对于一些使用场景可能造成这类数据量庞大,占用较多数据库存储空间。
你可以在 MongoDB 中通过 show dbs
命令查看各库大小,再通过统计表大小的命令找到占用存储空间大的表。
我们提供了日志数据清理方案,根据设定的规则,可以将相关表中的数据物理删除。在删除操作完成后,页面上对应时间段的“日志”类数据将不再显示。例如工作流执行记录、审批流记录(审批流也属于工作流的范畴)、工作表行记录日志、集成中心请求日志。
可清理的表白名单:
归属库 | 表名 | 是否可以直接 drop | 表用途简述 |
---|---|---|---|
mdworkflow | code_catch | 是 | 代码块运行时产生的缓存数据 |
mdworkflow | hooks_catch | 是 | 触发器临时缓存数据 |
mdworkflow | webhooks_catch | 是 | Webhook 运行产生的缓存数据 |
mdworkflow | wf_instance | 否 | 主流程执行历史关联数据 |
mdworkflow | wf_subInstanceActivity | 否 | 子流程执行历史关联数据 |
mdworkflow | wf_subInstanceCallback | 否 | 子流程执行历史关联数据 |
mdworkflow | app_multiple_catch | 否 | 获取多条数据节点,勾选“直接获取”后存储的数据 |
mdworkflow | custom_apipackageapi_catch | 否 | 调用API集成接口返回的数据 |
mdworksheetlog | wslog* | 是 | 存储对应月份的工作表行记录日志 表名格式为 wslog+日期(例如 wslog202409) |
mdintegration | wf_instance | 否 | 集成中心-请求日志 |
mdintegration | wf_instance_relation | 否 | 集成中心-请求日志关联数据 |
mdintegration | webhooks_catch | 否 | 集成中心-请求日志中“查看详情”对应的数据 |
mdintegration | code_catch | 否 | 集成中心-请求日志中“查看详情”对应的数据 |
mdintegration | json_catch | 否 | 集成中心-请求日志中“查看详情”对应的数据 |
mdintegration | custom_parameter_catch | 否 | 集成中心-请求日志中“查看详情”对应的数据 |
mdservicedata | al_actionlog* | 是 | 存储对应月份的应用行为日志 表名格式为 al_actionlog+日期(例如 al_actionlog202409) |
-
可直接
drop
的表,建议通过db.collection.drop()
命令删除,因为drop
删除后会直接释放对应表所占用的存储空间。例如,以下操作会删除
mdworkflow
库下的code_catch
表:use mdworkflow
db.code_catch.drop() -
不可以
drop
的表需参考下方步骤,配置清理任务。
配置数据清理任务
-
下载镜像(离线包下载)
docker pull registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-archivetools:1.0.3
-
创建
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执行一次" -
启动归档服务,在
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.3
其他事项:
-
资源占用: 程序运行期间,会对来源库、目标库及程序所在机器产生一定的资源占用压力,建议在业务空闲期间执行。
-
日志查看:
-
后台运行(默认): 使用
docker ps -a
找到容器ID,然后执行docker logs 容器ID
查看日志。 -
前台运行: 去掉
-d
参数,日志会实时输出到终端,方便观察进度。
-
-
定时任务:
- 设置执行间隔: 可以通过自定义
ENV_ARCHIVE_INTERVAL
变量修改执行间隔,单位毫秒,默认值86400000。
- 设置执行间隔: 可以通过自定义
-
回收磁盘空间:当通过清理工具删除数据后,已删除数据所占用的磁盘空间不会立即释放,但通常会相同表被复用。
-