Prometheus 入门

什么是 Prometheus ?

Prometheus 是一个系统监控和告警系统。它由 SoundCloud 在 2012 年开源,是继 Kubernetes 之后第二个加入云原生计算基金会(Cloud Native Computing Foundation)并毕业的项目。Prometheus 将所有指标数据存储为时间序列,即指标信息与其记录时的时间戳一起存储,可选的键值对(称为标签)也可以与指标一起存储。

什么是指标,为什么它很重要?

用外行人的话来说,指标是一种测量标准。我们想要测量什么取决于不同的应用程序。对于 Web 服务器,它可能是请求时间;对于数据库,它可能是 CPU 使用率或活动连接数等。

指标在理解您的应用程序为何以某种方式工作方面扮演着重要角色。如果您运行一个 Web 应用程序,有人走过来告诉您应用程序很慢,您需要一些信息来找出您的应用程序发生了什么。例如,当请求数量很高时,应用程序可能会变慢。如果您有请求计数指标,您可以找出原因并增加服务器数量来处理高负载。每当您为应用程序定义指标时,您都必须戴上侦探的帽子并问自己这个问题:如果我的应用程序出现任何问题,哪些信息对我进行调试会很重要?

Prometheus 的基本架构

Prometheus 设置的基本组件是

  • Prometheus 服务器(抓取并存储指标数据的服务器)。
  • 要抓取的目标,例如,一个暴露其指标的已埋点应用程序,或一个暴露另一个应用程序指标的导出器。
  • Alertmanager 根据预设规则发出告警。

(注意:除此之外,Prometheus 还有 push_gateway,这里没有介绍)。

Architecture

让我们以一个 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:000
11:01:001
11:02:003

(注意:此表仅为理解目的的表示。Prometheus 并不以这种精确格式存储值)

Prometheus 还有一个 API,允许查询已通过抓取存储的指标。这个 API 用于查询指标,在其上创建仪表盘/图表等。PromQL 用于查询这些指标。

在请求计数指标上创建的简单折线图将如下所示

Graph

可以抓取多个有用的指标来了解应用程序中正在发生什么,并在它们上面创建多个图表。将图表分组到一个仪表盘中,并用它来获取应用程序的概览。

告诉我如何做

让我们动手来设置 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 有标准的导出器可用于导出指标。接下来,我们将运行一个 node exporter,它是一个用于机器指标的导出器,并使用 Prometheus 抓取它。(下载 node metrics exporter。

在终端中运行 node exporter。

./node_exporter

Node exporter

接下来,将 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。

本页内容