iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
DevOps

這個 site 就是遜啦 - SRE 30 天登大人之旅系列 第 8

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:Prometheus
下一篇
Day 9:架設 Prometheus (1)
系列文
這個 site 就是遜啦 - SRE 30 天登大人之旅30

尚未有邦友留言

立即登入留言