SWE · VO System Design

Bloomberg 日志收集与可配置告警系统设计

VO 题目给日志收集和设置警报的方向;拆解摄取、索引、规则评估、通知和失败恢复,规模均作训练假设。

题目重点:VO 题目给日志收集和设置警报的方向;拆解摄取、索引、规则评估、通知和失败恢复,规模均作训练假设。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练版接收结构化/半结构化日志,按 tenant 与时间查询;告警规则可针对过滤条件的时间窗计数阈值。
  • 采集至少一次,允许日志重复到达,但告警和通知需幂等;实际 SLA/保留期需现场问。

解题路线

  1. 先问写入峰值、每条大小、保留期、搜索窗口和告警触发延迟,并计算原始写入与索引容量。
  2. Agent/SDK 批量发送到接入层,校验 tenant/schema,给日志稳定 ID;经持久队列分区后分别进入热索引、冷存和告警评估。
  3. 热检索按 tenant+时间分片,常用字段倒排/列索引;原始日志可压缩放对象存储,TTL 后分层删除。
  4. 规则存为版本化条件与时间窗;事件时间处理乱序和迟到,窗口状态持久化,达到阈值生成 alertId(rule,window,group) 防重复。
  5. 通知经过偏好/抑制/升级策略与重试队列;监控采集积压、丢失、告警延迟和误报率,队列故障后回放并对账。

手动走一遍

训练规则:某服务 5 分钟内 error≥100,按事件时间窗口聚合;同条日志重试一次不应计成两次,阈值触发后 Email 超时重试也只保留一个 alertId。若迟到日志改写已结束窗口,需定义更新或忽略策略。

规模与取舍

每日原始量约峰值每秒条数×平均字节×86400,副本与索引可成倍增加;题目没有数字,不能给固定集群规模。单条摄取近 O(1) 期望,查询代价依时间窗与索引选择。

易错点与追问

容易失分的边界

  • 直接从所有原始日志全扫计算每条告警。
  • 只谈检索,不谈告警状态与重复通知。
  • 把到达时间误当事件时间却要求准确迟到窗口。
  • 不做租户隔离和滥用限额。

继续深挖

  • 用户修改规则后旧窗口如何处理?
  • 采集端断网怎样防数据丢失?
  • 高基数字段告警怎样控成本?
  • 静默期与告警升级如何建模?
✓已复制微信号!