Skip to content

Observability関連のデータ圧縮技術

これおもしろかった。

Prometheusで採用した方法。メトリックのラベルで使われる文字列をinterningしてデータを圧縮する。

{
symbols: ["", "cluster", "foo-cluster", "job", "job1", "job2"]
metrics: [
{labels: [1,2,3,4]},
{labels: [1,2,3,5]}
]
}

Uberが採用した方法。ログを可逆圧縮したまま検索可能にする。

{
log_patterns: {1: "request finished in %[0]d ms"}
logs: [
{pattern_id: 1, variables: [101]},
{pattern_id: 1, variables: [202]}
]
}

トレースを圧縮する方法。

{
span_patterns: {
1: {path: "/a", host: "x.com"},
2: {sql: "select..", db: "postgres"}
},
trace_patterns: {
1: {
spans: [
{span_pattern_id: 1},
{span_pattern_id: 2}
]
}
},
traces: [
{trace_pattern_id: 1, variables: [{duration: 101}]},
{trace_pattern_id: 1, variables: [{duration: 202}]}
]
}