跳转至

安装配置

下载 Prometheus

前面我们提到了 Prometheus 是采用 Go 语言开发的,直接使用独立的二进制文件即可部署。下面我们就在我们的 CentOS 机器上来下载 Prometheus。

首先为我们的课程创建一个工作目录:

☸ ➜ mkdir $HOME/p8strain

切换到该目录下去:

☸ ➜ cd $HOME/p8strain

在 Prometheus 官网 https://prometheus.io/download/#prometheus 获取适用于 Linux 的 Prometheus 安装包,这里我们选择最新的 2.30.2 版本,我们这里是 Linux 系统,所以选择下载 prometheus-2.30.2.linux-amd64.tar.gz,其他系统请自行选择。

☸ ➜ wget https://github.com/prometheus/prometheus/releases/download/v2.30.2/prometheus-2.30.2.linux-amd64.tar.gz
# 如果被限制可以使用下面的加速地址下载
# wget https://download.fastgit.org/prometheus/prometheus/releases/download/v2.30.2/prometheus-2.30.2.linux-amd64.tar.gz

解压压缩包:

☸ ➜ tar -xvf prometheus-2.30.2.linux-amd64.tar.gz

切换到解压缩后的目录,执行 prometheus --version 命令查看是否正常:

☸ ➜ cd prometheus-2.30.1.linux-amd64
☸ ➜ ./prometheus --version
prometheus, version 2.30.2 (branch: HEAD, revision: b30db03f35651888e34ac101a06e25d27d15b476)
  build user:       root@80d1e84a93dd
  build date:       20211001-12:26:58
  go version:       go1.17.1
  platform:         linux/amd64

配置 Prometheus

前文我们已经下载完成了 Prometheus,接下来在启动之前我们需要为其创建一个配置文件。

Prometheus 通过抓取监控目标上的 HTTP 端点来收集指标,而且 Prometheus 本身也暴露 metrics 指标接口,所以自然它也可以抓取并监控其自身的运行状况,下面我们就用收集自身的数据为例进行配置说明。

将以下 Prometheus 配置保存为 prometheus.yml 文件(覆盖现有示例的 prometheus.yml 文件):

global:
  scrape_interval: 5s # 抓取频率

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

上面配置了 Prometheus 每 5s 从自身抓取指标。global 区域用于配置一些全局配置和默认值,scrape_configs 部分是用来告诉 Prometheus 要抓取哪些目标的。

在我们这里使用 static_configs 属性手动列举了抓取的目标(以 <host>:<port> 格式),不过一般生产环境配置使用一个或多个服务发现来发现目标,完整的配置可以参考官方文档 https://prometheus.io/docs/prometheus/latest/configuration/configuration/,后续我们也会不断接触相关的配置。

注意:5 秒钟的抓取间隔是非常激进的,但对于我们这里的演示目的来说还是非常有用的,因为我们希望可以快速获得数据。在实际情况下,间隔通常在 10 到 60 秒之间。

启动

现在我们使用新创建的配置文件启动 Prometheus:

☸ ➜ ./prometheus

默认情况下,Prometheus 将其数据库存储在 ./data目录中(可以使用 --storage.tsdb.path 标志进行配置),并从文件 prometheus.yml(使用 --config.file 配置)中读取其配置。

注意:通过配置文件提供的任何设置都可以在运行时(通过发送 HUP 信号)重新加载,而通过标志设置的任何变更都需要重新启动服务器才能生效。

正常情况下 Prometheus 会启动并在 http://<host-ip>:9090/ 上显示相关状态信息,几秒钟过后会从其自身的 HTTP 指标端点收集关于自己的数据,我们也可以直接在浏览器中访问它的指标端点来验证 Prometheus 是否正在提供关于自己的指标:http://<host-ip>:9090/metrics

查看监控目标

当启动 Prometheus 后,我们可以检查下它是否正确的抓取了配置的目标,可以在浏览器中访问 http://<host-ip>:9090/targets 来查看所有的抓取目标列表:

Prometheus 抓取目标列表

如果我们配置的抓取本身的 prometheus 这个任务显示的绿色的 UP 状态,证明 Prometheus 已经正常抓取自身的监控指标了。

如果在抓取过程中出现任何问题(DNS 解析失败、连接超时等等错误),抓取目标都会显示为 DOWN,同时还有一条错误消息,提供有关抓取失败的相关信息,可以帮助我们快速发现错误配置或不健康的目标。

例如,如果你将 Prometheus 配置在错误的端口上进行抓取(9091 而不是 9090),targets 目标页面将显示 connection refused 错误。

Prometheus 抓取错误示例

表达式查询

Prometheus 内置了用于 PromQL 查询的表达式查询界面,浏览器中导航至 http://<host-ip>:9090/graph 并选择 Table 视图即可:

Prometheus 查询和图形界面

Table 选项卡显示了表达式的每个输出序列的最新值,而 Graph 选项卡是绘制随时间变化的值,当然会在图形对于服务端和浏览器来说是比较耗性能的,所以一般情况都是先在 Table 下尝试查询可能比较耗时的表达式,然后将表达式的查询时间范围缩小,再切换到 Graph 下面进行图形绘制是一个更好的做法。

我们这里使用的最新版本的 2.26.0 版本,还对查询功能做了大幅度的升级,新增了一个非常实用的功能就是有查询关键字相关的提示了,我们只需要勾选上 Use experimental editor 选项,然后在查询的时候就会有提示了。

Prometheus 查询提示

这里的提示功能不只是有指标名称,还有查询语句中使用到的查询函数,也包括这个函数的用法提示等信息,可以说这个功能非常实用。

比如我们这里可以查询下面的指标,表示自进程开始以来被摄入 Prometheus 本地存储中的样本总数:

prometheus_tsdb_head_samples_appended_total

prometheus_tsdb_head_samples_appended_total

然后可以使用下面的表达式了查询 1 分钟内平均每秒摄取的样本数:

rate(prometheus_tsdb_head_samples_appended_total[1m])

prometheus_tsdb_head_samples_appended_total rate

我们可以在 TableGraph 视图下面切换查看表达式查询的结果。