日志数据清理
概述
在 HAP 私有部署系统中,一些“日志”类数据是长久保留在 MongoDB 中的,对于一些使用场景可能造成这类数据量庞大,占用较多数据库存储空间。
你可以在 MongoDB 中通过 show dbs
命令查看各库大小,再通过统计表大小的命令找到占用存储空间大的表。
我们提供了日志数据清理方案,根据设定的规则,可以将相关表中的数据物理删除。
操作前必读
清理操作是物理删除,对应数据永久丢失。一旦完成,对应时间段内的日志数据将无法恢复,也无法在系统界面上查看。
影响范围:
-
mdworkflow
库可清理的表主要影响范围:- 工作流执行历史
- 审批流历史
- 中断运行中流程:如果清理的数据中包含尚未完成的审批流或工作流,这些流程将因数据丢失而中断,无法继续执行。
-
mdworksheetlog
库可清理的表主要影响范围:- 工作表行记录日志
-
mdintegration
库可清理的表主要影响范围:- 集成中心历史请求日志
-
mdservicedata
库可清理的表主要影响范围:- 应用行为日志
- 使用分析日志
数据清理白名单
归属库 | 表名 | 表用途简述 |
---|---|---|
mdworkflow | wf_instance | 主流程执行历史关联数据 |
mdworkflow | wf_subInstanceActivity | 子流程执行历史关联数据 |
mdworkflow | wf_subInstanceCallback | 子流程执行历史关联数据 |
mdworkflow | wf_instanceExtends | 工作流执行历史关联数据 |
mdworkflow | code_catch | 存储代码块节点在运行中产生的临时数据 |
mdworkflow | hooks_catch | 存储接收到的 Webhook 数据 |
mdworkflow | webhooks_catch | 存储工作流节点"发送API请求"获取到的数据 |
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) |
mdservicedata | al_uselog | 存储“使用分析”功能的日志数据 |
数据清理操作建议
以下是针对不同类型数据的具体清理方法和注意事项。
按月归档的日志表
此方法适用于按月自动创建的日志表。
-
适用表:
mdworksheetlog
库下所有以wslog
开头的表mdservicedata
库下所有以al_actionlog
开头的表
-
操作方法: 对于这类按月归档的表,最直接高效的清理方式是使用
drop
命令删除整个表。此操作速度极快,并能立即释放表所占用的全部磁盘空间。 -
操作示例: 以下命令将删除 mdworksheetlog 库中 2024 年 1 月的工作表日志。
use mdworksheetlog;
db.wslog202401.drop();
工作流执行历史数据
清理工作流(及关联审批流)的执行历史时,涉及以下四个核心数据表:
wf_instance
wf_subInstanceActivity
wf_subInstanceCallback
wf_instanceExtends
这四个表会有数据紧密关联,共同构成了一条完整的流程记录。因此,在执行清理操作时,必须将它们视为一个不可分割的整体。
您需要对这四个表应用完全相同的删除规则(例如,按相同的时间范围删除),并确保操作同步完成。任何不一致的清理都会破坏数据完整性,可能导致历史流程查询异常或引发未知的系统问题。
缓存数据表 (以_catch 结尾)
这些表分布在 mdworkflow
和 mdintegration
库中,主要用于存储工作流和集成任务执行过程中的临时缓存数据。您可以根据 实际需求,对这些表进行独立的、选择性的清理。
潜在风险与影响:
在清理这些表之前,请务必了解以下潜在影响:
-
影响运行中的流程:清理
mdworkflow
库下的缓存表,可能会导致尚未执行完毕的工作流因找不到依赖数据而失败。以webhooks_catch
表为例,它用于暂存工作流节点"发送API请求"获取到的数据。如果在关联的工作流执行完毕前清除了该表中的数据,那么这个正在运行的流程就会因找不到依赖数据而中断或失败。 -
影响日志详情查看:清理
mdintegration
库下的缓存表,将导致集成中心“请求日志”中的“查看详情”功能中的日志数据为空,因为其所需的详细数据已被删除。
操作建议:
根据您对上述风险的接受程度,可以选择以下两种清理方式:
-
按条件清理
如果需要确保业务连续性,建议使用数据清理工具,按时间范围等条件删除旧的缓存数据。
-
直接删除整表
如果业务上可以接受上述风险(例如,确认无运行中流程,且不再需要查看旧日志详情),可以直接 drop 整个缓存表,这是回收磁盘空间最快的方式。
使用分析日志
mdservicedata
库中的 al_uselog
表存储了产品“使用分析”功能的数据。
由于前端页面仅支持查询最近一年的数据,因此建议定期清理一年之前的数据,以减少不必要的存储占用。
配置数据清理任务
-
下载镜像(离线包下载)
docker pull nocoly/hap-archivetools:1.0.4
-
创建
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,
"concurrencyLimit": 100
},
{
"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,
"concurrencyLimit": 100
},
{
"id": "3",
"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_subInstanceCallback",
"delete": true,
"batchSize": 500,
"retentionDays": 0,
"concurrencyLimit": 100
},
{
"id": "4",
"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_instanceExtends",
"delete": true,
"batchSize": 500,
"retentionDays": 0,
"concurrencyLimit": 100
}
]- 根据上述配置文件格式,调整或添加配置内容,以清理你所需的数据表
- 注意,配置文件中指定的时间是世界时区 (UTC)
- UTC: 2023-05-31 16:00:00
- 转为东八区时间 (UTC+8): 2023-06-01 00:00:00
- UTC: 2023-06-30 16:00:00
- 转为东八区时间 (UTC+8): 2023-07-01 00:00:00
- UTC: 2023-05-31 16:00:00
参数说明:
"id": "任务标识ID",
"text": "自定义描述",
"start": "指定删除的数据起始时间,UTC 时区,删除大于等于这个时间的数据(retentionDays 值大于0则此配置自动失效)",
"end": "指定删除的数据结束时间,UTC 时区,删除小于这个时间的数据(retentionDays 值大于0则此配置自动失效)",
"src": "来源库连接地址",
"archive": "目标库连接地址(如果值为空,则不归档只按照设定的规则进行删除)",
"table": "数据表",
"delete": "默认为true,在当次归档任务完成后,并且校验记录数量正确时清理来源库已归档数据,不需要删除则改为 false",
"batchSize": "单次批量插入以及批量删除条数",
"retentionDays": "默认值为0。大于0时代表删除多少天前的数据,并开启定时删除任务模式,start与end指定的日期自动失效,默认每24h执行一次",
"concurrencyLimit": "并发操作限制,值通常默认保持100即可" -
启动归档服务,在
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.4
其他事项:
-
若清理程序与 HAP 单机模式运行在同一台服务器,可在
docker run
命令中添加--network script_default
参数,使清理程序能通过 Docker 内部网络访问 MongoDB。此时,config.json
配置文件中 src 源库的连接地址需填写为mongodb://sc:27017/dbname
。 -
资源占用: 程序运行期间,会对来源库、目标库及程序所在机器产生一定的资源占用压力,建议在业务空闲期间执行。
-
日志查看:
-
后台运行(默认): 使用
docker ps -a
找到容器ID,然后执行docker logs 容器ID
查看日志。 -
前台运行: 去掉
-d
参数,日志会实时输出到终端,方便观察进度。
-
-
定时任务:
- 设置执行间隔: 可以通过自定义
ENV_ARCHIVE_INTERVAL
变量修改执行间隔,单位毫秒,默认值86400000。
- 设置执行间隔: 可以通过自定义
-
回收磁盘空间:当通过清理工具删除数据后,已删除数据所占用的磁盘空间不会立即释放,但通常会相同表被复用。
-