feat: 新增设备 API 拉取采集及配套处理能力
- 接入 NDRServer 告警和流量日志,支持凭据与任务管理 - 支持分页拉取、窗口拆分、调度优先级及 WAL 持久化后推进断点 - 增加迟到告警规则重放,优化多条泛化规则选择和事件时间处理 - 补充回归测试、数据库升级脚本及部署文档
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
-- =============================================================================
|
||||
-- 脚本:80-late-replay-backfill-template.sql
|
||||
-- 用途:为升级前已经进入 SYSLOG_NORMAL_ALARM、但错过实时规则窗口的历史告警,
|
||||
-- 补建迟到告警分钟桶,之后由新版规则服务进行重放。
|
||||
-- 性质:可选的数据修复模板,会写入或更新 ANALYSIS_LATE_ALARM_BUCKET。
|
||||
-- 执行时机:05、06 已成功执行且确实需要补处理历史告警时。
|
||||
--
|
||||
-- 重要:本文件包含占位符,不得原样执行。
|
||||
-- 执行前必须完成:
|
||||
-- 1. 将 DEVICE_ID 替换为一个明确的数字,例如 126;
|
||||
-- 2. 将 START_TIME、END_TIME 替换为明确时间,采用左闭右开范围;
|
||||
-- 3. 先执行下面 USING 括号中的 SELECT,核对设备、时间和分钟数量;
|
||||
-- 4. 一次最多按一小时处理,大范围应分成多个小时依次执行;
|
||||
-- 5. 确认没有选中其他设备的数据。
|
||||
--
|
||||
-- 示例范围:
|
||||
-- log_time >= TIMESTAMP '2026-09-06 00:00:00'
|
||||
-- log_time < TIMESTAMP '2026-09-06 01:00:00'
|
||||
-- 表示只处理 00:00:00(含)到 01:00:00(不含)的数据。
|
||||
--
|
||||
-- 成功后,受影响分钟在 ANALYSIS_LATE_ALARM_BUCKET 中为 PENDING,或在原任务
|
||||
-- 正在运行时保持 RUNNING 并增加 requested_generation。随后由规则服务处理。
|
||||
-- =============================================================================
|
||||
|
||||
-- 按“设备 + 事件分钟”合并:已有分钟增加请求代数,新分钟插入一条待处理记录。
|
||||
MERGE INTO analysis_late_alarm_bucket t
|
||||
USING (
|
||||
SELECT
|
||||
device_id,
|
||||
TO_TIMESTAMP(
|
||||
TO_CHAR(log_time,'YYYY-MM-DD HH24:MI') || ':00',
|
||||
'YYYY-MM-DD HH24:MI:SS'
|
||||
) AS bucket_start
|
||||
FROM syslog_normal_alarm
|
||||
WHERE device_id = DEVICE_ID
|
||||
AND log_time >= TIMESTAMP 'START_TIME'
|
||||
AND log_time < TIMESTAMP 'END_TIME'
|
||||
GROUP BY
|
||||
device_id,
|
||||
TO_TIMESTAMP(
|
||||
TO_CHAR(log_time,'YYYY-MM-DD HH24:MI') || ':00',
|
||||
'YYYY-MM-DD HH24:MI:SS'
|
||||
)
|
||||
) s
|
||||
ON (t.device_id=s.device_id AND t.bucket_start=s.bucket_start)
|
||||
WHEN MATCHED THEN UPDATE SET
|
||||
t.requested_generation=t.requested_generation+1,
|
||||
t.last_observed_at=SYSDATE,
|
||||
t.status=CASE WHEN t.status='RUNNING' THEN 'RUNNING' ELSE 'PENDING' END,
|
||||
t.updated_at=SYSDATE
|
||||
WHEN NOT MATCHED THEN INSERT (
|
||||
id,device_id,bucket_start,bucket_end,last_observed_at,
|
||||
requested_generation,claimed_generation,processed_generation,
|
||||
status,attempt_count,fencing_token,created_at,updated_at
|
||||
) VALUES (
|
||||
SYS_GUID(),s.device_id,s.bucket_start,s.bucket_start+(1.0/1440),SYSDATE,
|
||||
1,0,0,'PENDING',0,0,SYSDATE,SYSDATE
|
||||
);
|
||||
|
||||
-- 提交本次历史补数。
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user