什么是 Prometheus?
可观测性侧重于根据系统生成的数据来理解其内部状态,这有助于判断您的基础设施是否健康。Prometheus 是系统监控和可观测性的核心技术,但“Prometheus”这个术语可能令人困惑,因为它在不同的上下文中被使用。了解 Prometheus 的基础知识、它为何对系统可观测性有价值以及用户在实践中如何使用它,将有助于您更好地理解它,并帮助您使用 Grafana。
Prometheus 于 2012 年在 SoundCloud 开始,因为现有的技术不足以满足其可观测性需求。Prometheus 提供了强大的数据模型和查询语言。Prometheus 也简单且可伸缩。2018 年,Prometheus 从 Cloud Native Computing Foundation (CNCF) 孵化阶段毕业,如今拥有一个繁荣的社区。
作为数据形式的 Prometheus
Grafana 仪表盘中的以下面板显示了 Mac 笔记本电脑使用了多少磁盘带宽。绿线代表磁盘 reads
,黄线代表 writes
。

这类数据形成了时序数据。X 轴表示时间点,Y 轴表示数字或测量值;例如,每秒 5 兆字节。这种类型的时序数据出现在系统监控的各个方面,以及季节性温度图和股票价格等地方。这些数据只是通过一系列时间点进行的测量(例如公司股票价格或磁盘 I/O)。Prometheus 是一种收集和存储时序数据的技术。时序数据是 Prometheus 的基础;其数据模型包含
由时间戳和样本组成的指标,样本是数值,例如已读取的磁盘字节数或股票价格
- 一组称为维度的标签,例如
job
和device
- 您可以将时序数据存储在任何关系数据库中,但是这些系统并非为存储和查询大量时序数据而开发。Prometheus 和类似软件提供了压缩和优化时序数据的工具。
使用 PromQL 的简单仪表盘
下面的 Grafana 仪表盘图片展示了从笔记本电脑获取的 Prometheus 原始数据的磁盘 I/O 图。
Metrics browser 字段包含以下查询
node_disk_written_bytes_total{job="integrations/macos-node", device!=""}
在这个示例中,Y 轴显示写入的总字节数,X 轴显示日期和时间。随着笔记本电脑运行,写入的字节数随时间增加。Metrics browser 下方是一个计数器,它统计随时间写入的字节数。
Metrics browser 和计数器

node_disk_written_bytes_total
)并提供了两个标签(job
和 device
)。标签选择器 job="integrations/macos-node"
用于过滤指标。它将指标范围缩小到来自 MacOS 集成作业的指标,并指定“device”标签不能为空。此查询的结果是图表显示的原始数值流。尽管此视图提供了一些关于系统性能的洞察,但它并没有提供全貌。要更清晰地了解系统性能,需要理解显示写入数据变化速度的变化率。为了正确监控磁盘性能,您还需要查看活动中的峰值,这些峰值说明了系统何时处于负载下以及磁盘性能是否存在风险。PromQL 包含一个 rate() 函数,它显示了 5m
(5 分钟)间隔内的每秒平均增长率。这个视图提供了对系统正在发生的事情更清晰的了解。
Prometheus rate 函数

gauge
指标类型,它可以增加或减少。以下量规可视化显示了计算机上的总 RAM 使用情况。
量规可视化

histogram
(直方图),它统计观测值并将其组织到可配置的组中。以下示例显示了按范围分组的浮点数,这些范围显示了每个值出现的频率。直方图可视化

为什么这很有价值
软件和系统是一项复杂的工作。有时会出错。可观测性帮助您理解系统的状态,以便快速识别问题并主动解决。当问题确实发生时,您可以收到告警,以便在您的服务水平目标 (SLO) 范围内诊断和解决它们。
可观测性的三大支柱是指标、日志和链路追踪。Prometheus 支持指标支柱。当计算机上的软件运行缓慢时,可观测性可以帮助您识别 CPU 是否饱和、系统内存不足,或者磁盘是否以最大速度写入,以便您能够主动响应。
作为软件形式的 Prometheus
Prometheus 不仅仅是一种数据格式;它也被视为一个开源系统监控和告警工具包。这是因为 Prometheus 是软件,而不仅仅是数据。
Prometheus 可以从软件和基础设施中抓取(scrape)指标数据并存储它。抓取意味着 Prometheus 软件会定期重新访问同一个端点以检查新数据。Prometheus 从使用了客户端库的软件中抓取数据。
例如,一个 NodeJS 应用可以配置 prom-client 以便在端点轻松暴露指标,Prometheus 可以定期抓取该端点。Prometheus 在工具包中还包含许多其他工具来为您的应用埋点(instrument)。
作为部署形式的 Prometheus
本文档的第一部分介绍了作为数据形式的 Prometheus 概念以及 Prometheus 数据模型和指标的组织方式。第二部分介绍了作为软件形式的 Prometheus 概念,它用于收集、处理和存储指标。本节描述了作为数据形式的 Prometheus 和作为软件形式的 Prometheus 如何结合起来。
考虑以下示例。假设一个名为“MyApp”的应用使用 Prometheus 客户端来暴露指标。收集指标数据的一种方法是在应用中使用指向 https://:3000/metrics
端点的 URL,该端点生成 Prometheus 指标数据。
下图显示了与该端点关联的两个指标。HELP 文本解释了指标的含义,TYPE 文本指出了指标的类型(在本例中是 gauge)。MyAppnodejs_active_request_total
表示请求数(在本例中是 1
)。MyAppnodejs_heap_size_total_bytes
表示报告的堆大小(字节)。这里只有两个数字,因为这些数据显示的是数据被抓取那一刻的值。
端点示例

MyAppnodejs_active_requests_total
,就是遥测数据。要将指标导入 Grafana,您可以使用 Prometheus 软件或 Grafana Alloy 来抓取指标。Grafana Alloy 收集遥测数据并将其转发到 Grafana Stack 的开源部署、Grafana Cloud 或 Grafana Enterprise,您可以在这些地方分析数据。例如,您可以配置 Grafana Alloy 每五秒从“MyApp”拉取数据,并将结果发送到 Grafana Cloud。
指标数据只是遥测数据的一种类型;其他类型是日志和链路追踪。使用 Grafana Alloy 是发送遥测数据的一个绝佳选择,因为当您将可观测性实践扩展到包括日志和链路追踪(Grafana Alloy 也支持)时,您已经拥有了一个现成的解决方案。
下图说明了 Grafana Alloy 如何作为“MyApp”和 Grafana Cloud 之间的中介工作。
整合在一起

Prometheus 和 Grafana Alloy 的结合使您可以控制要报告的指标、它们的来源以及去向。一旦数据进入 Grafana,就可以存储在 Grafana Mimir 数据库中。Grafana 仪表盘由从 Prometheus 数据源查询的数据填充的可视化组成。PromQL 查询过滤和聚合数据,为您提供所需的洞察。通过这些步骤,我们已经将软件生成的原始数字导入 Prometheus,传输到 Grafana,通过 PromQL 查询,并由 Grafana 可视化出来。
下一步是什么?
既然您已经了解了 Prometheus 指标的工作原理,接下来您会构建什么呢?
一个不错的下一步是在 Grafana 中构建一个仪表盘,并开始将原始的 Prometheus 遥测数据转化为关于您的服务和基础设施状态的洞察。
- 另一个不错的步骤是了解 Grafana Mimir,它本质上是 Prometheus 数据的数据库。如果您想知道如何处理大量数据和快速查询的大规模指标,请查阅 Grafana Mimir。
- 如果您有兴趣直接在 Grafana 中使用 Prometheus 数据,请查阅 Prometheus 数据源文档,或查阅 PromQL 基础知识。
- 此页面是否有帮助?