iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
DevOps

時間序列資料庫探討 - Prometheus系列 第 18

Prometheus - 程式初始化和啓動流程

  • 分享至 

  • xImage
  •  

上篇提問

  • config 裡可設定的參數會影響哪些模組?重載 config 時會發生什麼事?
  • Prometheus Server 啟動時,各模組初始化順序是怎樣的?分別有哪些初始化工作?
  • Prometheus Server 的運行過程中,有哪些模組會產生 goroutine?
  • 各模組產生的 goroutine 遇到 timeout 或錯誤時,會如何處理?

本篇來回答 config 和初始化的問題。

初始化流程

由於 Prometheus Server 的模組彼此相依,所以在啓動時 main() 必須依序初始化。
https://ithelp.ithome.com.tw/upload/images/20241002/20154259AXmsR3GRIw.png

Prometheus Server 的整個 main 函數超過 1000 行,大部分是在設定參數和初始化模組,還有設定 log 和 registry。
初始化的順序如下:

  • 建立 api.Notifications 容器
  • 檢查 Config 檔案
  • 建立空的 localStorage 容器
  • 建立空的 scrapeManager 容器
  • 用 localStorage 和 scapeManager 建立 remoteStorage
  • 建立 fanoutStorage
  • 建立 notifier.Manager
  • 建立 discovery.Manger
  • 用 fanoutStorage 建立 scrape.Manger
  • /data 路徑設定,建立 promql.Engine
  • 用 promql.Engine、remoteStorage、notifier.Manager 建立 rule.Manager
  • 將建立好的 scrape.Manger 放入 scrapeManager 容器
  • 用所有容器建立 web.Handler
  • 啓動
    • Service Discovery
    • Rule Manager
    • Scrape Manager
    • Web Handler
    • 重載 Config Handler
    • 載入 Config
    • 啓動 Local Storage
    • 啓動 WAL
    • 啓動 WebHandler
    • 啓動 notifier.Manager

重載 config 時會發生什麼事?

以下幾種情況會重載 config:

  • 進程收到 SIGHUP 信號
  • http 收到 /api/v1/-/reload
  • autoReload 設定為 true,時每間隔 autoReloadInterval 會檢查一次 config 檔案有沒有變動。

重載時需觸發的函數都在 main.goreloaders 變數中。
包括 localStoage, remoteStorage, webHandler, scrapeManager, discoveryManager, notifierManager 都會執行對應的 ApplyConfig 函數。
ruleManagerqueryEngine 則取決於設定。


上一篇
Prometheus - 各模組的啓動和運行
下一篇
Prometheus - 各模組的 Goroutine 使用情形
系列文
時間序列資料庫探討 - Prometheus30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言