Prometheus 入门

什么是 Prometheus?

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

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

通俗地说,指标是衡量的一种标准。我们想要衡量什么取决于具体的应用程序。对于 Web 服务器,它可能是请求时间;对于数据库,它可能是 CPU 使用率或活动连接数等。

指标在了解你的应用程序为何以某种方式运行方面起着重要作用。如果你运行一个 Web 应用程序,有人走过来对你说该程序很慢,你将需要一些信息来查明你的程序到底发生了什么。例如,当请求数量很高时,应用程序可能会变慢。如果你有请求计数指标,你就可以找出原因并增加服务器数量来处理沉重的负载。每当你为你的应用程序定义指标时,你都必须戴上侦探帽,并问这样一个问题:如果我的应用程序中出现任何问题,有哪些信息对我进行调试至关重要?

Prometheus 的基本架构

Prometheus 设置的基本组件包括

  • Prometheus Server(抓取并存储指标数据的服务器)。
  • 被抓取的目标,例如暴露其指标的已插桩应用程序,或者暴露另一个应用程序指标的 Exporter。
  • 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 端口,因此请将其添加到 targets 中。

prometheus --config.file=prometheus.yml

现在我们已经启动并运行了 Prometheus,并且它每隔 15 秒就会抓取一次自身的指标。Prometheus 提供了标准的 Exporter 来导出指标。接下来,我们将运行一个 node exporter(这是一个用于机器指标的 Exporter),并使用 Prometheus 抓取这些指标。(下载 Node 指标 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。

本页内容