事件、隐私与输出
事件包含什么
逐记录事件附带 connection_id,用于关联本地原始数据文件;跨连接窗口不冒用首条连接身份。
每条事件包含 event_id、timestamp_ns、name、rule_id、rule_version、sensor_id、service、protocol、severity、message,以及规则声明的 fields。窗口事件可带窗口起止时间,端点事件可带进程元数据;跨进程窗口不会误用首条记录的进程身份。
生命周期事件额外带 alert_key、incident_id、alert_state:分别标识规则分组、一次事故、当前触发/恢复阶段。同一已提交事件重试时保持 event_id;接收方可据此去重。
默认脱敏
SQL、参数、URL 路径、请求响应正文及其他敏感内容可在内存中参与规则,但默认事件输出 [REDACTED]。认证密码和令牌不进入输出;原文开关不能恢复解析时已丢弃的认证内容。
必须保存审计原文时,按服务及输入字段显式授权,例如主配置片段:
{"privacy":{"raw_fields":{"billing":["db.statement"]}}}只开启必需字段,限制文件访问和保留量。内容审计有上限;truncated 表示裁剪,incomplete 表示采集或请求关联不完整。两者都不是业务成功的证据。
本地 NDJSON
{"file":{"enabled":true,"path":"/var/lib/netflowscout/events.ndjson","max_bytes":16777216,"keep":8}}每行一个 JSON,写入并 fsync 后确认。默认每文件 16 MiB、总共 8 个,keep 包含当前文件。达到保留上限后删除已投递的旧文件;不要让外部工具同时 copytruncate 活动文件。
Dataway
{"dataway":{"enabled":true,"url":"https://dataway.example.com","token_env":"NETFLOWSCOUT_DATAWAY_TOKEN"}}替换为真实基础地址,URL 不含 query、用户信息或 token。凭据放入 root 管理的 /etc/netflowscout/output.env,权限 0600,通过安装包单元的 EnvironmentFile 注入。不要把 token 写进 JSON、命令行或诊断包。
服务使用规范行协议向 POST /v1/write/logging 发送,批量最多 128 条 / 原始事件合计 1 MiB,超时 10 秒,不跟随重定向。失败退避重试;429/503 处理 Retry-After,400/401/403 至少等待 5 分钟。修正认证后可重启主服务立即重试。
2xx 是 HTTP 接受确认,不代表后端已索引或可检索。当前验收使用本地模拟接收端;生产日志检索仍需现场验证。
可靠性与满队列
至少一次保证从事件成功提交本地 WAL 后开始。 file 和 Dataway 独立确认,全部确认才回收;响应丢失可能重复。抓包、解析、规则输入或提交前的丢失不在该保证内。
队列满或磁盘写入失败时拒绝新事件并计数,保留已接受事件。关闭仍有待确认事件的输出端会拒绝启动;更改输出路径或 URL 会把尚未确认的事件投递到新目标。迁移前先检查并排空,不能删除 WAL 来解决积压。
本地历史筛选、进程/规则版本追溯与逐事件确认见接入与调查。