- 深入理解Prometheus監控系統
- 鮑光亞 張帆
- 1377字
- 2024-12-16 17:00:35
1.1 Prometheus 0.1.0(首個版本)
Prometheus目前在GitHub上公開的首個版本為0.1.0版本,發布于2014年3月份前后。相較于首個長期支持版本(2.37版本),0.1.0版本的功能并不少,只不過每項功能要簡單得多,使用的數據庫也不是后來Prometheus開發者官方開發的TSDB,而是基于LevelDB的本地存儲開發的數據庫,同時0.1.0版本支持OpenTSDB作為遠程存儲。如果用一句話概括0.1.0版本,可以說是麻雀雖小,五臟俱全。
在模塊方面,0.1.0版本主要包含配置信息處理、采樣管理器、監控目標管理器、基于LevelDB的本地存儲、支持OpenTSDB的遠程存儲、告警規則管理器、轉錄規則管理器、通知器、Web API、Web 用戶界面和工具箱共11個模塊。上述模塊的實現分布在代碼文件目錄的不同文件夾中,如代碼清單1-1所示。相比于2.37版本,0.1.0版本缺少PromQL模塊,但是規則模塊(rules文件夾)中具有的數據查詢功能在后期獨立出來形成了PromQL模塊。
代碼清單1-1 Prometheus-0.1.0主要代碼文件目錄
. |-- coding # 底層模塊,提供時間戳的編碼和解碼功能 |-- config # 配置信息處理模塊,實現了配置信息的結構定義和解析,以及配置文件的加載等 |-- documentation # 配置文件及說明文檔 |-- main.go # 主程序文件 |-- model # ProtoBuf消息定義,定義了標簽和監控項等核心消息 |-- notification # 通知器模塊,僅支持以HTTP POST方式發送通知 |-- retrieval # 采樣管理器模塊和監控目標管理器模塊 |-- rules # 告警規則管理器模塊、轉錄規則管理器模塊,以及數據查詢功能 |-- stats # 計時器模塊(底層模塊,用于上層模塊的性能監控) |-- storage # 基于LevelDB的本地存儲模塊和支持OpenTSDB的遠程存儲模塊 |-- tools # 工具箱,包含數據導出、數據壓縮和規則檢查共3種工具,后發展為Promtool模塊 |-- utility # 底層數據結構模塊,包含LRU緩存、集合、列表、時間處理、字符串處理等 `-- web # Web API和Web UI用戶界面模塊
首個版本中各個模塊的功能尚不完善。配置信息處理模塊能夠實現對配置信息的加載,但是此時使用的配置文件為ProtoBuf格式,而非YAML格式,并且不支持運行時動態加載。在監控目標管理方面,0.1.0版本實現了采樣管理器模塊,該模塊可以從配置文件中加載監控目標數據以及從監控目標中采集樣本數據,相當于具有非常初級的監控目標自動發現功能和采樣過程管理功能。本地存儲模塊則是基于LevelDB的分級存儲,它先將數據寫入內存,然后每15 min進行一次持久化。由于數據模型的特殊性,本地存儲的這一實現方式在數據量較大的情況下容易遇到瓶頸。遠程存儲模塊實現了OpenTSDB客戶端,但是僅支持對OpenTSDB數據庫的遠程寫入,不能進行遠程讀取。告警規則管理器模塊和轉錄規則管理器模塊通過讀取本地存儲中的樣本數據進行計算并將計算結果寫入存儲或者生成告警。雖然該版本不具備獨立的PromQL模塊,但是告警規則管理器模塊和轉錄規則管理器模塊內部定義了一套通用的規則表達式句法來實現規則定義和數據查詢,這一句法后來演變為PromQL模塊的基礎,而句法本身也發生了很大變化。通知器模塊實現了發送警報消息的功能,但是只能通過HTTP的POST方法發送JSON格式的消息。Web API模塊實現了監控數據查詢功能,能夠對外提供數據查詢服務,同時實現了監控目標更新功能(此時還不具備主動發現監控目標的能力,只能被動地接收監控目標數據)。該版本的Web 用戶界面模塊主要利用Go語言的html/template包所提供的功能來實現,功能相對簡單。首個版本中的工具箱模塊包含3種工具,可以實現數據導出、數據壓縮和規則檢查,相較于后期發展出的Promtool工具,其功能要少得多。
在樣本類型方面,0.1.0版本僅支持Counter、Gauge和Summary這3種類型,并不支持Histogram類型。該版本支持的樣本數據格式只有ProtoBuf和JSON兩種,這意味著監控目標返回的樣本數據的格式須為這兩種格式之一。