深色模式
日志采样与降成本
高并发服务每秒产生海量日志,全量采集既贵又难查。采样(按比例丢弃)能大幅降本,同时保留足够的排障样本。本文用 Vector 配置采样。
适用环境
bash
# 确认已部署采集管道(以 Vector 为例)
vector --version
curl -s http://localhost:9001/metrics >/dev/null && echo "metrics ok"1
2
3
2
3
操作步骤
1. 按固定比例采样(如保留 10%)
toml
[transforms.sample]
type = "sample"
inputs = ["parse"]
rate = 10 # 每 10 条保留 1 条1
2
3
4
2
3
4
2. 关键日志不采样(100% 保留 error)
toml
[transforms.route]
type = "route"
inputs = ["parse"]
routes = [
{ name = "keep", query = '.level == "error"' },
{ name = "rest", query = '.level != "error"' },
]
[transforms.sample_normal]
type = "sample"
inputs = ["route.rest"]
rate = 20 # 普通日志保留 5%
[transforms.passthrough]
type = "noop"
inputs = ["route.keep"]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WARNING
采样会丢失细节。建议对 error/warn 全保留,只采 info/debug;并保留每条采样日志的 sample_rate 字段,便于估算真实量。
验证
bash
# 观察采样后事件数是否下降
curl -s http://localhost:9001/metrics | grep -E 'vector_events_(in|out)'1
2
2
常见坑
DANGER
在应用层用随机数采样再输出,会丢失「同一请求全部日志」,排障时上下文断裂。优先在采集端做按请求/按 trace 的采样。
WARNING
Loki 场景降成本更推荐「按标签降采样 + 长周期降精度」,直接丢事件会破坏审计完整性。