本章将介绍 Prometheus 的核心概念“指标”,以及基本机构(Prometheus Server、Exporter 和 Alert Manager),以及如何搜集数据,如何使用图标展示。
通俗地说,"指标" 就是衡量的标准。我们要衡量的标准因应用而异。对于网络服务器来说,可以是请求时间,对于数据库来说,可以是 CPU 使用率或活动连接数等。
衡量标准在了解应用程序以某种方式运行的原因方面发挥着重要作用。如果你运行一个网络应用程序,有人来找你说程序运行速度慢。你需要一些信息来找出应用程序发生了什么问题。例如,当请求数量较多时,应用程序可能会变慢。如果掌握了请求数指标,就能找出原因,并增加服务器数量来处理大负荷。
注意:在为应用程序定义指标时,需要提出这样一个问题“如果我的应用程序出现任何问题,哪些信息对我的调试非常重要?”。
通常情况下, Prometheus 由下面三个基本组件构成:
Prometheus Server:抓取和存储指标数据的服务器。
Exporter: 要抓取的目标,例如公开其指标数据的仪器应用程序,或公开其他应用程序指标数据的 Exporter。
Alart Manager: 根据预设规则发出警报的警报管理器。
注意:除此以外,Prometheus 还有 push_gateway,此处未涉及。
现在我们以网络服务器为例,我们希望提取某个指标,如网络服务器处理的 API 调用数。因此,我们使用 Prometheus 客户端库添加了一些仪器代码,并公开了指标信息。
既然网络服务器公开了其指标信息,我们就可以配置 Prometheus 对其进行抓取。现在,Prometheus 已被配置为在特定时间间隔(例如每分钟,控制 Prometheus 抓取指标的频率)从监听的 xyz IP 地址、端口为 7500 的网络服务器获取指标信息。
在 11:00:00 时,当我将服务器公开供用户使用时,应用程序会计算请求计数并将其公开,Prometheus 会同时清除计数指标并将该值存储为 0。
到 11:01:00 时,处理了一个请求。Prometheus Server 中的仪表逻辑将计数递增为 1。当 Prometheus 抓取指标时,计数的值现在是 1。
到 11:02:00 时,又处理了两个请求,现在请求数为 1+2 = 3。同样,指标也被抓取和存储。
时间戳 | 请求数 (指标数据) |
11:00:00 | 0 |
11:01:00 | 1 |
11:02:00 | 3 |
注意:上述表只是为了便于理解,Prometheus 并不以这种精确格式存储值。
Prometheus 还有一个 API,允许查询通过抓取存储的指标。该 API 可用于查询指标、创建仪表盘/图表等。在 Prometheus 中,PromQL 就是用于查询这些指标。
什么是 PromQL?
PromQL(Prometheus Query Language)是 Prometheus 内置的数据查询语言,用于对时间序列数据进行查询、聚合和逻辑运算。
当 Prometheus 通过 Exporter 采集到相应的监控指标样本数据后,可以通过 PromQL 对这些监控样本数据进行查询。PromQL 提供了丰富的查询和聚合功能,以及逻辑运算能力,使得用户能够灵活地分析和处理监控数据。
PromQL 的基本用法包括查询时间序列,范围查询,时间位移操作,使用聚合操作等。它支持标量和字符串,提供了合法的 PromQL 表达式,操作符,数学运算,集合运算符等。PromQL 还广泛应用于Prometheus 的日常应用中,包括数据查询、可视化、告警处理等。
根据请求计数指标创建的简单折线图如下所示:
用户可以抓取多个有用的指标来了解应用程序中发生的情况,并在这些指标上创建多个图表。将这些图表组合成一个仪表盘,用它来了解应用程序的概况。