Prometheus

56142
下载
Prometheus 是一个开源的监控和告警系统,专注于时间序列数据的采集与存储。由 SoundCloud 开发,配备高级查询语言PromQL,便于数据挖掘与分析,并无缝对接多种可视化平台。

开始使用 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:000
11:01:001
11:02:003

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

Prometheus 还有一个 API,允许查询存储的指标。这个 API 用于查询指标、创建图表等。可以 PromQL 查询这些指标。

在请求计数指标上创建的简单线性图表如下所示:

我们可以抓取多个有用的指标来了解应用程序发生了什么。通过在指标上创建多个图表,并将图表分组到仪表板中,我们就能够获取应用程序的整体概览。

动手试试

让我们开始亲手设置 Prometheus。Prometheus 使用 Go 编写,你只需要下载适用于你的操作系统的二进制文件即可。从这里下载相应的二进制文件,并将其添加到 PATH 中。

Prometheus 暴露了自己的指标,这些指标可以被自身或其他 Prometheus 服务器所消费。

现在安装好了 Prometheus,下一步便是使用二进制文件和配置文件启动它。Prometheus 使用 YAML 文件进行配置。

global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]

在上述配置文件中,我们指定了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

Terminal window
./node_exporter

接下来,在scrape_configs列表中添加node_exporter采集任务(job):

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。

该文档基于 Prometheus 官方文档翻译而成。


observability.cn Authors 2024 | Documentation Distributed under CC-BY-4.0
Copyright © 2017-2024, Alibaba. All rights reserved. Alibaba has registered trademarks and uses trademarks.
浙ICP备2021005855号-32