乐趣区

关于prometheus:prometheus-存储容量估算

指标:估算 Prometheus 在监控零碎中,采集指标的指标值时,所消耗的存储容量。

统计后果个别以每小时 / 每天耗费多少 GB 容量示意,以便于进行容量布局。

  1. PromQL 计算样本收集率
rate(prometheus_tsdb_head_samples_appended_total[1m])

# 后果:2076 个 /s

依据过来 1m 采集到的 tsdb 的样本数,计算每秒的样本率。

  1. PromQL 计算每个样本占用 bytes

1) 估算:Prometheus 的压缩算法 (dod&xor),每个样本大小 1~2bytes,激进依照 2bytes 计算;

2) 精算:

# 每个样本均匀占用的 bytes
rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1h]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[1h])
  1. 计算存储用量

由上述统计得悉,每秒入 TSDB 2076 个样本,每个样本 2bytes,能够统计出,1hour 的存储用量:

3600*2076*2 = 14,947,200 bytes = 15MB

也就是 2hour 存储用量大略 30MB。

到 prometheus 实例上查看一下理论用量:

/prometheus $ ls -alh
total 24K
drwxrwsrwx   17 root     2000        4.0K Feb 22 05:00 .
drwxr-xr-x    1 root     root          28 Feb  2 06:03 ..
drwxr-sr-x    3 1000     2000          68 Feb 21 05:00 01EZ1FAVT6VZ7GQ2RKNZRFK47Z
drwxr-sr-x    3 1000     2000          68 Feb 21 07:00 01EZ1P6K16BXJQJDFF008VKVZ1
drwxr-sr-x    3 1000     2000          68 Feb 21 09:00 01EZ1X2A9B41NMEPD0T8FH9YH2
drwxr-sr-x    3 1000     2000          68 Feb 21 11:00 01EZ23Y1HQQPJZJTGF4NPH944Y
drwxr-sr-x    3 1000     2000          68 Feb 21 13:00 01EZ2ASRS728MQ2TWXC2K6R3G6
drwxr-sr-x    3 1000     2000          68 Feb 21 15:00 01EZ2HNG2GSF4GD2JZ25FBJHS3
drwxr-sr-x    3 1000     2000          68 Feb 21 17:00 01EZ2RH7A3M9V3RPDHDN4T21FM
drwxr-sr-x    3 1000     2000          68 Feb 21 19:00 01EZ2ZCYJFNG3HYWF326NJKXE3
drwxr-sr-x    3 1000     2000          68 Feb 21 21:00 01EZ368NS93N04A6RHDBGFBKJQ
drwxr-sr-x    3 1000     2000          68 Feb 21 23:00 01EZ3D4D13YT2HG8QPR4WB1QK0
drwxr-sr-x    3 1000     2000          68 Feb 22 01:00 01EZ3M04943Q1WW6SGAGN9ZVWX
drwxr-sr-x    3 1000     2000          68 Feb 22 03:00 01EZ3TVVHKWDFKNN697DPFE7J6
drwxr-sr-x    3 1000     2000          68 Feb 22 05:00 01EZ41QJS6YM7SHX18RQHSTV8H
drwxr-sr-x    2 1000     2000          34 Feb 22 05:00 chunks_head
-rw-r--r--    1 1000     2000       19.5K Feb 22 06:58 queries.active
drwxr-sr-x    3 1000     2000          97 Feb 22 05:00 wal
/prometheus $

/prometheus $ du -sh 01EZ1FAVT6VZ7GQ2RKNZRFK47Z
25.5M   01EZ1FAVT6VZ7GQ2RKNZRFK47Z
/prometheus $
/prometheus $ du -sh 01EZ1P6K16BXJQJDFF008VKVZ1
25.4M   01EZ1P6K16BXJQJDFF008VKVZ1
/prometheus $

能够看到,2hour 的存储用量≈26MB,跟咱们之前的评估后果差不多。

附:如何通过 PromQL 查问指标个数?

1) 按指标名称,查每个__name__下的指标个数

# count by (__name__)({__name__=~".+"})

prometheus_target_scrapes_sample_out_of_bounds_total{}  2
prometheus_tsdb_wal_corruptions_total{}  2
......

# prometheus_target_scrapes_sample_out_of_bounds_total

prometheus_target_scrapes_sample_out_of_bounds_total{endpoint="web",instance="172.160.230.215:9090",job="prometheus-k8s",namespace="monitoring",pod="prometheus-k8s-0",service="prometheus-k8s"}    0
prometheus_target_scrapes_sample_out_of_bounds_total{endpoint="web",instance="172.160.230.226:9090",job="prometheus-k8s",namespace="monitoring",pod="prometheus-k8s-1",service="prometheus-k8s"}    0

能够看出,这里统计的指标数是辨别 tag 的。

2) 统计所有的指标个数

sum(count by (__name__)({__name__=~".+"}))

# 后果:59428 个 
退出移动版