开始使用 Prometheus
Prometheus 是什么?
Prometheus 是一个监控和告警系统。它由 SoundCloud 在2012年开源,并成为云原生计算基金会(Cloud Native Computing Foundation,CNCF)成立后的第二个项目,紧随 Kubernetes 之后。Prometheus 将所有指标数据存储为时间序列,即,指标信息会与记录时的时间戳一起存储。Prometheus 还可以存储一些可选的关键值对,这被称为标签。
为什么指标很重要?
从普通人的角度来看,指标是一种衡量标准。我们想要测量的内容取决于应用程序的不同。对于Web服务器来说,可能是请求时间;而对于数据库来说,这可能是 CPU 使用率或活动连接数等。
指标在理解应用程序为何以某种方式运行方面扮演着重要角色。如果你在运行一个 Web 应用程序,有人向你抱怨应用变慢了。你需要一些额外的信息来找出应用程序发生了什么问题。例如,当请求数量高时,应用程序可能会变慢。如果你有请求计数的指标,你就可以快速找到原因并增加服务器的数量来处理大量负载。每当为你的应用程序定义指标时,你需要认真思考,并问一下自己:如果我的应用程序出现问题,我需要哪些额外的信息来进行调试呢?
Prometheus 的基本架构
Prometheus 的基本组件包括:
- Prometheus 服务器(负责抓取和存储指标数据的服务器)。
- 被抓取的 Target(抓取目标),例如带有暴露指标信息的应用程序,或者暴露其他应用程序指标的 Exporter。
- Alertmanager,根据预设规则触发告警。
(注:除了这一点,Prometheus 还有 push_gateway 功能,本指南未涉及)。
让我们拿 Web 服务器举例:假设我们想要提取某个特定的指标,如 Web 服务器处理的 API 调用数量。我们可以使用 Prometheus 客户端库添加某些仪表化(instrumenting)代码进而暴露出这个指标。现在,我们的 Web 服务器开始暴露其指标,我们可以配置 Prometheus 来抓取这些指标。Prometheus 被配置为每隔一段时间(例如1分钟)从 xyz IP 的 Web 服务器上的7500端口获取一次指标。
在11:00:00时,当我使服务器公开使用时,应用程序计算请求计数并将其作为指标暴露出来,同时 Prometheus 抓取计数指标并将值存储为0。
到11:01:00时,服务器已经处理了一个请求。服务器中的仪表化逻辑将计数递增为1。当 Prometheus 抓取该指标时,计数的值现在是1。
到11:02:00时,又处理了两个请求,请求计数变为1+2=3。同样,指标被抓取并存储。
用户可以通过 Prometheus 控制抓取频率。
时间戳 | 请求计数(指标) |
---|---|
11:00:00 | 0 |
11:01:00 | 1 |
11:02:00 | 3 |
(注:此表格仅用于理解目的。Prometheus 并不以这种方式精确存储值)
Prometheus 还有一个 API,允许查询存储的指标。这个 API 用于查询指标、创建图表等。可以 PromQL 查询这些指标。
在请求计数指标上创建的简单线性图表如下所示:
我们可以抓取多个有用的指标来了解应用程序发生了什么。通过在指标上创建多个图表,并将图表分组到仪表板中,我们就能够获取应用程序的整体概览。
动手试试
让我们开始亲手设置 Prometheus。Prometheus 使用 Go 编写,你只需要下载适用于你的操作系统的二进制文件即可。从这里下载相应的二进制文件,并将其添加到 PATH 中。
Prometheus 暴露了自己的指标,这些指标可以被自身或其他 Prometheus 服务器所消费。
现在安装好了 Prometheus,下一步便是使用二进制文件和配置文件启动它。Prometheus 使用 YAML 文件进行配置。
在上述配置文件中,我们指定了scrape_interval
,即我们希望 Prometheus 隔多久抓取一次指标。另外,我们添加了scrape_configs
,其中包含名称和抓取指标的 Target。Prometheus 默认监听端口9090导出自监控指标,我们也将它自身添加到 Target 中。
prometheus —config.file=prometheus.yml
现在 Prometheus 已经启动成功并运行,它每15秒抓取自己的指标。Prometheus 提供了标准的 Exporter(指标导出器)来导出指标。接下来我们将运行 Node Exporter(这是一个针对主机指标的 Exporter),并使用 Prometheus 抓取相同的数据(下载 Node Exporter)。
在终端中运行 node_exporter
。
接下来,在scrape_configs
列表中添加node_exporter
采集任务(job):
在这个教程中,我们简单讨论了什么是指标以及为什么它们很重要、Prometheus 的基本架构以及如何运行 Prometheus。
该文档基于 Prometheus 官方文档翻译而成。