概览

什么是 Prometheus?

Prometheus 是一个开源的系统监控和告警工具包,最初由 SoundCloud 构建。自 2012 年诞生以来,许多公司和组织都采用了 Prometheus,并且该项目拥有一个非常活跃的开发者和用户社区。现在它是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus 于 2016 年加入了 云原生计算基金会 (Cloud Native Computing Foundation),成为继 Kubernetes 之后的第二个托管项目。

Prometheus 收集并存储其指标作为时间序列数据,即指标信息与记录时的时间戳以及可选的键值对(称为标签)一起存储。

有关 Prometheus 更详细的概览,请参阅媒体部分链接的资源。

特性

Prometheus 的主要特性包括:

  • 一个多维数据模型,时间序列数据由指标名称和键值对标识
  • PromQL,一种灵活的查询语言,用于利用这种多维性
  • 不依赖分布式存储;单个服务器节点是独立的
  • 时间序列收集通过 HTTP 拉取模型进行
  • 通过中间网关支持推送时间序列
  • 通过服务发现或静态配置发现目标
  • 支持多种模式的图形和仪表盘

什么是指标?

通俗地说,指标是数值测量值。时间序列这个术语指的是随时间记录的变化。用户想要测量的内容因应用而异。对于 Web 服务器,可能是请求时间;对于数据库,可能是活动连接数或活动查询数,等等。

指标对于理解应用程序为何以某种方式工作至关重要。假设你正在运行一个 Web 应用程序,发现它运行缓慢。要了解应用程序发生了什么,你需要一些信息。例如,当请求数量很高时,应用程序可能会变慢。如果你有请求计数指标,就可以确定原因并增加服务器数量来处理负载。

组件

Prometheus 生态系统由多个组件组成,其中许多是可选的:

大多数 Prometheus 组件是用 Go 编写的,这使得它们易于构建和部署为静态二进制文件。

架构

下图展示了 Prometheus 的架构及其部分生态系统组件:

Prometheus architecture

Prometheus 从已经埋点的作业中抓取指标,可以直接抓取,也可以通过用于生命周期短的作业的中间 Pushgateway 进行。它将所有抓取的样本本地存储,并对此数据运行规则,以聚合和记录新的时间序列或生成告警。Grafana 或其他 API 消费者可以用来可视化收集到的数据。

何时适用?

Prometheus 非常适合记录任何纯数字的时间序列。它既适用于以机器为中心的监控,也适用于监控高度动态的服务导向架构。在微服务世界中,它对多维数据收集和查询的支持是一个特别的优势。

Prometheus 被设计为可靠的系统,以便在发生故障时使用它快速诊断问题。每个 Prometheus 服务器都是独立的,不依赖网络存储或其他远程服务。当基础设施的其他部分出现问题时,你可以依赖它,并且不需要搭建庞大的基础设施来使用它。

何时不适用?

Prometheus 注重可靠性。即使在故障条件下,你也可以始终查看有关系统的可用统计信息。如果你需要 100% 的准确性,例如用于按请求计费,Prometheus 不是一个好选择,因为收集的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析计费数据,而 Prometheus 用于其余的监控。

本文档是开源的。请通过提交 issues 或 pull requests 来帮助改进它。