Files
ai-security-xdr/haobang-security-dm/upgrade-doc/v5/README.md
T
王绍宏 faa9ffe2d9 feat(syslog): 优化WAL配置并在入站阶段丢弃无效设备日志
- 默认在进入WAL前丢弃未注册、重复或未分配到当前探针的Syslog日志
- 使用后台设备内存快照,避免Netty网络线程访问Redis或达梦
- 增加Terminal审计开关,允许恢复原有逐条审计文件模式
- 历史WAL中的无效设备记录直接推进checkpoint
- 增加无效设备丢弃、快照状态及刷新失败监控指标
- 生产WAL队列调整为20000条
- WAL待写预算和分段大小调整为2GiB
- 同步生产配置、Docker Compose及升级文档
- 增加无效设备前置过滤和Terminal开关测试

chore(syslog): 统一生产环境 WAL 挂载目录

- 将生产环境 WAL 默认目录调整为 /app/logs/syslog-wal
- Docker Compose 显式设置 SYSLOG_WAL_DIRECTORY
- WAL 与应用日志共用 /app/logs 宿主机挂载
- 移除旧的 /data/syslog-archive 独立挂载
- 宿主机 WAL 路径统一为 /home/syslog/logs/syslog-wal
2026-09-15 22:10:46 +08:00

143 lines
4.8 KiB
Markdown
Raw 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.
# v5 现场设备原始日志采样
天眼/微步 JSON 异常的代码入口和现场开发排查顺序见
[`02-json-format-error-debug-guide.md`](./02-json-format-error-debug-guide.md)。
## 功能说明
v5 为 `syslog-consumer-rule` 增加按设备短时采集原始日志的诊断接口,并提供自动落盘脚本。
- 单次采集最长 600 秒;
- 单次最多返回 50 条;
- 先保留采集窗口内最早的 N 条日志;
- 后续出现非标、规则执行异常、InfluxDB 写入异常、达梦写入异常或 Retry/DLT 时,用异常日志逐条替换最早的正常样本;
- 返回内容来自规则解析和非标字段截断之前,不受 `HB_XDR_TRUNCATED` 影响;
- 三个 `syslog-consumer-rule` 实例通过相同 Redis 汇聚有界候选集;
- 不新增数据库表,也不需要执行达梦 SQL。
## 升级与配置
滚动升级全部 `syslog-consumer-rule` 实例,并确保各实例连接同一个 Redis。原始日志采集和多实例汇聚默认
均已启用;建议在所有实例显式保留以下配置,便于现场识别和后续调整:
```yaml
- SYSLOG_RAW_CAPTURE_ENABLED=true
- SYSLOG_RAW_CAPTURE_CLUSTER_ENABLED=true
```
推荐保留默认配置:
```yaml
- SYSLOG_RAW_CAPTURE_MAX_ACTIVE_SESSIONS=20
- SYSLOG_RAW_CAPTURE_MAX_RETAINED_SESSIONS=100
- SYSLOG_RAW_CAPTURE_CLUSTER_ACTIVATION_DELAY_MS=1000
- SYSLOG_RAW_CAPTURE_CLUSTER_SYNC_INTERVAL_MS=200
- SYSLOG_RAW_CAPTURE_SETTLE_SECONDS=30
- SYSLOG_RAW_CAPTURE_RESULT_RETENTION_MINUTES=30
```
如果多个 Java 进程运行在同一主机且没有不同的容器 `HOSTNAME`,应为每个实例配置不同标识:
```yaml
- SYSLOG_RAW_CAPTURE_NODE_ID=consumer-rule-01
```
接口会返回完整原文,应只允许受信任的运维网络或现有管理网关访问。
## 一键采集
脚本依赖 `bash`、`curl` 和 `python3`。先增加执行权限:
```bash
chmod 700 /升级资料路径/v5/capture-device-raw-logs.sh
```
基本用法:
```bash
/升级资料路径/v5/capture-device-raw-logs.sh \
38 \
60 \
10 \
http://127.0.0.1:8289/xdrrule \
/data/haobang/raw-log-captures
```
参数依次是:
1. 设备 ID;
2. 采集秒数,默认 60,最大 600;
3. 样本数,默认 10,最大 50;
4. `syslog-consumer-rule` 基础地址,默认 `http://127.0.0.1:8289/xdrrule`;
5. 本地输出目录,默认当前目录下的 `raw-log-captures`。
如果接口经过鉴权网关,可通过环境变量传入请求头:
```bash
RAW_CAPTURE_AUTH_HEADER='Authorization: Bearer 替换为现场令牌' \
./capture-device-raw-logs.sh 38 120 20 https://管理地址/xdrrule /data/raw-samples
```
## 输出文件
每次运行生成独立目录:
```text
device-38_20260914-190000_会话ID/
├── start.json
├── latest.json
├── result.json
├── samples.jsonl
├── session-id.txt
├── summary.txt
└── raw/
├── 001_normal_事件ID.log
└── 002_anomaly_事件ID.log
```
- `result.json`:最终完整 API 响应,是最完整的交付文件;
- `samples.jsonl`:每行一条样本及其处理状态、异常原因和原文;
- `raw/*.log`:每条原始报文单独保存,内容不添加分隔符,也不主动截断;
- `summary.txt`:会话时间、收到的消息数、异常数和替换数;
- `latest.json`:脚本被中断或等待超时时保留的最后一次有效快照。
脚本设置 `umask 077`,新生成文件默认只允许执行脚本的账号访问。
## 生命周期
状态依次为:
```text
SCHEDULED -> RUNNING -> DRAINING -> COMPLETED
```
采集时间到达后不再接收新日志,随后默认等待 30 秒,让窗口内日志的异步处理异常完成替换。进入
`COMPLETED` 后结果默认继续保留 30 分钟,之后 Redis TTL 自动删除。
脚本会一直轮询到 `COMPLETED` 并自动导出,不需要人工再次查询。关闭终端或脚本等待超时不会使服务端会话
永久运行,会话仍按上述时间自动结束。
## 常见问题
### 返回 503:现场原始日志采样功能未启用
确认实例没有通过环境变量设置 `SYSLOG_RAW_CAPTURE_ENABLED=false`,并确认实例已经升级到 v5 JAR。
### 返回 503:跨实例原始日志采样暂不可用
检查所有 `syslog-consumer-rule` 实例到 Redis 的网络、密码、数据库编号是否一致。Redis 故障只影响诊断
采集,不会中断主 Kafka 消费。
### 返回 429
活动采集会话达到上限。等待已有会话进入 `COMPLETED`,或核对是否有人重复创建采集任务。
### 脚本退出码为 2
表示客户端等待超时,但已经把最后一次有效快照写入输出目录。服务端会话仍会自动结束,可在结果保留期内
使用 `session-id.txt` 中的 ID 再查询:
```bash
curl 'http://127.0.0.1:8289/xdrrule/api/syslog/raw-captures/会话ID'
```