昨天简单介绍过 Prometheus 了,那麽今天我们就自己架一个来玩看看吧。尝试任何一个新工具的第一个步骤,就是找看看他有没有官方 image 可以用 (x)。目前 prometheus 在 docker hub 以及 quay 上面皆有 image repository,分别是 prom/prometheus
以及 prometheus/prometheus
,在使用上需要注意名称的不同,但两边版本应该是一致的。
既然确定有 image 了,那麽下一步就是要来写 docker compose 的 config 啦,参考官方文件,生出来的 config 如下:
version: "3.8"
services:
prometheus:
image: prom/prometheus:v2.30.0
volumes:
- ./prometheus/config:/etc/prometheus
- ./prometheus/data:/prometheus
ports:
- 9090:9090
networks:
default:
name: normal-oj_default
external: true
这边我的做法是把希望把监控相关的服务都存放在同一个 repository 下面,所以我让 Prometheus 的 volume 都放在 prometheus/
这个资料夹底下,另外虽然官方文件没有提到 DB 路径,不过根据官方的 Dockerfile,它会存在 container 的 /prometheus
底下。
网路设定的部分,因为有需要直接跟服务连线,所以要跟其他 container 挂在同一个 bridge network 底下,也就是这边的 normal-oj_default
。
在开始服务之前还需要先建立 Prometheus 用的 config,从专案的根目录来看会是下面这样的结构,prometheus.yml
先留空就行,稍後会再设定,然而需要注意的是,prometheus/data/
的 owner 需要改成 nobody:nogroup
(命令是 sudo chown -R nobody:nogroup prometheus/data
),这样 Prometheus 才有权限写入,不然的话,使用 docker 的 managed volume 而不要选择 bind mount 也是个选项,关於两者的差异可以参考 docker 的官方文件。
prometheus/
├── config
│ └── prometheus.yml
└── data
处理好设定之後,执行 docker-compose up -d
应该就可以把 Prometheus 的 server 跑起来了,连上 http://localhost:9090
应该可以看到如下画面。
然而现在一定是没有数据的嘛,因为我们还没有叫 Prometheus 去爬取任何资料,因此下个步骤是需要设定 prometheus.yml
,关於详细的设定,可以参阅官方文件,後面我只会主要介绍用到的几个参数而已,但 Prometheus 本身有非常丰富的选项。
要让 Prometheus 去爬取 metrics,主要需要设定的就是 scrape_configs,因为 Prometheus 本身就有自带 metrics 了,所以我们就先从它下手吧。写出来的 config 长得会像这样:
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
简单讲解一下这几个设定的意义,scrape_configs
底下会是由 scrape_config
组成的阵列,每个 scrape_config
里面需要设定一个唯一的 job_name
,这会用来自动帮爬取到的指标们上标签,基本上可以把它当作一个独特的 id 来用,可以参考官方文件的说明。
在 job_name
隔壁,static_configs
是一个由 static_config
物件组成的阵列,它们代表的是一些实际爬取的目标(使用 targets
阵列设定),并且会共享一些共用的标签(使用 labels
)。
写好之後,下 docker compose restart
重开服务,等个一阵子再打开网页输入 prometheus 应该可以看到如下图所示的结果,我们已经成功的把一些 metrics 记录下来了。
如果有设定多个 job 爬取同样的 metrics 的话,可以看到查询出来的结果会有 job 分类。
今天本来想顺便把 exporter 跟 Alertmanager 的设定,不过开学之後果然时间就变得比较少了呢,看来得挪到明天再来写这些部份了,希望不会被分成太多篇。
<<: Day 7 - 用 canvas 复刻 小画家 绘制矩形与圆角矩形
电子助教:「这个标题...我闻到了停刊的味道... (́⊙◞౪◟⊙‵)」 这个章节开始我们要建立「数...
10.10 Thorup’s 无向非负整数权重 SSSP 演算法 今天来介绍 Thorup 在 19...
JavaScript型别 前面有说过JavaScript是动态型别,也就是说在执行时,变数会依照赋予...
如果有错误,欢迎留言指教~ Q_Q Stateful Component vs no-Statef...
用 PubSub 更新游戏状态 现在我们要让玩家订阅游戏的状态 并让游戏在状态更新的时候,广播到双方...