本篇來回答 config 和初始化的問題。
由於 Prometheus Server 的模組彼此相依,所以在啓動時 main() 必須依序初始化。
Prometheus Server 的整個 main 函數超過 1000 行,大部分是在設定參數和初始化模組,還有設定 log 和 registry。
初始化的順序如下:
/data 路徑設定,建立 promql.Engine以下幾種情況會重載 config:
/api/v1/-/reload
重載時需觸發的函數都在 main.go 的 reloaders 變數中。
包括 localStoage, remoteStorage, webHandler, scrapeManager, discoveryManager, notifierManager 都會執行對應的 ApplyConfig 函數。
而 ruleManager 和 queryEngine 則取決於設定。