【博客645】prometheus监控体系中的重要概念

Key Concepts in Monitoring Systems

Time Series

时间序列是按时间戳排序的一系列 (timestamp, value) 对。每个时间序列的对数可以是任意的——从一到数千亿。时间戳具有毫秒精度,而值是 64 位浮点数。每个时间序列都有一个名称。例如:

  • node_cpu_seconds_total — the total number of CPU seconds used
  • node_filesystem_free_bytes — free space on filesystem mount point
  • go_memstats_sys_bytes — the amount of memory used by Go app

此外,为了命名每个时间序列可以有任意数量的 label=”value” 标签。例如:

  • go_memstats_sys_bytes{instance=”foobar:1234",job=”node_exporter”}
  • prometheus_http_requests_total{handler=”/api/v1/query_range”}

每个时间序列都由其名称和一组标签唯一标识。例如,这些都是不同的时间序列:

  • temperature{city=”NY”}
  • temperature{city=”SF”}
  • temperature{city=”SF”, unit=”Celsius”}

Data Point or Sample

来自任何时间序列的每个(timestamp, value)对都称为数据点或样本。

High Cardinality

存储在 TSDB 中的unique time series 的数量称为cardinality。
“High cardinality” means high number of series. Prometheus tsdb 存储针对处理相对较少数量的时间序列进行了优化。
当大量时间序列存储在其中时,它可能开始工作缓慢或在摄取、查询或压缩期间使用大量 RAM、CPU 或磁盘 IO。 Prometheus 的高基数从几百万个时间序列开始

Active time series

如果 Prometheus 最近为它抓取了新数据,则时间序列被认为是活跃的。 Prometheus 提供了 prometheus_tsdb_head_series 指标,它显示了活动时间序列的数量。 Prometheus 在 RAM 中保存最近添加的活动时间序列样本,因此其 RAM 使用率在很大程度上取决于活动时间序列的数量。活动时间序列的数量通过流失率与基数相关联。

Churn rate

如果活动时间序列停止接收新样本,则活动时间序列将变为非活动状态。新的时间序列可以在标签值变化上替代旧的时间序列。例如,在 Kubernetes 中每次部署后,pod_name 标签值可能会针对大量时间序列发生变化。旧时间序列被新时间序列替代的速率称为流失率。显然,高流失率会增加基数。这可能会导致性能下降、高 RAM 使用率和内存不足错误(也称为 OOM)。

Prometheus 公开了 prometheus_tsdb_head_series_created_total 指标,可用于使用以下 PromQL 查询估算流失率:

rate(prometheus_tsdb_head_series_created_total[5m])

从 v2.10 开始,Prometheus 公开了每个目标的 scrape_series_added 指标,可用于确定高系列流失率的来源:

sum(sum_over_time(scrape_series_added[5m])) by (job)

Ingestion rate

摄取率是每秒放入 tsdb 存储的数据点数。

可以使用以下 PromQL 查询从 Prometheus 公开的 scrape_samples_scraped 指标计算摄取率:

sum_over_time(scrape_samples_scraped[5m]) / 300

此外,可以使用以下公式估算摄取率:

ingestion_rate = targets_count * metrics_per_target / scrape_interval
ingestion_rate = active_time_series / scrape_interval

Scrape interval

Prometheus 以配置的时间间隔抓取目标,称为抓取间隔。默认情况下,它为所有抓取目标设置1分钟的抓取间隔。它可以通过 Prometheus 配置中的 global->scrape_interval 选项覆盖。虽然可以为每个目标设置不同的抓取间隔,但不建议这样做。

较低的抓取间隔会导致更高的摄取率和更高的 Prometheus RAM 使用率,因为在将更多数据点刷新到磁盘之前必须将它们保存在 RAM 中。

Retention

Prometheus 提供 --storage.tsdb.retention.time 命令行标志,用于配置存储数据的生命周期。保留之外的数据将自动删除。默认情况下,保留配置为 15 天。磁盘上存储的数据量取决于保留时间——更高的保留时间意味着磁盘上的数据更多。

Prometheus 支持的最低保留时间为 2 小时 (2h)。在为 Prometheus 配置远程存储时,这种保留可能很有用。在这种情况下,Prometheus 同时将所有抓取的数据复制到本地存储和所有配置的远程存储后端。这意味着本地存储的保留可以是最小的,因为所有数据都已经复制到远程存储,并且远程存储可用于从 Grafana 和任何其他具有 Prometheus 查询 API 支持的客户端进行查询。

请注意,配置的保留时间必须涵盖警报和记录规则的时间范围。

Relabeling

Prometheus 支持重新标记,可用于操作每个指标的标签、过滤抓取目标和样本。这是一个相当复杂但非常强大的机制

你可能感兴趣的:(prometheus,linux)