Files
ai-security-xdr/haobang-security-dm/upgrade-doc/v2/config/syslog-consumer-rule.env.example
T
王绍宏 1c07acc01d feat(syslog-consumer-rule): 增加多节点原始日志采集并修复天眼/微步JSON规则匹配
一、增加现场原始日志采集功能

1. 新增按设备采集原始日志的API:
   - 指定设备ID;
   - 采集时长最长10分钟;
   - 单次最多返回50条样本。

2. 样本选择策略:
   - 优先保留时间窗口内最早到达的N条日志;
   - 后续出现JSON解析异常、非标、规则执行异常、InfluxDB/达梦写入异常或Retry/DLT时,
     使用异常日志逐条替换最早的正常样本;
   - 异常样本同样遵循先到先得。

3. 支持三个syslog-consumer-rule实例联合采集:
   - 采集请求只需发送到任意一个实例;
   - 三个实例通过公共Redis同步采集任务并汇总候选样本;
   - 不需要配置其他实例IP;
   - Redis只保存有界候选集,不保存时间窗口内的全部日志。

4. 生命周期和资源控制:
   - 采集到期后自动停止接收新日志;
   - 默认进入30秒DRAINING阶段,等待异步处理异常完成样本替换;
   - 最终结果默认保留30分钟,之后自动删除;
   - 单实例、单会话最多保留“前N条+前N条异常”;
   - Redis故障不阻断Kafka主消费链路。

5. 返回规则解析和非标表截断之前的完整原始报文,不受
   HB_XDR_TRUNCATED字段截断影响。

6. 原始日志采集和多实例汇聚默认启用:
   SYSLOG_RAW_CAPTURE_ENABLED=true
   SYSLOG_RAW_CAPTURE_CLUSTER_ENABLED=true

二、修复天眼/微步JSON规则匹配问题

1. JSON规则配置了cropper时,先判断原始报文是否包含对应head_key;
   不匹配的规则不再将当前报文误判为非法JSON。

2. 同一设备绑定多条规则时,单条不适用或解析失败的JSON规则不再立即终止整个规则链,
   程序会继续匹配后续适用规则。

3. 只有全部适用JSON规则均解析失败、且没有其他规则成功处理时,才写入
   “JSON解析异常”非标记录。

4. 对cropper截取后仍包含Syslog或设备前缀的内容,在JSON专用路径中重新收敛到
   第一个“{”至最后一个“}”,确保交给Jackson的是完整外层JSON。

5. 修复以下现场场景:
   - 天眼规则129截取结果仍带有alarm前缀;
   - 微步设备同时绑定固定偏移规则和Threatbook/TDP JSON规则;
   - 不适用的固定偏移规则抢先产生JSON解析异常;
   - Syslog头加JSON正文不能继续匹配后续适用规则。

三、增加现场采集工具及运维说明

新增upgrade-doc/v5:
   - README.md:升级、配置、生命周期和故障排查说明;
   - capture-device-raw-logs.sh:一键创建采集会话、等待完成并自动落盘。

脚本输出:
   - result.json:完整采集结果;
   - samples.jsonl:每行一条样本及处理状态;
   - raw/*.log:每条未截断原始报文;
   - summary.txt:采集数量、异常数量和替换数量;
   - latest.json:中断或超时时的最后有效快照。

四、兼容性与升级范围

- 兼容JDK 8;
- 无需新增或修改达梦数据库表;
- 无需创建新的Kafka Topic;
- 需要滚动升级全部syslog-consumer-rule实例;
- 三个实例必须连接相同的Redis;
- 本次提交不包含syslog-serve的高内存、WAL或JVM参数调整。
2026-09-14 23:11:45 +08:00

41 lines
1.8 KiB
Bash

# 新消息写 V2;升级期间同时读取 V1/V2,避免切换窗口丢失旧点。
INFLUXDB_RAW_WRITE_SCHEMA=V2
INFLUXDB_RAW_READ_MODE=V1_V2
INFLUXDB_RAW_V1_BUCKET=yelangbucket
INFLUXDB_RAW_V2_BUCKET=yelangbucket_v2
INFLUXDB_RAW_UUID_BUCKET_COUNT=4096
INFLUXDB_RAW_LEGACY_POINT_TIME_FALLBACK_ENABLED=true
INFLUXDB_RAW_QUERY_MAX_ROWS=10000
# 标准化告警和迟到事实通知在同一个达梦事务中提交。
ANALYSIS_LATE_REPLAY_OUTBOX_ENABLED=true
# 同设备多条泛化规则只选择一个确定性胜出规则。
NORMALIZATION_RULE_SELECTION_ENABLED=true
NORMALIZATION_RULE_SELECTION_SHADOW_ENABLED=true
NORMALIZATION_RULE_SELECTION_AMBIGUOUS_FALLBACK=LOWEST_RULE_ID
NORMALIZATION_RULE_SELECTION_DETAIL_LOG_ENABLED=false
NORMALIZATION_RULE_SELECTION_EXPLICIT_ENABLED=true
NORMALIZATION_RULE_SELECTION_AUTOMATIC_FALLBACK_ENABLED=true
# 现场原始日志短时采样;三个消费实例通过同一个 Redis 汇聚候选结果。
SYSLOG_RAW_CAPTURE_ENABLED=true
SYSLOG_RAW_CAPTURE_CLUSTER_ENABLED=true
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
# 统计投影解耦:三个 syslog-consumer-rule 实例保持完全相同的 Topic 与 Group ID。
STATS_MATERIALIZATION_ENABLED=true
STATS_MATERIALIZATION_TOPIC=agent-01-syslog-topic.STATS.MATERIALIZE
STATS_MATERIALIZATION_GROUP_ID=agent-01-syslog-group-stats-materialize
STATS_MATERIALIZATION_LISTENER_CONCURRENCY=1
STATS_MATERIALIZATION_PUBLISH_INTERVAL_MS=200
STATS_MATERIALIZATION_PUBLISH_MAX_BATCH_SIZE=1000
STATS_MATERIALIZATION_MAX_CONCURRENCY_RETRIES=3
STATS_MATERIALIZATION_CONCURRENCY_RETRY_BACKOFF_MS=50
STATS_MATERIALIZATION_RECONCILE_INTERVAL_MS=60000