
Prometheus 是一个开源的系统监控与告警工具包,最初由 SoundCloud 构建。自 2012 年诞生以来,许多公司和组织采用了 Prometheus,项目拥有非常活跃的开发者与用户社区。它现在是一个独立的开源项目,不依赖于任何公司维护。为了明确项目治理结构,Prometheus 于 2016 年加入云原生计算基金会(CNCF),成为继 Kubernetes 之后的第二个托管项目。
Prometheus 将指标收集并存储为时间序列数据,即指标信息会连同记录时的时间戳以及可选的键值对(称为标签)一起保存。
Prometheus 的主要特性包括:
指标通俗来说就是数值型测量值。时间序列指的是随时间记录变化的数据。不同应用需要测量的内容各不相同:Web 服务器可能关注请求耗时,数据库可能关注活跃连接数或活跃查询数等。
指标对于理解应用运行行为至关重要。例如,当 Web 应用变慢时,如果拥有请求数指标,就能判断是否是高请求量导致,从而决定扩容。
Prometheus 生态包含多个组件,其中许多是可选的:
大多数 Prometheus 组件使用 Go 语言编写,可轻松构建并部署为静态二进制文件。
下图展示了 Prometheus 及其部分生态组件的架构:
Prometheus 从埋点的作业抓取指标,对于短期任务则通过中间推送网关间接抓取。它把所有抓取到的样本存储在本地,并对数据运行规则,以聚合记录新时间序列或生成告警。Grafana 或其他 API 消费者可用于可视化收集的数据。
Prometheus 擅长记录任何纯数值型时间序列,既适合以机器为中心的监控,也适合高度动态的服务导向架构监控。在微服务世界,其对多维数据采集与查询的支持尤为突出。
Prometheus 以可靠性为设计核心,是故障期间快速诊断问题的系统。每个 Prometheus 服务器独立运行,不依赖网络存储或远程服务,即便基础设施其他部分故障也可信赖。
Prometheus 重视可靠性,即使在故障条件下也能查看系统可用统计信息。如果需要 100% 精确的数据,则不适合使用 Prometheus。