Day 8:架设 Prometheus (0)

昨天简单介绍过 Prometheus 了,那麽今天我们就自己架一个来玩看看吧。尝试任何一个新工具的第一个步骤,就是找看看他有没有官方 image 可以用 (x)。目前 prometheus 在 docker hub 以及 quay 上面皆有 image repository,分别是 prom/prometheus 以及 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 应该可以看到如下画面。

设定 scrape targets

然而现在一定是没有数据的嘛,因为我们还没有叫 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 复刻 小画家 绘制矩形与圆角矩形

>>:  C# Lambda

D10 - 「数位×IN×OUT」

电子助教:「这个标题...我闻到了停刊的味道... (́⊙◞౪◟⊙‵)」 这个章节开始我们要建立「数...

最短路径问题 (8)

10.10 Thorup’s 无向非负整数权重 SSSP 演算法 今天来介绍 Thorup 在 19...

JavaScript型别、物件与纯值

JavaScript型别 前面有说过JavaScript是动态型别,也就是说在执行时,变数会依照赋予...

Day 08 - 那些在 component 里的 Props 与 State

如果有错误,欢迎留言指教~ Q_Q Stateful Component vs no-Statef...

24 让画面跟游戏联动

用 PubSub 更新游戏状态 现在我们要让玩家订阅游戏的状态 并让游戏在状态更新的时候,广播到双方...