菜单
文档breadcrumb arrow Grafana 文档breadcrumb arrow 简介breadcrumb arrow 什么是 Prometheus?
Grafana Cloud Enterprise 开源

什么是 Prometheus?

可观测性侧重于根据系统生成的数据来理解其内部状态,这有助于判断您的基础设施是否健康。Prometheus 是系统监控和可观测性的核心技术,但“Prometheus”这个术语可能令人困惑,因为它在不同的上下文中被使用。了解 Prometheus 的基础知识、它为何对系统可观测性有价值以及用户在实践中如何使用它,将有助于您更好地理解它,并帮助您使用 Grafana。

Prometheus 于 2012 年在 SoundCloud 开始,因为现有的技术不足以满足其可观测性需求。Prometheus 提供了强大的数据模型和查询语言。Prometheus 也简单且可伸缩。2018 年,Prometheus 从 Cloud Native Computing Foundation (CNCF) 孵化阶段毕业,如今拥有一个繁荣的社区。

作为数据形式的 Prometheus

Grafana 仪表盘中的以下面板显示了 Mac 笔记本电脑使用了多少磁盘带宽。绿线代表磁盘 reads,黄线代表 writes

Disk I/O dashboard
磁盘 I/O 仪表盘

这类数据形成了时序数据。X 轴表示时间点,Y 轴表示数字或测量值;例如,每秒 5 兆字节。这种类型的时序数据出现在系统监控的各个方面,以及季节性温度图和股票价格等地方。这些数据只是通过一系列时间点进行的测量(例如公司股票价格或磁盘 I/O)。Prometheus 是一种收集和存储时序数据的技术。时序数据是 Prometheus 的基础;其数据模型包含

时间戳样本组成的指标,样本是数值,例如已读取的磁盘字节数或股票价格

  • 一组称为维度的标签,例如 jobdevice
  • 您可以将时序数据存储在任何关系数据库中,但是这些系统并非为存储和查询大量时序数据而开发。Prometheus 和类似软件提供了压缩和优化时序数据的工具。

使用 PromQL 的简单仪表盘

下面的 Grafana 仪表盘图片展示了从笔记本电脑获取的 Prometheus 原始数据的磁盘 I/O 图。

Metrics browser 字段包含以下查询

node_disk_written_bytes_total{job="integrations/macos-node", device!=""}

在这个示例中,Y 轴显示写入的总字节数,X 轴显示日期和时间。随着笔记本电脑运行,写入的字节数随时间增加。Metrics browser 下方是一个计数器,它统计随时间写入的字节数。

Metrics browser 和计数器

Metrics browser and counter
该查询是 PromQL(Prometheus 查询语言)的一个简单示例。该查询标识了感兴趣的指标(node_disk_written_bytes_total)并提供了两个标签(jobdevice)。标签选择器 job="integrations/macos-node" 用于过滤指标。它将指标范围缩小到来自 MacOS 集成作业的指标,并指定“device”标签不能为空。此查询的结果是图表显示的原始数值流。

尽管此视图提供了一些关于系统性能的洞察,但它并没有提供全貌。要更清晰地了解系统性能,需要理解显示写入数据变化速度的变化率。为了正确监控磁盘性能,您还需要查看活动中的峰值,这些峰值说明了系统何时处于负载下以及磁盘性能是否存在风险。PromQL 包含一个 rate() 函数,它显示了 5m(5 分钟)间隔内的每秒平均增长率。这个视图提供了对系统正在发生的事情更清晰的了解。

Prometheus rate 函数

Prometheus rate function
计数器指标只是一种类型的指标;它是一个只增加的数字(例如写入的总字节数)。Prometheus 支持其他几种类型,例如 gauge 指标类型,它可以增加或减少。

以下量规可视化显示了计算机上的总 RAM 使用情况。

量规可视化

Gauge visualization
第三种指标类型称为 histogram(直方图),它统计观测值并将其组织到可配置的组中。以下示例显示了按范围分组的浮点数,这些范围显示了每个值出现的频率。

直方图可视化

Histogram visualization
时序数据、指标、标签和聚合函数等核心概念是 Grafana 和可观测性的基础。

为什么这很有价值

软件和系统是一项复杂的工作。有时会出错。可观测性帮助您理解系统的状态,以便快速识别问题并主动解决。当问题确实发生时,您可以收到告警,以便在您的服务水平目标 (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 表示报告的堆大小(字节)。这里只有两个数字,因为这些数据显示的是数据被抓取那一刻的值。

端点示例

Endpoint example
“MyApp”指标在一个 HTTP 端点中可用,但它们如何到达 Grafana,并随后进入仪表盘呢?记录和传输应用或基础设施读数的过程称为遥测。遥测对可观测性至关重要,因为它可以帮助您准确了解基础设施中正在发生的情况。前面介绍的指标,例如 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 之间的中介工作。

整合在一起

Grafana Alloy
Grafana Alloy

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 基础知识
  • 此页面是否有帮助?