- 默认在进入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
v5 现场设备原始日志采样
天眼/微步 JSON 异常的代码入口和现场开发排查顺序见
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。原始日志采集和多实例汇聚默认
均已启用;建议在所有实例显式保留以下配置,便于现场识别和后续调整:
- 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
如果多个 Java 进程运行在同一主机且没有不同的容器 HOSTNAME,应为每个实例配置不同标识:
- SYSLOG_RAW_CAPTURE_NODE_ID=consumer-rule-01
接口会返回完整原文,应只允许受信任的运维网络或现有管理网关访问。
一键采集
脚本依赖 bash、curl 和 python3。先增加执行权限:
chmod 700 /升级资料路径/v5/capture-device-raw-logs.sh
基本用法:
/升级资料路径/v5/capture-device-raw-logs.sh \
38 \
60 \
10 \
http://127.0.0.1:8289/xdrrule \
/data/haobang/raw-log-captures
参数依次是:
- 设备 ID;
- 采集秒数,默认 60,最大 600;
- 样本数,默认 10,最大 50;
syslog-consumer-rule基础地址,默认http://127.0.0.1:8289/xdrrule;- 本地输出目录,默认当前目录下的
raw-log-captures。
如果接口经过鉴权网关,可通过环境变量传入请求头:
RAW_CAPTURE_AUTH_HEADER='Authorization: Bearer 替换为现场令牌' \
./capture-device-raw-logs.sh 38 120 20 https://管理地址/xdrrule /data/raw-samples
输出文件
每次运行生成独立目录:
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,新生成文件默认只允许执行脚本的账号访问。
生命周期
状态依次为:
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 再查询:
curl 'http://127.0.0.1:8289/xdrrule/api/syslog/raw-captures/会话ID'