Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[OPTIMIZATION] 支持日志状态表的删除 #1348

Closed
ZhuoZhuoCrayon opened this issue Dec 19, 2022 · 7 comments
Closed

[OPTIMIZATION] 支持日志状态表的删除 #1348

ZhuoZhuoCrayon opened this issue Dec 19, 2022 · 7 comments
Assignees
Labels
done 已上线到正式环境并验收通过 module/backend 后台 module/docs 文档 version/V2.2.X V2.2.X

Comments

@ZhuoZhuoCrayon
Copy link
Member

ZhuoZhuoCrayon commented Dec 19, 2022

你想要什么功能
支持日志状态表的删除,删除后不影响页面/API查看任务状态

为什么需要
避免该表的过度膨胀

建议如何实现

日志状态表:SubscriptionInstanceStatusDetail

配置:是否定期清理日志,仅保留xx天的日志,保留什么级别的日志,由于存量日志过多,每次最多删除xx条
指引:危机时刻删表、按时间戳删除历史日志(保留xx天)

@ZhuoZhuoCrayon
Copy link
Member Author

实现思路

目标

  • 删除 SubscriptionInstanceStatusDetailSubscriptionInstanceRecordstatus 不会被重置
  • 任务历史,子步骤状态可以处于 PENDING
  • 订阅(采集) & 页面相关的依赖接口不能有报错

可能需要调整的地方

apps/backend/subscription/task_tools.py

  1. 保留失败日志的情况下,确保可以通过仅存的失败节点,还原之前的节点状态

企业微信截图_b612f5de-f102-409b-8881-5678b423c0d2

  1. SubscriptionInstanceRecord 有明确状态的情况下,如果 collect_status 处于 PENDING,填充 SubscriptionInstanceRecord 自身的状态及时间

企业微信截图_d6c4eb2b-2c87-4671-be3a-6c59f2fd0876

@CohleRustW
Copy link
Collaborator

CohleRustW commented May 5, 2023

方案实现事项

  • 周期任务清理订阅日志表
    • 尽量根据索引和时间段进行删除,避免非索引字段条件进行DELETE

注意事项

  1. 清理SubscriptionInstanceStatusDetail时避免全表扫描
  2. 保持statusstatus_display 统一
  3. 对保留指定日志级别的任务注意还原前节点状态

紧急清理表方案

  1. 指引Truncate表方案
  2. 指引周期任务配置方案

@ZhuoZhuoCrayon
Copy link
Member Author

交付目标

文档

数据删除的操作指引

自测截图

Pipeline 相关的表默认删除,删除的表参考:apps/backend/management/commands/clean_old_instance_record.py
删表操作执行后,需要删表时间点之后的 SubscriptionInstanceRecord 数据强制失败,避免后续巡检报执行中的错误
以下每个功能自测点附上截图,作为后续给出方案及效果的一部分

SubscriptionInstanceStatusDetail 全表删除

  • SaaS - 执行历史允许「步骤」级别的状态不准确,但「主机执行状态」(SubscriptionInstanceRecord)要准确
  • 订阅 - 巡检/重试不受影响
  • 订阅 - instance_status / statistic / task_result_detail / task_result 不报错,主机执行状态准确

保留 SubscriptionInstanceStatusDetail ERROR 日志

  • SaaS - 执行历史允许「步骤」级别的状态不准确(失败节点日志可查),但「主机执行状态」(SubscriptionInstanceRecord)要准确
  • 订阅 - 巡检/重试不受影响
  • 订阅 - instance_status / statistic / task_result_detail / task_result 不报错,主机执行状态准确,失败节点日志可查

保留 SubscriptionInstanceStatusDetail 某个时间后的数据

  • 日志保留时间之外:同 SubscriptionInstanceStatusDetail 全表删除
  • 日志保留时间之内:各项功能需正常

@CohleRustW
Copy link
Collaborator

CohleRustW commented May 11, 2023

自测截图

清理数据前

image image image

清理所有日志

image image image image image image image image

保留失败日志

image image image image image image image image

@CohleRustW
Copy link
Collaborator

CohleRustW commented May 11, 2023

订阅巡检

  1. 启用订阅巡检
image
  1. 查询订阅 task
image
  1. 执行巡检任务
image
  1. 查询巡检订阅 TASK
image
  1. 相关接口执行结果验证
image image image

@CohleRustW
Copy link
Collaborator

删除指定时间之前的日志

image image image image image image

@ZhuoZhuoCrayon
Copy link
Member Author

企业微信截图_dd9e0ff9-b69f-4230-a037-2c5182695c76

本意是想压缩存储节点,但漏了 {"SUCCESS", "PENDING"} 这种状态组合,在这种情况下,会偶发任务提前成功的现象

模拟该情况:

企业微信截图_47d6f53b-cfb6-4dc0-ac56-9e30fe9a1434

保留失败日志:

企业微信截图_9cfbd545-9db7-436c-879b-8f5b7a7fa9a5

@CohleRustW CohleRustW added the for gray 可以在灰度/预发布环境验收 label Jul 28, 2023
@ZhuoZhuoCrayon ZhuoZhuoCrayon reopened this Aug 3, 2023
@ZhuoZhuoCrayon ZhuoZhuoCrayon added for test 可以在测试环境进行验收 and removed for gray 可以在灰度/预发布环境验收 labels Aug 3, 2023
@wyyalt wyyalt added tested 已经在测试环境验收通过 and removed for test 可以在测试环境进行验收 labels Aug 10, 2023
@wyyalt wyyalt added done 已上线到正式环境并验收通过 and removed tested 已经在测试环境验收通过 labels Aug 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
done 已上线到正式环境并验收通过 module/backend 后台 module/docs 文档 version/V2.2.X V2.2.X
Projects
None yet
Development

No branches or pull requests

3 participants