题目重点:VO 题目给日志收集和设置警报的方向;拆解摄取、索引、规则评估、通知和失败恢复,规模均作训练假设。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版接收结构化/半结构化日志,按 tenant 与时间查询;告警规则可针对过滤条件的时间窗计数阈值。
- 采集至少一次,允许日志重复到达,但告警和通知需幂等;实际 SLA/保留期需现场问。
解题路线
- 先问写入峰值、每条大小、保留期、搜索窗口和告警触发延迟,并计算原始写入与索引容量。
- Agent/SDK 批量发送到接入层,校验 tenant/schema,给日志稳定 ID;经持久队列分区后分别进入热索引、冷存和告警评估。
- 热检索按 tenant+时间分片,常用字段倒排/列索引;原始日志可压缩放对象存储,TTL 后分层删除。
- 规则存为版本化条件与时间窗;事件时间处理乱序和迟到,窗口状态持久化,达到阈值生成 alertId(rule,window,group) 防重复。
- 通知经过偏好/抑制/升级策略与重试队列;监控采集积压、丢失、告警延迟和误报率,队列故障后回放并对账。
手动走一遍
训练规则:某服务 5 分钟内 error≥100,按事件时间窗口聚合;同条日志重试一次不应计成两次,阈值触发后 Email 超时重试也只保留一个 alertId。若迟到日志改写已结束窗口,需定义更新或忽略策略。
规模与取舍
每日原始量约峰值每秒条数×平均字节×86400,副本与索引可成倍增加;题目没有数字,不能给固定集群规模。单条摄取近 O(1) 期望,查询代价依时间窗与索引选择。
易错点与追问
容易失分的边界
- 直接从所有原始日志全扫计算每条告警。
- 只谈检索,不谈告警状态与重复通知。
- 把到达时间误当事件时间却要求准确迟到窗口。
- 不做租户隔离和滥用限额。
继续深挖
- 用户修改规则后旧窗口如何处理?
- 采集端断网怎样防数据丢失?
- 高基数字段告警怎样控成本?
- 静默期与告警升级如何建模?
