跳到主要内容

认识

2024年06月17日
柏拉文
越努力,越幸运

一、认识


Prometheus 是一个开源的监控与告警系统,专为现代分布式系统和微服务架构设计。它最初由 SoundCloud 开发,并且现在已经成为 CNCF(云原生计算基金会)的一部分。Prometheus 的核心功能包括:

  • 数据采集:周期性从目标系统收集时序数据(如 CPU 使用率、内存占用、请求次数等)。

  • 数据存储:使用时序数据库(TSDB)存储这些数据。

  • 数据查询:提供强大的查询语言(PromQL)来查询和分析存储的数据。

  • 可视化:集成了与 Grafana 等工具兼容的可视化功能,能够生成仪表盘。

  • 告警管理:内置了告警规则,可以触发报警并与外部系统(如 Alertmanager)进行集成。

Prometheus 作为一个现代化的监控系统,能够通过拉取模型实时收集数据、使用高效的时序数据库存储数据,并且提供强大的查询与告警能力。其数据库的特点包括高效的压缩、列式存储和面向时序数据的优化,使其在处理大规模、长时间存储的监控数据时表现出色。

二、工作


Prometheus 的工作流程可以分为以下几个主要步骤:

  1. 数据采集(数据抓取)

  2. 数据存储

  3. 数据查询与分析

  4. 可视化与告警

2.1 数据采集

Prometheus 是一个 拉模式(Pull-based 监控系统, 使用 拉取(Pull 模型来收集监控数据。它会周期性地主动从目标应用中拉取数据,而不是像传统的推模式监控系统(Push-based)那样由目标主动将数据推送到监控系统。每个被监控的系统或服务暴露一个 HTTP 服务,提供一个特定的端点(通常是 /metrics``),Prometheus 就会通过 HTTP 请求获取该端点的数据。

  1. 这些端点返回的数据通常是以 Prometheus 格式(类似于 key-value 的文本格式)暴露的指标。

  2. 采集间隔通常为每隔 15 秒到 1 分钟。

  3. Prometheus 不依赖外部代理或者推送机制(虽然也可以通过 Pushgateway 等工具间接支持推送)。

  4. 通过周期性抓取,Prometheus 可以保持较高的数据完整性,避免由于目标系统自身的故障而导致的监控数据丢失。

Prometheus 支持多种数据抓取方式:

  • 静态配置:可以通过配置文件列出目标地址。

  • 服务发现:支持与各种服务发现机制(如 KubernetesConsulEC2)集成,动态获取目标。

2.2 数据存储

Prometheus 使用的是一种 时序数据库(TSDB。时序数据库非常适合于存储随时间变化的数据,在存储结构上与传统的关系型数据库有所不同。每次抓取到的指标都会被存储到 TSDB 中,指标数据按时间戳顺序排列。它的核心数据结构包括:

  • 时间序列:每个指标(如 cpu_usage)会有一个或多个时间序列,记录该指标在不同时间点的值。

  • 标签(Labels:每个时间序列可以通过多个标签来区分不同的实例,例如服务名称、地域、主机名等。

  • 时间戳(Timestamp:每个数据点都有一个时间戳,表示该值被采集的时刻。

Prometheus 数据库的存储特点

  • 高效存储与压缩Prometheus 使用了 TombstoneDelta Encoding 等技术来减少存储占用。对于相同值的时间序列数据,Prometheus 会采用压缩存储。

  • 自适应存储管理Prometheus 使用块(Block)来组织存储。每个块包含了特定时间范围内的所有数据,这些数据会根据设置的保留策略被清理或者压缩。

  • 查询优化:由于时序数据的特殊性,Prometheus 的查询引擎针对时序数据进行了优化,支持高效的时间窗口操作、聚合函数以及多维度的查询。

  • 高可扩展性:尽管 Prometheus 是一个单节点系统,但可以通过 联邦(Federation) 模式将多个 Prometheus 实例的数据聚合在一起,实现横向扩展。

  • 不可变数据:一旦数据被写入数据库,它是不可变的,这确保了数据的一致性和可靠性,避免了数据被修改或篡改的风险。

2.3 数据查询

Prometheus 提供了强大的查询语言 PromQL(Prometheus Query Language),用于从数据库中检索、聚合和处理时序数据。PromQL 允许用户执行复杂的查询,包括但不限于

  • 单一指标的查询

  • 多个指标的聚合操作(如求和、平均、最大值等)

  • 时间范围和时间函数的计算(如时间窗口、速率、延迟等)

例如,使用 PromQL 可以查询 CPU 使用率的变化趋势,计算每秒请求的数量,甚至进行跨服务的指标关联分析。

2.4 可视化与告警

可视化Prometheus 自带一些基础的 Web UI 来显示查询结果,但通常会与 Grafana 集成,后者提供了更加丰富和可定制的仪表盘来展示 Prometheus 的监控数据。

告警Prometheus 允许定义 告警规则,并通过集成的告警管理系统(如 Alertmanager``)来处理触发的告警。Alertmanager 会根据配置将告警通知通过电子邮件、SlackPagerDuty 等方式发出。