Tempo 3.1 預設 vParquet5,拒絕寫入 vParquet3
Grafana 官方部落格 · 2026-09-30
Grafana Tempo 3.1 把新 block 的預設格式改成 vParquet5,同時對仍設定寫入 vParquet3 的部署直接拒絕啟動,把先前宣告的棄用變成強制。這個版本也讓 tempo-cli redact 能用 TraceQL 查詢一次塗銷多條 trace,但搭配時間區間使用時有一個不可回復的升級陷阱。
原本的問題
Tempo 的 block 格式長期並存多個 vParquet 版本,升級時要自己確認設定。vParquet5 在 Tempo 2.10 只是 opt-in,所以許多叢集沒有動它,也就拿不到後續建立在它之上的查詢優化。
另一個痛點在隱私。trace 裡混進個資(例如某個 span attribute 洩漏了 PII)時,舊流程要先找出所有受影響的 trace ID,再逐一塗銷,人工列舉很容易漏。
核心改動
release notes 指出:Tempo 3.1 強制執行棄用,設定為寫入 vParquet3 時拒絕啟動。新 block 預設寫成 vParquet5,既有的 vParquet4 block 仍可讀取,不需要遷移。
vParquet5 預設化帶來 span-only fetch:對不需要完整 trace 結構的 metrics 查詢,只處理個別 span。官方部落格稱簡單查詢「close to twice as fast」,此路徑對 vParquet5 預設開啟,可依租戶或單一查詢關閉(PR #7179)。
塗銷方面,tempo-cli redact 現在接受 --query,並有 --dry-run 與 --start/--end(PR #7663、PR #7702)。查詢限單一 spanset filter,只能對 resource.* 與 span.* 屬性做等號比較,可用 &&、|| 組合。
| 項目 | 舊做法 | 3.1 |
|---|---|---|
| 塗銷範圍 | 逐一提供 trace ID | --query '{span.attribute = "<leaked_PII>"}' |
| 寫入格式 | 可設 vParquet3 | 設 vParquet3 則拒絕啟動 |
| 新 block 預設 | 需 opt-in vParquet5 | vParquet5 |
影響範圍
設定檔仍寫 vParquet3 的人,升級前必須先改成 vParquet5 或 vParquet4,否則 Tempo 起不來。
release notes 另外列出三個會改變行為的預設:
max_grpc_streaming_packet_size預設由 2 MiB 降為 1 MiB,依賴較大串流回應的用戶要明確設定。- trace-by-ID 查詢改用
blocks_per_shard(預設 30),取代固定的query_shards;要保留舊行為請設blocks_per_shard: 0。 - 實驗性的 Redis cache client 改寫:預設 Redis Cluster、移除 Sentinel、YAML key 更名;沒用 Redis 快取就不受影響。
最危險的是塗銷。只有在每個 scheduler 與 worker 都升到 3.1 之後,才能送出帶 --start/--end 的塗銷。官方說明舊版 worker 會忽略時間視窗,把所有符合查詢的資料都塗銷,造成無法回復的資料遺失。滾動升級期間,有人用 CI 或排程跑 tempo-cli redact 的團隊,要先確認叢集版本一致。
tempo-cli redact --query '{span.attribute = "<leaked_PII>"}' --start now-7d --dry-run這個指令是依官方部落格的參數組出的示意,先加 --dry-run 驗證比對範圍,再正式執行。release notes 未說明正式發布日期。
其他值得一提的新功能
Kafka client 新增 TLS 與 SCRAM-SHA-256、SCRAM-SHA-512、OAUTHBEARER、AWS_MSK_IAM(PR #7586),以及 producer_compression 選項,讓只接受 gzip 的 Azure Event Hubs 可用(PR #7691)。TraceQL metrics 則能在兩個查詢之間做 +、-、*、/,例如 ({ status = error } | rate()) / ({ } | rate()) 一條查詢就得到錯誤率(PR #6866)。