A-speed

每个人都是🏆
  新随笔  :: 管理

TSDB

Posted on 2026-10-10 10:13  a-speed  阅读(3)  评论(0)    收藏  举报

一、TSDB 是什么

TSDB = Time Series Database(时间序列数据库),是 Prometheus 内置的、专门存 "某个指标在某个时间点的值" 的存储引擎。数据写在 /var/lib/prometheus/。

存的数据本质上是一长串 "指标 + 标签 + 时间戳 + 数值" 的四元组,例如你在 Grafana 看到的折线图,底层就是这种按时间排列的样本点:

pg_stat_database_numbackends{datname="postgres"} @ 09:00:00 = 3
pg_stat_database_numbackends{datname="postgres"} @ 09:00:05 = 3
pg_stat_database_numbackends{datname="postgres"} @ 09:00:10 = 4

关键特性:只增不改、按时间有序、数据一旦落盘基本不修改(只做压缩合并和过期删除)。

二、TSDB 的目录结构和数据如何组织

/var/lib/prometheus/
├── chunks_head/      ← 内存数据的临时落盘区
├── wal/              ← 预写日志(WAL),防止崩溃丢数据
├── queries.active    ← 正在执行的查询
└── <block 目录>/     ← 时间分块,每个块是一个时间段的完整数据
    ├── chunks/       ← 实际数据样本(压缩存储)
    ├── index/        ← 标签+指标名 索引,加速查询
    ├── meta.json     ← 块元信息(起止时间)
    └── tombstones    ← 已删除数据的墓碑标记

数据流是:抓取 → 先写内存 (head) → 同时写 WAL → 定期刷成 block → 后台压缩合并 → 超过保留期自动删除。

三、TSDB 如何维护(关键运维动作)

1. 保留期(最重要的)

默认只存 15 天,超时自动删除。用启动参数控制:

--storage.tsdb.retention.time=30d    # 保留30天

你当前 service 里没配,所以是默认 15 天。想长期存历史,这个必须改。

2. 压缩(Compact)

Prometheus 后台自动把多个小块合并成更大的块、压缩样本,减少空间。一般不用手动干预。

3. 磁盘空间

存储量 ≈ 指标数量 × 抓取频率 × 样本大小 × 保留天数。指标越多、抓越勤,占用越大。监控 /var/lib/prometheus 的磁盘使用。

4. 常见维护命令

# 看用了多少空间
du -sh /var/lib/prometheus
# 删除某个时间块(谨慎,会丢数据)
rm -rf /var/lib/prometheus/01M4HKZYK1HJ6G2W1SXRQ5Y3X6
# 配置了保留期后重载即可,无需停服

5. 磁盘不足时的处理

  • 优先:延长 retention 前先评估磁盘;
  • 清理:调短保留期 + 重启 Prometheus 让它删除旧块;
  • 不要直接删正在使用的 wal/ 或 chunks_head/(会导致崩溃或丢数据)。

TSDB 存储结构图

预览

查看代码

一句话总结

TSDB 就是 Prometheus 自带的 "指标仓库",把每次抓到的样本按时间存成块、自动压缩、到期清理。你要维护的核心只有两点:磁盘空间和保留期(默认 15 天)。

有的。TSDB 的管理主要有 Prometheus 自带的工具和第三方工具两类。

一、Prometheus 自带(最常用)

1. Prometheus Web UI(网页)

浏览器打开 http://192.168.56.132:9090:

  • Graph / Explore:可视化查询指标、画图(你查 pg 指标就用这个)
  • Status → Runtime & Build Info:看 TSDB 运行时状态
  • Status → TSDB Status:看块数量、样本数、压缩状态、WAL 大小等最直接的 TSDB 视图
  • Status → Targets:看采集目标健康(up/down)

2. HTTP API(命令行可调用)

# 查指标
curl 'http://127.0.0.1:9090/api/v1/query?query=pg_up'
# 查 TSDB 统计(块、样本、压缩等)
curl 'http://127.0.0.1:9090/api/v1/status/tsdb'
# 查所有运行时 flag(含 retention)
curl 'http://127.0.0.1:9090/api/v1/status/flags'

3. promtool(Prometheus 配套命令行工具)

服务器上 /usr/local/bin/prometheus 同目录一般有 promtool,用于本地检查 TSDB:

promtool tsdb list /var/lib/prometheus          # 列出所有块
promtool tsdb analyze /var/lib/prometheus       # 分析存储
promtool tsdb check /var/lib/prometheus         # 检查完整性
promtool tsdb compact /var/lib/prometheus       # 手动压缩

二、第三方工具

表格

工具 用途
Grafana 可视化查询 TSDB 数据(你已有),建 Dashboard 看趋势
Thanos / VictoriaMetrics 远程长期存储、跨节点汇聚(数据量大时用)
Remote Write 接收端 把 TSDB 数据同步到外部存储,便于长期保存

你的场景建议

你现在主要需要的是查看 TSDB 状态—— 最简单的是浏览器打开 http://192.168.56.132:9090/status/tsdb(Prometheus Web UI),能直接看到块、样本数、压缩情况。