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

190 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# v6 API 现场操作
API 相关升级只看本页。示例设备:`deviceId=40`、`IP=10.56.171.164`、微步 TDP。
生产环境不映射管理端口,所有 API 命令都通过容器执行:
- `syslog-serve-dm`:`8189`
- `syslog-consumer-rule-dm`:`8289`
## 1. 发布顺序
1. 先按 `upgrade-doc/v6/README.md` 执行 3 个数据库脚本。
2. 确认启动配置:
```text
SYSLOG_SERVER_ENABLED=true
DEVICE_API_ENABLED=true
DEVICE_API_SCHEDULER_SCAN_INTERVAL_MS=1000
DEVICE_API_TLS_VERIFY_ENABLED=false
DEVICE_API_HOST_ALLOWLIST_ENABLED=false
```
3. 更换并启动新 JAR。新版 JAR 不能在数据库字段升级前启动。
4. 检查启动日志:
```bash
docker logs syslog-serve-dm 2>&1 | grep '\[SYSLOG_BUILD_READY\]' | tail -n 1
```
必须看到 `codeRevision=WEIBU_5S_50000_512M_V20260917_71`、`apiPullEnabled=true`、
`apiSchedulerScanIntervalMs=1000`,并确认
`deviceCollectId` 与设备 40 的 `DEVICE_DEVICE.DEVICE_COLLECT_ID` 一致。内网默认
`apiTlsVerifyEnabled=false`。
## 2. 配置微步 API 任务
真实 Key/Secret 已保存在 `weibu-40-credential.json`,该文件必须按生产密钥管理。
```bash
chmod 600 upgrade-doc/v6/api/weibu-40-credential.json
docker exec -i syslog-serve-dm curl -fsS -X POST \
'http://127.0.0.1:8189/syslogserve/api/api-pull-credentials' \
-H 'Content-Type: application/json' \
--data-binary '@-' \
< upgrade-doc/v6/api/weibu-40-credential.json
```
如果凭据已存在,不要重复创建。任务已存在时也直接复用。首次接入时,v6 目录已提供设备 40 的完整任务 JSON;执行前只把首次采集时间设为服务器当前时间减 2 分钟:
```bash
INITIAL_START_TIME=$(date -d '2 minutes ago' --iso-8601=seconds)
sed "s|__INITIAL_START_TIME__|${INITIAL_START_TIME}|" \
upgrade-doc/v6/api/weibu-40-task.json \
> /tmp/weibu-40-task.json
```
执行前检查生成结果:
```bash
cat /tmp/weibu-40-task.json
```
必须确认 `deviceId=40`、`baseUrl=https://10.56.171.164`,且 `initialStartTime` 已经是真实时间,不再包含 `__INITIAL_START_TIME__`。
同时确认本次常规任务使用默认的 `lookbackSeconds=0`。只有现场确有迟到日志补偿需求并完成容量评估后,
才显式配置正数;微步接口没有已确认的分页游标,正数回看可能增加单个时间窗口的数据量。
还必须确认 `windowSizeSeconds=5`、`pageSize=50000`、`maxPagesPerRun=1`、
`pollIntervalSeconds=1` 和 `maxResponseBytes=536870912`。50000 条按每条最大 10 KiB 估算约为
488 MiB,响应上限取整为 512 MiB;超限时任务失败且不推进 checkpoint,不会截断后伪装成功。
生产容器必须使用 `JAVA_TOOL_OPTIONS=-Xms8g -Xmx24g ...`,不得使用只有 `-Xmx1g` 的开发配置。
```bash
docker exec -i syslog-serve-dm curl -fsS -X POST \
'http://127.0.0.1:8189/syslogserve/api/api-pull-tasks' \
-H 'Content-Type: application/json' \
--data-binary '@-' \
< /tmp/weibu-40-task.json
```
记录返回的 `taskId` 和 `configVersion`。任务创建后默认暂停,先验证:
```bash
docker exec syslog-serve-dm curl -fsS -X POST \
'http://127.0.0.1:8189/syslogserve/api/api-pull-tasks/<TASK_ID>/validate' \
-H 'Content-Type: application/json' \
-d '{"configVersion":<CONFIG_VERSION>}'
```
所有检查为 `PASS` 后,先在管理系统中给设备 40 关联能解析微步单条 JSON 的泛化规则,然后恢复任务:
```bash
docker exec syslog-serve-dm curl -fsS -X POST \
'http://127.0.0.1:8189/syslogserve/api/api-pull-tasks/<TASK_ID>/resume' \
-H 'Content-Type: application/json' \
-d '{"configVersion":<CONFIG_VERSION>}'
```
## 3. 将设备 40 设为仅 API 采集
禁止直接改数据库,必须调用 API,让三层设备缓存同时失效。
```bash
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`。此后 `10.56.171.164` 的 TCP/UDP Syslog 被丢弃,API 任务继续运行。
## 4. 微步原始查询诊断
诊断接口复用任务中的设备地址、凭据、TLS 和超时配置,只把请求 JSON 原样发送给微步。
它不会写入 WAL/Kafka,不会推进 checkpoint,也不会在响应中返回 API Key、Secret 或签名 URL。
查询最近 5 秒,单次最多请求 50000 条:
```bash
TIME_TO=$(date +%s)
TIME_FROM=$((TIME_TO - 5))
docker exec syslog-serve-dm curl -fsS -X POST \
'http://127.0.0.1:8189/syslogserve/api/api-pull-tasks/21/diagnostics/weibu-query' \
-H 'Content-Type: application/json' \
-d "{\"time_from\":${TIME_FROM},\"time_to\":${TIME_TO},\"sql\":\"\",\"assets_group\":[],\"columns\":[],\"size\":50000}"
```
请求体不会限制微步字段,因此可以试验现场版本的页码和页大小字段。例如:
```bash
docker exec syslog-serve-dm curl -fsS -X POST \
'http://127.0.0.1:8189/syslogserve/api/api-pull-tasks/21/diagnostics/weibu-query' \
-H 'Content-Type: application/json' \
-d "{\"time_from\":${TIME_FROM},\"time_to\":${TIME_TO},\"sql\":\"\",\"assets_group\":[],\"columns\":[],\"page\":2,\"pageSize\":100,\"size\":100}"
```
微步当前文档只明确描述了查询条件,现场已有脚本确认 `size` 可用,但未确认真正的页码字段。
诊断接口会原样传递 `page`、`pageSize`、`cur_page`、`page_size` 等字段;应通过不同页返回的
`response.data.data` 和 `response.data.total` 判断设备是否接受,不能仅凭 HTTP 200 认定分页生效。
## 5. 验收
```bash
docker exec syslog-serve-dm curl -fsS \
'http://127.0.0.1:8189/syslogserve/api/api-pull-tasks/<TASK_ID>/runtime'
docker exec syslog-serve-dm curl -fsS \
'http://127.0.0.1:8189/syslogserve/api/api-pull-tasks/<TASK_ID>/runs?page=1&pageSize=5'
```
必须确认:
- `health=HEALTHY`,最新 `SCHEDULED` 为 `SUCCESS`,HTTP 状态为 200。
- checkpoint 持续推进;设备当时无日志时 `recordsFetched=0` 也是正常成功。
- Kafka 中每条消息是一条微步 JSON,下游按设备 40 关联的泛化规则标准化。
- 来自 `10.56.171.164` 的 Syslog 不进入 WAL/Kafka,其他默认 `BOTH` 设备不受影响。
## 6. 缓存清理
```bash
# syslog-serve:指定设备 / 全部设备
docker exec syslog-serve-dm curl -fsS -X DELETE \
'http://127.0.0.1:8189/syslogserve/api/devices/40/cache'
docker exec syslog-serve-dm curl -fsS -X DELETE \
'http://127.0.0.1:8189/syslogserve/api/devices/cache'
# syslog-consumer-rule:指定设备规则 / 全部规则
docker exec syslog-consumer-rule-dm curl -fsS -X DELETE \
'http://127.0.0.1:8289/xdrrule/api/syslog/normalization/cache/devices/40'
docker exec syslog-consumer-rule-dm curl -fsS -X DELETE \
'http://127.0.0.1:8289/xdrrule/api/syslog/normalization/cache'
```
规则缓存清理会通知所有正常订阅 Redis 消息的 `syslog-consumer-rule` 实例。不要使用旧的 `DELETE /api/cache/all`。
## 7. 快速回退
1. 暂停微步 API 任务。
2. 将设备改回 `BOTH`:
```bash
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":"BOTH"}'
```
3. 恢复原泛化规则关联和旧 JAR。不删除 `COLLECTION_MODE` 字段,不删除任务、凭据或 checkpoint。