智能扫描重构遗留问题处理Phase 2
原始issue:https://github.com/actiontech/sqle-ee/issues/1576 关联issue:https://github.com/actiontech/sqle/issues/2523
需求描述(Describe)
3.2409.0-pre1
-
[x] 智能扫描报告中LastCollectTime字段与同步任务更新冲突问题 @iwanghc 问题影响: 扫描任务定时刷新需要同步的任务,由于该问题会导致每次都把全量的扫描任务查出来(包括已删除的),然后再过滤掉不需要执行的,预期是只要查出配置更新过的任务。
-
[x] 审核是个同步动作,花费时间过长可能会导致页面展示效果阻塞。需要调整审核的位置 @iwanghc 问题影响: 当扫描任务采集到的sql数据量较大时,由于批量审核的阻塞,可能出现在sql列表中无法即时展示出来这些sql,需要调整审核逻辑,先能展示采集的sql,再补充审核结果。
-
[x] 扫描任务概览中统计的 审核有问题的SQL数 不准确 @iwanghc
后续处理
-
[x] #2616 问题影响: 无法展示端点信息。
-
[x] TopSQL排序字段,理论上会有四个.预期是可以做下拉选择 @iwanghc 问题影响: 待确认。
-
[ ] 库表扫描任务中,存在自增主键建表SQL语句会由于自增值增加导致语句出现变更,由于建表语句变化导致sql_manage_record变化。更新时间每次扫描都会调整为最新,并且该建表语句一直被推送告警 @LordofAvernus 问题影响: 一条sql一直重复告警。
-
[ ] 其他代码里的todo项 / todo:移除废弃接口和实现;移除所有无用代吗 @LordofAvernus
-
[ ] 容错处理
从queues里读取出的记录处理失败怎么办?
handler里插入记录和删除queues的事务性,
审核失败怎么办如何处理;
容错处理需要优化,考虑新增字段来解决 问题影响: 扫描任务某些地方未进行错误处理,没有日志输出,可能会导致采集的sql部分丢失,审核结果不符合预期等问题。 -
[x] #2718 问题影响: TDQSL慢日志无法从页面复制scannerd启动命令,待确认TDSQL慢日志是否复用的mysql慢日志逻辑。
-
[ ] 需要改造各类型的智能扫描类型,以兼容旧数据 (问题待确认,来源?)
-
[ ] 扫描任务导出审核结果,csv文件审核结果列内容未格式化
-
[ ] 自定义扫描任务TOKEN没有展示到页面
测试遗留问题
DB2
- 库表元数据:报错 create variable failed, error
- TOP SQL:未采集到数据
OB MySQL
- TOP SQL:报错 extract sql failed, can not do this task, plugin not implement api Query
应用程序抓取sql:
- 参数要求填写任务名称,但是现在智能扫描任务已经没有名称了
待测试 OB Oracle TIDB审计日志 TDSQL库表元数据、慢日志 rds相关任务
æºè½æ«ææ¥åä¸LastCollectTimeåæ®µä¸åæ¥ä»»å¡æ´æ°å²çªé®é¢
- AuditPlanV2表æ¯å¦ä» ä½ä¸ºé 置表ï¼å¦æä» ä½ä¸ºé 置表åå¨ï¼LastCollectTime屿§ä¸è¡¨å®ä¹åå¨å²çªï¼è¿ç§æ åµéè¦æè¡¨è§£å³ï¼
- å½AuditPlanV2ä½ä¸ºæ«æä»»å¡è®°å½ï¼é£ä¹é»è®¤update_timeåæ®µå¼çåæ´ï¼ä¸åºè¯¥è¢«è¯å«ä¸ºä»»å¡ååæ´ãåºè¯¥ç±å ¶ä»æ åæ¥ç¡®è®¤é ç½®åæ´ï¼æè½ååºä»»å¡æ´æ°/å é¤å¨ä½ï¼
- æ¹æ¡1å2éä¸ä¸ä¸ªæ¥è§£å³ è¯ä¼°å½±åé¢åå ¼å®¹
æ¹æ¡ä¸ï¼
å½±åé¢ï¼æ°å¢ä¸ä¸ªè®°å½æåééæ¶é´ç表 1ãä»»å¡éésqlï¼å¨æ¯æ¬¡è¿è¡ééçæ¶åæ´æ°è¯¥æ¶é´ 2ã宿¶åæ¥ä»»å¡ï¼è®°å½é ç½®æ´æ°æ¶é´å°å åï¼æ¯æ¬¡æ ¹æ®æ´æ°æ¶é´æ¥éè¦åæ¥çä»»å¡ 3ãæ¦è§å表æ¥è¯¢æ¶å ³è该表ãå é¤ä»»å¡/å®ä¾ä»»å¡æ¶å ³èå é¤ å ¼å®¹æ§ï¼ä¸å ¼å®¹æ§çæ¬ï¼éè¦å°é 置表记å½çæåæ´æ°æ¶é´è¿ç§»å°æ°è¡¨ä¸ï¼å¹¶å 餿«æä»»å¡é 置表çlast_collect_timeåæ®µï¼
æ¹æ¡äºï¼
å½±åé¢ï¼å¨é 置表æ°å¢ä¸ä¸ªå段记å½é ç½®æåæ´æ°æ¶é´ 1ã宿¶åæ¥ä»»å¡ï¼åæ¥ä»»å¡æ¶æ ¹æ®é ç½®æåæ´æ°æ¶é´çééè¦åæ¥çä»»å¡ 2ã卿´æ°æ«æä»»å¡é ç½®ãå 餿«æä»»å¡æ¶é½éè¦æ´è¯¥å段
å ¼å®¹æ§ï¼å ¼å®¹æ§çæ¬
æç»æ¹æ¡ï¼æ¹æ¡ä¸
æ¹æ¡ä¸åçæ§ï¼å¨é 置表ä¸ä¸åå¨ä¸å¡ä¿¡æ¯æ´ä¸ºåçï¼å°æåééæ¶é´æååºæ¥ã ä¼ç¹ï¼åç»è¥æä¸å¡éè¦ï¼ä»»å¡ææ°çä¸å¡ä¿¡æ¯éè¦è¡¥å å¯ä»¥å¨æ¤è¡¨æ°å¢å段ï¼ç¸è¾äºæ¹æ¡äºï¼ä¸éè¦å¨æ´æ°å é¤ä»»å¡æ¶å ³æ³¨æ¶é´åæ®µçæ´æ°ã 缺ç¹ï¼ææ¬ç¥é«
åçº§æ¹æ¡ï¼
å设sqleæå¡çä¸å¡æ°æ®åºå为sqleï¼æ§è¡ä»¥ä¸sqlè¯å¥ 1ãå建audit_plan_task_infos表
CREATE TABLE sqle.audit_plan_task_infos (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`created_at` datetime(3) DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` datetime(3) DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` datetime(3) DEFAULT NULL,
`audit_plan_id` bigint(20) unsigned NOT NULL,
`last_collection_time` datetime(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2ãå°åéæ«æä»»å¡idåæåééæ¶é´åæ¥è³audit_plan_task_infos 表
INSERT INTO sqle.audit_plan_task_infos (updated_at, deleted_at, audit_plan_id, last_collection_time) select updated_at, deleted_at,id, last_collection_time from sqle.audit_plans_v2;
3ãå é¤audit_plans_v2表çlast_collection_time
ALTER TABLE sqle.audit_plans_v2 DROP COLUMN last_collection_time;
优化扫描任务审核逻辑,避免阻塞页面显示
背景:
当采集的sql数量较大时,由于审核的阻塞,导致在前端展示会有一定时差(队列每次peek1000条-->批量审核(耗时)-->设置高优先级-->数据落地-->移除被peek的队列数据)
解决方案:
1、调整扫描任务审核逻辑(队列每次peek1000条-->开启事务-->数据落地-->移除被peek的队列数据-->提交事务-->开启协程-->批量审核(耗时)-->设置高优先级-->更新数据)
2、扫描任务sql列表的审核结果列补充一个审核中,首次采集到的sql数据落地但未审核完时展示为审核中
3、在sql管控列表的审核结果列补充一个审核中,审核结果为NULL的展示为审核中(需要调整sql管控接口定义,新增audit_status字段)
影响:
1、智能扫描 2、sql管控 (采集后页面第一时间不能展示出审核结果和高优先级内容,影响仅在数据量较大时有感知)
兼容性:
兼容旧版本
为了处理‘审核是个同步动作,花费时间过长可能会导致页面展示效果阻塞。’问题,后端在SQL管控列表接口和智能扫描任务详情接口中加入了‘审核中’状态,前端需要处理当sql是‘审核中’状态时,自动刷新列表更新列表数据。刷新机制和工单上线中的自动刷新机制一致,1000ms刷新一次。
- [x] 快速审核、SQL管控、SQL管控配置-任务详情列表 当sql为‘审核中’状态时,自动刷新列表数据
自定义扫描任务TOKEN没有展示到页面: 关联issue: https://github.com/actiontech/sqle/issues/2646