Prometheus 是一个系统监控和告警系统。它于 2012 年由 SoundCloud 开源,是继 Kubernetes 之后第二个加入并毕业于云原生计算基金会的项目。Prometheus 将所有指标数据存储为时间序列,即指标信息与记录该指标的时间戳一起存储,可选的键值对(称为标签)也可以与指标一起存储。
通俗地说,指标是一种衡量标准。我们想要衡量的东西取决于不同的应用程序。对于 Web 服务器,它可以是请求时间,对于数据库,它可以是 CPU 使用率或活动连接数等。
指标在理解应用程序为何以某种方式工作方面起着重要作用。如果您运行一个 Web 应用程序,并且有人告诉您该应用程序很慢,您将需要一些信息来找出您的应用程序发生了什么。例如,当请求数量很高时,应用程序可能会变慢。如果您有请求计数指标,您可以找出原因并增加服务器数量以处理繁重的负载。每当您为您的应用程序定义指标时,您必须戴上侦探的帽子并问这个问题:如果我的应用程序中出现任何问题,哪些信息对我来说对于调试很重要?
Prometheus 设置的基本组件是
(注意:除此之外,Prometheus 还有一个 push_gateway,这里不涉及)。
让我们以一个 Web 服务器为例,我们想要提取某个指标,例如 Web 服务器处理的 API 调用次数。因此,我们使用 Prometheus 客户端库添加一些仪表化代码并公开指标信息。现在我们的 Web 服务器公开了其指标,我们可以配置 Prometheus 来抓取它。现在,Prometheus 配置为从在特定时间间隔(例如,每分钟)在 xyz IP 地址端口 7500 上侦听的 Web 服务器获取指标。
当我将服务器公开以供使用时,在 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 编写的,您只需要为您的操作系统编译的二进制文件。从 此处 下载与您的操作系统对应的二进制文件,并将该二进制文件添加到您的路径。
Prometheus 公开其自身的指标,这些指标可以由其自身或另一个 Prometheus 服务器使用。
现在我们已经安装了 Prometheus,下一步是运行它。我们只需要二进制文件和一个配置文件。Prometheus 使用 yaml 文件进行配置。
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
在上面的配置文件中,我们提到了 scrape_interval
,即我们希望 Prometheus 抓取指标的频率。我们添加了 scrape_configs
,其中包含一个名称和要从中抓取指标的目标。Prometheus 默认侦听端口 9090。因此将其添加到目标中。
prometheus --config.file=prometheus.yml
现在我们已经启动并运行了 Prometheus,并且每 15 秒抓取一次自身的指标。Prometheus 提供了标准的导出器来导出指标。接下来我们将运行一个节点导出器,它是用于机器指标的导出器,并使用 Prometheus 抓取相同的指标。(下载节点指标导出器。)
在终端中运行节点导出器。
./node_exporter
接下来,将节点导出器添加到 scrape_configs 列表中
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
- job_name: node_exporter
static_configs:
- targets: ["localhost:9100"]
在本教程中,我们讨论了什么是指标以及它们为什么重要,Prometheus 的基本架构以及如何运行 Prometheus。
本文档是 开源的。请通过提交问题或拉取请求来帮助改进它。