Files
王绍宏 3acd90ecc9 fix(syslog-serve): 扩大微步5万条日志响应容量
- 按50000条、每条最大10KiB将响应上限调整为512MiB
- 将微步适配器最大响应字节数提高至536870912
- 将JSON解析token上限由200万提高至2500万
- 同步放宽管理接口和达梦数据库响应大小约束
- 更新微步任务模板、v6升级脚本和现场部署文档
- 增加50000条及512MiB配置边界测试
- 更新启动版本标识为WEIBU_5S_50000_512M_V20260917_71

验证:
- JDK 8测试通过:167个,失败0,错误0,跳过2
- Maven BUILD SUCCESS
- git diff --check通过
2026-09-17 23:40:07 +08:00

4.3 KiB
Raw Permalink Blame History

v6 设备级采集模式增量升级说明

默认采集总开关

新版默认同时开启 Syslog 服务和设备 API 拉取调度:

SYSLOG_SERVER_ENABLED=true
DEVICE_API_ENABLED=true

DEVICE_DEVICE.COLLECTION_MODE 默认 BOTH,因此既有设备升级后同时允许 Syslog 和 API。具体 API 任务仍需完成校验并通过 resume 启用;全局开关为 true 不会自动启动暂停任务。

必须执行的数据库脚本

新版 syslog-serve 会直接查询 device_device.collection_mode。因此必须在启动新版 JAR 前,由 DBA 使用 syslog-serve 实际连接的 Schema 按顺序执行:

database/01-device-collection-mode-precheck.sql
database/02-device-collection-mode-upgrade.sql
database/03-device-collection-mode-verify.sql

执行规则:

  1. 先备份 DEVICE_DEVICE,保存预检结果。
  2. 01 中字段和约束查询首次升级时必须返回 0 行。
  3. 02 只能成功执行一次;中途报错时不要整份重跑,应先检查已落库对象。
  4. 03 必须确认字段为 VARCHAR2(16) DEFAULT 'BOTH' NOT NULL、约束已启用、非法数据数为 0。
  5. 03 验证完成后即可启动新版 JAR。先配置下游微步 API JSON 泛化规则,再写入微步凭据、创建并验证 WEIBU_LOG 新任务;确认规则已关联设备后才能恢复任务并设置具体设备模式。

默认 BOTH 用于兼容现有设备;升级 SQL 不硬编码任何设备 ID。

API 拉取任务的通用 LOOKBACK_SECONDS 默认值同时由 300 调整为 0。升级只修改数据库列默认值, 不会批量更新已有任务;确实需要迟到补偿的任务继续保留或显式配置正数。 数据库 PAGE_SIZE 检查约束上限由 10000 放宽为 50000,用于微步 5 秒窗口;其他适配器仍执行 各自更严格的 Java 配置校验。已有任务值不会被升级脚本修改。 数据库 MAX_RESPONSE_BYTES 检查约束上限同时放宽为 536870912(512 MiB),用于容纳 50000 条 × 每条最大 10 KiB 的微步响应;生产部署必须使用文档指定的 24 GiB JVM 堆配置。

API 拉取任务的探针归属

新版调度器只扫描满足以下条件的设备任务:

DEVICE_DEVICE.DEVICE_COLLECT_ID = 当前节点 APP_SERVICE_DEVICE_COLLECT_ID

取得数据库租约时会再次检查该归属关系。设备迁移到其他探针后,原节点不会执行 HTTP 请求, 也不会推进该任务的 NEXT_RUN_AT。同一探针的多个同版本副本可以同时开启 DEVICE_API_ENABLED=true,再由数据库租约保证同一任务只有一个实例执行。混合版本升级期间, 旧节点仍建议保持 DEVICE_API_ENABLED=false。

本次 v6 新增字段只有 DEVICE_DEVICE.COLLECTION_MODE;另外将既有 DEVICE_COLLECT_API_CONFIG.LOOKBACK_SECONDS 的列默认值调整为 0,不新增 API 拉取表、不修改已有任务值。 微步 API 复用现有 DEVICE_COLLECT_API_* 基础表。新版微步适配器只支持 WEIBU_LOG(/api/v1/log/searchBySql);开发阶段的 WEIBU_INCIDENT 从未作为现场版本发布,因此不需要现场数据迁移脚本。

现场设置示例

docker exec syslog-serve-dm curl -fsS -X PUT \
  'http://127.0.0.1:8189/syslogserve/api/devices/40/collection-mode' \
  -H 'Content-Type: application/json' \
  -d '{"collectionMode":"API_ONLY"}'

docker exec syslog-serve-dm curl -fsS \
  'http://127.0.0.1:8189/syslogserve/api/devices/40'

GET 响应必须包含 "collectionMode":"API_ONLY"。设置后,设备 40 的微步 API 拉取任务继续运行,IP 10.56.171.164 的 TCP/UDP Syslog 不得进入 WAL。

多实例部署时,收到 PUT 请求的实例立即清理三层缓存并刷新入站快照;其他实例最迟在现有设备快照 TTL 后生效。

微步凭据与任务、设备 API_ONLY、缓存清理、验收和回退已合并为一份现场手册:

按现场要求,api/weibu-40-credential.json 已填写设备 40 的真实微步 ApiKey/Secret;api/weibu-40-task.json 已填写设备、地址和拉取参数,首次采集时间由现场命令生成。凭据文件包含明文生产秘密,必须限制整个 v6 目录的权限和分发范围;禁止把文件内容复制到工单、聊天或执行日志。