← 中文资源

简体中文版本

构建结构化日志聚合器

NDJSON 摄取管道:多写方并发接入、生成列归一化级别、SQLite 索引存储与带过滤的尾部查询。

阅读英文原文

目标

构建经 HTTP 接收多服务 NDJSON 日志、持久化为可查询结构、并以级别/服务/时间过滤流式返回最新事件的日志聚合器。

要点

TCP 分块可能在行中落地,切分器必须缓存跨块的半行——测试在每个字节边界切分证明零丢失;severity 生成列把级别字符串变成可排序整数,WHERE severity >= 3 变成索引范围扫描;轮转在事务边界移动文件,写方零感知。 被拒行计数而非中断整批,单个坏生产者不阻塞其他服务,202 响应里的 rejected 计数让漂移可见。

提示

尾部查询按自增 id 倒序而非时间戳排序:更便宜且符合事件到达序。

验证

EXPLAIN QUERY PLAN 断言索引真被使用;轮转中途摄取的测试对账两个文件确认零丢失。 项目目录骨架:

log-aggregator/
├── src/
│   ├── server.js
│   ├── parser.js
│   ├── store.js
│   └── rotate.js
├── test/
│   ├── parser.test.js
│   └── api.test.js
├── package.json
└── README.md

实施阶段:NDJSON parser → Indexed storage → Ingest endpoint → Tail query and rotation。