Plainnotes

高流量下,日志要不要采样

2024-12-09 · 3 分钟工具

每秒几千请求的服务,每个请求打两行 info 日志,一天就是几亿行。磁盘扛不住,grep 也扛不住。

采样的原则:**错误全留,正常按比例**。

if (level >= WARN || rand() % 100 == 0) { log(...) }

但随机采样会破坏“同一请求的日志能串起来”。更好的做法是按 request_id 哈希取模,保证同一个请求要么全记要么全不记;或者按时间窗口采样,整秒整分地开关。

还有一种常见需求是“慢请求全留”:

if (duration > 500ms || level >= WARN) { log(...) }

这比均匀采样有用得多——出问题时你要看的是异常样本,不是随机样本。