安装配置¶
下载 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: [email protected]
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 这个任务显示的绿色的 UP
状态,证明 Prometheus 已经正常抓取自身的监控指标了。
如果在抓取过程中出现任何问题(DNS 解析失败、连接超时等等错误),抓取目标都会显示为 DOWN
,同时还有一条错误消息,提供有关抓取失败的相关信息,可以帮助我们快速发现错误配置或不健康的目标。
例如,如果你将 Prometheus 配置在错误的端口上进行抓取(9091 而不是 9090),targets 目标页面将显示 connection refused
错误。
表达式查询¶
Prometheus 内置了用于 PromQL 查询的表达式查询界面,浏览器中导航至 http://<host-ip>:9090/graph
并选择 Table
视图即可:
Table
选项卡显示了表达式的每个输出序列的最新值,而 Graph
选项卡是绘制随时间变化的值,当然会在图形对于服务端和浏览器来说是比较耗性能的,所以一般情况都是先在 Table
下尝试查询可能比较耗时的表达式,然后将表达式的查询时间范围缩小,再切换到 Graph
下面进行图形绘制是一个更好的做法。
我们这里使用的最新版本的 2.26.0
版本,还对查询功能做了大幅度的升级,新增了一个非常实用的功能就是有查询关键字相关的提示了,我们只需要勾选上 Use experimental editor
选项,然后在查询的时候就会有提示了。
这里的提示功能不只是有指标名称,还有查询语句中使用到的查询函数,也包括这个函数的用法提示等信息,可以说这个功能非常实用。
比如我们这里可以查询下面的指标,表示自进程开始以来被摄入 Prometheus 本地存储中的样本总数:
prometheus_tsdb_head_samples_appended_total
然后可以使用下面的表达式了查询 1 分钟内平均每秒摄取的样本数:
rate(prometheus_tsdb_head_samples_appended_total[1m])
我们可以在 Table
和 Graph
视图下面切换查看表达式查询的结果。