新增syslog-collector-api 采集模块,通过api 方式采集天眼、微步的设备日志。

This commit is contained in:
2026-09-07 15:34:17 +08:00
parent a3852fc0f9
commit 037cca32dd
53 changed files with 6358 additions and 488 deletions
@@ -0,0 +1,158 @@
-- =====================================================================
-- 设备API采集模块 建表 + 测试数据脚本
-- 适用数据库: 达梦 DM8
-- 说明:
-- 1. 先执行建表语句(表已存在时请先删除或忽略 DDL 部分)
-- 2. 再执行 INSERT 测试数据
-- 3. id 均为自增字段(IDENTITY),INSERT 无需也不允许指定 id
-- =====================================================================
-- ---------------------------------------------------------------------
-- 1. 建表: 设备API采集配置表
-- ---------------------------------------------------------------------
DROP TABLE IF EXISTS device_api_collect_log;
DROP TABLE IF EXISTS device_api_config;
CREATE TABLE device_api_config (
id BIGINT IDENTITY(1,1) PRIMARY KEY,
device_id INT, -- 设备ID,关联 device_device.id
device_type VARCHAR(50) NOT NULL, -- 设备类型: tianyan/weibu/xdr
device_name VARCHAR(100) NOT NULL, -- 设备名称
device_ip VARCHAR(200) NOT NULL, -- 设备IP地址
host_api VARCHAR(200) NOT NULL, -- 设备API URL地址
auth_config TEXT, -- 认证配置JSON
data_types VARCHAR(500) NOT NULL, -- 数据类型: weblog,alarm / attack,info
collect_interval_sec INT DEFAULT 300, -- 采集间隔(秒)
enabled INT DEFAULT 1, -- 是否启用: 0-禁用, 1-启用
remark VARCHAR(500), -- 备注
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE device_api_config IS '设备API采集配置表';
COMMENT ON COLUMN device_api_config.id IS '主键,自增';
COMMENT ON COLUMN device_api_config.device_id IS '设备ID,关联 device_device.id';
COMMENT ON COLUMN device_api_config.device_type IS '设备类型: tianyan/weibu/xdr';
COMMENT ON COLUMN device_api_config.device_name IS '设备名称';
COMMENT ON COLUMN device_api_config.device_ip IS '设备IP地址';
COMMENT ON COLUMN device_api_config.host_api IS '设备API URL地址';
COMMENT ON COLUMN device_api_config.auth_config IS '认证配置JSON';
COMMENT ON COLUMN device_api_config.data_types IS '数据类型: weblog,alarm / attack,info';
COMMENT ON COLUMN device_api_config.collect_interval_sec IS '采集间隔(秒)';
COMMENT ON COLUMN device_api_config.enabled IS '是否启用: 0-禁用, 1-启用';
COMMENT ON COLUMN device_api_config.remark IS '备注';
COMMENT ON COLUMN device_api_config.create_time IS '创建时间';
COMMENT ON COLUMN device_api_config.update_time IS '更新时间';
-- ---------------------------------------------------------------------
-- 2. 建表: 设备API采集执行日志表
-- ---------------------------------------------------------------------
CREATE TABLE device_api_collect_log (
id BIGINT IDENTITY(1,1) PRIMARY KEY,
device_id INT NOT NULL, -- 设备ID,关联 device_device.id
device_type VARCHAR(50) NOT NULL, -- 设备类型
data_type VARCHAR(50) NOT NULL, -- 数据类型
start_time TIMESTAMP NOT NULL, -- 采集窗口开始时间
end_time TIMESTAMP NOT NULL, -- 采集窗口结束时间
total_count INT DEFAULT 0, -- 采集记录总数
success_count INT DEFAULT 0, -- 成功写入数
fail_count INT DEFAULT 0, -- 失败数
cost_ms BIGINT DEFAULT 0, -- 耗时(毫秒)
status VARCHAR(20) NOT NULL, -- 状态: SUCCESS/FAIL
error_msg TEXT, -- 错误信息
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
COMMENT ON TABLE device_api_collect_log IS '设备API采集执行日志';
COMMENT ON COLUMN device_api_collect_log.id IS '主键,自增';
COMMENT ON COLUMN device_api_collect_log.device_id IS '设备ID,关联 device_device.id';
COMMENT ON COLUMN device_api_collect_log.device_type IS '设备类型';
COMMENT ON COLUMN device_api_collect_log.data_type IS '数据类型';
COMMENT ON COLUMN device_api_collect_log.start_time IS '采集窗口开始时间';
COMMENT ON COLUMN device_api_collect_log.end_time IS '采集窗口结束时间';
COMMENT ON COLUMN device_api_collect_log.total_count IS '采集记录总数';
COMMENT ON COLUMN device_api_collect_log.success_count IS '成功写入数';
COMMENT ON COLUMN device_api_collect_log.fail_count IS '失败数';
COMMENT ON COLUMN device_api_collect_log.cost_ms IS '耗时(毫秒)';
COMMENT ON COLUMN device_api_collect_log.status IS '状态: SUCCESS/FAIL';
COMMENT ON COLUMN device_api_collect_log.error_msg IS '错误信息';
COMMENT ON COLUMN device_api_collect_log.create_time IS '创建时间';
-- =====================================================================
-- 3. 测试数据: 设备API采集配置表(id 自增,不插入)
-- 覆盖: 天眼(启用/停用)、微步(启用)、XDR(暂缓停用)
-- =====================================================================
INSERT INTO device_api_config
(device_id, device_type, device_name, device_ip, host_api, auth_config, data_types,
collect_interval_sec, enabled, remark, create_time, update_time)
VALUES
-- 天眼-主设备(启用,采集 weblog+alarm)
(35, 'tianyan', '天眼态势感知平台', '10.56.170.107',
'https://10.56.170.107',
'{"login_key":"QuJm4NwF3GMaXb2Z","username":"xxadmin","branch_id":"QbJK%2FsLHi"}',
'weblog,alarm', 300, 1, '生产环境天眼主采集器',
'2026-08-27 09:00:00', '2026-08-27 09:00:00'),
-- 天眼-备设备(停用,仅测试)
(102, 'tianyan', '天眼态势感知平台-备', '10.56.170.107',
'https://10.56.170.107',
'{"login_key":"QuJm4NwF3GMaXb2Z","username":"xxadmin","branch_id":"QbJK%2FsLHi"}',
'weblog', 600, 0, '备用采集器,暂未启用',
'2026-08-27 09:05:00', '2026-08-27 09:05:00'),
-- 微步-TDP(启用,采集 attack+info)
(36, 'weibu', '微步威胁感知平台', '10.56.171.164',
'https://10.56.171.164',
'{"api_key":"57d8fb2b556a471ea36b8b4441fa1c0c","secret":"9d967876f51d4e16bbf8bde069d12a9b"}',
'attack,info', 300, 1, '生产环境微步采集器',
'2026-08-27 09:10:00', '2026-08-27 09:10:00'),
-- XDR(暂缓,联动码待联调)
(104, 'xdr', '深信服XDR平台', '192.168.30.31',
'https://192.168.30.31',
'{"auth_code":"<待联调时填入14段联动码>"}',
'alert', 300, 0, 'XDR采集暂缓,待联动码解码联调后启用',
'2026-08-27 09:15:00', '2026-08-27 09:15:00');
-- =====================================================================
-- 4. 测试数据: 设备API采集执行日志表(id 自增,不插入)
-- 覆盖: 成功、失败、不同设备/类型
-- =====================================================================
INSERT INTO device_api_collect_log
(device_id, device_type, data_type, start_time, end_time,
total_count, success_count, fail_count, cost_ms, status, error_msg, create_time)
VALUES
-- 天眼 weblog 采集成功
(101, 'tianyan', 'weblog',
'2026-08-27 08:55:00', '2026-08-27 09:00:00',
1280, 1280, 0, 3265, 'SUCCESS', NULL,
'2026-08-27 09:00:00'),
-- 天眼 alarm 采集成功
(101, 'tianyan', 'alarm',
'2026-08-27 08:55:00', '2026-08-27 09:00:00',
36, 36, 0, 1240, 'SUCCESS', NULL,
'2026-08-27 09:00:00'),
-- 微步 attack 采集成功(含少量失败)
(103, 'weibu', 'attack',
'2026-08-27 08:55:00', '2026-08-27 09:00:00',
520, 518, 2, 1890, 'SUCCESS', '2条消息Kafka推送失败',
'2026-08-27 09:00:00'),
-- 微步 info 采集失败(模拟接口超时)
(103, 'weibu', 'info',
'2026-08-27 08:55:00', '2026-08-27 09:00:00',
0, 0, 0, 30050, 'FAIL', 'searchBySql接口请求超时: read timed out',
'2026-08-27 09:00:00'),
-- XDR(停用状态,无采集记录; 以下为历史参考记录)
(104, 'xdr', 'alert',
'2026-08-26 09:00:00', '2026-08-26 09:05:00',
0, 0, 0, 150, 'FAIL', 'XDR采集器暂缓,待联动码解码与签名接口联调后实现',
'2026-08-26 09:05:00');
-- =====================================================================
-- 5. 校验查询(可选执行)
-- =====================================================================
-- 查询启用中的采集配置
-- SELECT id, device_type, device_name, data_types, collect_interval_sec
-- FROM device_api_config
-- WHERE enabled = 1;
-- 查询最近采集日志
-- SELECT device_type, data_type, total_count, success_count, fail_count,
-- status, error_msg, create_time
-- FROM device_api_collect_log
-- ORDER BY id DESC;
@@ -0,0 +1,93 @@
-- =====================================================================
-- Mock 服务器功能测试配置脚本
-- 将天眼/微步的 host_api 指向本地 Mock 接口(复用 8290 端口,路径区分)
--
-- 前置条件:
-- 1. application.properties 中 mock.server.enabled=true
-- 2. 应用运行在 127.0.0.1:8290(context-path=/collectorapi)
--
-- 采集器 host 拼接规则: host_api + 接口路径
-- 天眼: http://127.0.0.1:8290/collectorapi/mock/tianyan + /skyeye/v1/admin/auth ...
-- 微步: http://127.0.0.1:8290/collectorapi/mock/weibu + /api/v1/log/searchBySql ...
--
-- 使用说明:
-- 执行本脚本前,请先恢复生产 host_api(执行恢复语句);
-- 测试完成后务必执行"恢复生产配置"部分,避免误连生产。
-- =====================================================================
-- =====================================================================
-- 1. 切换到本地 Mock 地址
-- =====================================================================
-- 天眼-主设备(101): weblog+alarm
UPDATE device_api_config
SET host_api = 'http://127.0.0.1:8290/collectorapi/mock/tianyan',
enabled = 1,
remark = '【功能测试】连接本地Mock,生产地址10.56.170.107',
update_time = SYSDATE
WHERE id = 101;
-- 天眼-备设备(102): weblog(启用用于并行测试)
UPDATE device_api_config
SET host_api = 'http://127.0.0.1:8290/collectorapi/mock/tianyan',
enabled = 1,
remark = '【功能测试】连接本地Mock,生产地址10.56.170.107',
update_time = SYSDATE
WHERE id = 102;
-- 微步-TDP(103): attack+info
UPDATE device_api_config
SET host_api = 'http://127.0.0.1:8290/collectorapi/mock/weibu',
enabled = 1,
remark = '【功能测试】连接本地Mock,生产地址10.56.171.164',
update_time = SYSDATE
WHERE id = 103;
-- =====================================================================
-- 2. 手动触发测试(执行后可手工调用,也可等待定时调度)
-- 天眼 weblog: curl -X POST "http://127.0.0.1:8290/collectorapi/api/collect/trigger?id=101&dataType=weblog&minutes=60"
-- 天眼 alarm: curl -X POST "http://127.0.0.1:8290/collectorapi/api/collect/trigger?id=101&dataType=alarm&minutes=60"
-- 微步 attack: curl -X POST "http://127.0.0.1:8290/collectorapi/api/collect/trigger?id=103&dataType=attack&minutes=60"
-- 微步 info: curl -X POST "http://127.0.0.1:8290/collectorapi/api/collect/trigger?id=103&dataType=info&minutes=60"
-- 全部类型: curl -X POST "http://127.0.0.1:8290/collectorapi/api/collect/trigger?id=101&minutes=60"
-- =====================================================================
-- =====================================================================
-- 3. 模拟异常场景(通过 Mock 接口场景参数,无需改库)
-- 天眼 csrf过期: GET "http://127.0.0.1:8290/collectorapi/mock/tianyan/skyeye/v1/analysis/log-search/list?index=weblog&offset=1&limit=100&start_time=xxx&end_time=xxx&mock_scenario=csrf_expired"
-- 天眼 空数据: ...&mock_scenario=empty
-- 微步 签名错误: POST "http://127.0.0.1:8290/collectorapi/mock/weibu/api/v1/log/searchBySql?api_key=xxx&auth_timestamp=xxx&sign=xxx&mock_scenario=sign_error"
-- =====================================================================
-- =====================================================================
-- 4. 恢复生产配置(测试完成后务必执行!)
-- =====================================================================
-- UPDATE device_api_config
-- SET host_api = 'https://10.56.170.107',
-- remark = '生产环境天眼主采集器',
-- update_time = SYSDATE
-- WHERE id = 101;
--
-- UPDATE device_api_config
-- SET host_api = 'https://10.56.170.107',
-- remark = '备用采集器,暂未启用',
-- update_time = SYSDATE
-- WHERE id = 102;
--
-- UPDATE device_api_config
-- SET host_api = 'https://10.56.171.164',
-- remark = '生产环境微步采集器',
-- update_time = SYSDATE
-- WHERE id = 103;
-- =====================================================================
-- 5. 校验查询
-- =====================================================================
-- SELECT id, device_type, device_name, host_api, data_types, enabled, remark
-- FROM device_api_config
-- ORDER BY id;
-- SELECT device_type, data_type, total_count, success_count, fail_count,
-- status, error_msg, create_time
-- FROM device_api_collect_log
-- ORDER BY id DESC
-- FETCH FIRST 10 ROWS ONLY;