# Prometheus TSDB ## 定義 Prometheus に内蔵された時系列ストレージエンジン。時系列データを効率的に収集・圧縮・クエリするために設計されている。HEAD(インメモリ)とディスクブロックの 2 層構造をとる。 (Source: [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]]) ### ストレージ構造 ``` RAM: [HEAD (アクティブ時系列の最新チャンク)] Disk: [WAL] [M-map chunks] [Block 1] [Block 2] ... [Block N] ``` - **HEAD**: スクレイプされた最新データを保持するインメモリバッファ。デフォルト 2 時間分の保持後にディスクへ flush - **WAL (Write-Ahead Log)**: HEAD への書き込みを先行ログに記録してクラッシュ耐性を確保 - **M-map chunks**: HEAD の古いチャンクをメモリマップしてディスクに配置(メモリ節約) - **Block**: 一定期間のデータをイミュータブルなディレクトリ形式で保持 ### 時系列の識別 時系列 = ラベルセット(文字列のキーバリューペア集合)でユニークに識別される。 ``` http_requests_total{job="nginx", instance="1.2.3.4:80", status="200"} 28 ``` ラベルセットが 1 つでも異なれば別の時系列として記録される。これがシリーズチャーン問題の根本原因。 ### カウンタの累積セマンティクスとレプリカ分離 カウンタ型の値は増加のみ、または 0 へのリセットのみを許す累積値として保存される。ラベルセット(pod など)でレプリカごとに系列が分離されるのは、この累積セマンティクスと表裏一体である。累積値は状態を持つため、複数レプリカの値を単純合算すると reset を跨いだ際に破綻する。 ``` http_client_requests_total 10 14 (reset) 5 8 # 正しい delta: +10 +4 (reset) +5 +3 = 22 ``` (Source: [[@2026__RedditEng__Materialized Metrics in Prometheus]]) ## 横断的知見 - [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]] はラベルセットによる系列分離が HEAD のメモリ圧迫(失活系列の滞留)を引き起こす点を扱うのに対し、[[@2026__RedditEng__Materialized Metrics in Prometheus]] はラベルセットによる系列分離がカウンタの**合算不能性**(累積値は状態を持つため単純合算できない)を引き起こす点を扱う。同じ「ラベルセット=系列識別」という TSDB の基本モデルから、ストレージ側(メモリ)とクエリ側(集約)という2種類の異なる副作用が生じることが分かる(Source: [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]], [[@2026__RedditEng__Materialized Metrics in Prometheus]])。 ## 未解決の問い - HEAD flush を 2 時間に固定している設計上の理由・歴史的経緯は何か - [[VictoriaMetrics]] や [[Mimir]] との内部アーキテクチャの差異はどこにあるか - カウンタの累積セマンティクスを TSDB レベルで delta ネイティブに変更する設計(OpenTelemetry の delta temporality のような)は Prometheus 本体で検討されたことがあるか ## 関連 - [[Prometheus]] / [[Prometheusシリーズチャーン]] / [[マテリアライズドメトリクス]] - [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]] - [[@2026__RedditEng__Materialized Metrics in Prometheus]] ## 出典 - [[@2026__SREcon26Americas__Unlock High-Frequency Deployments without Blowing Up Prometheus]] - [[@2026__RedditEng__Materialized Metrics in Prometheus]]