iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
DevOps

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

Prometheus - 監控指標寫入流程

  • 分享至 

  • xImage
  •  

前篇提問

  • 常見的監控指標和 PromQL
  • Prometheus Server 的讀寫流程

本篇要來講述 Prometheus Server 的寫入流程。
先以「Http 上下游對應流量」為例,之後再說明其他寫入流程的異同。

Prometheus Client 使用

將 Http Client 加上 Prometheus Client 的中間件後,這個 Client 可以同時被不同 thread 使用。每個 thread 在發送** http 請求得到結果後**,會各自增加對應標籤的計數器值。lock 在標籤所對應的計數器上,所以不同標籤的計數器可以同時被增加。
除非是新的標籤組合,CounterVec 會用 mutex 確保同一時間只能產生一個新計數器。

Prometheus Server Scrape

Prometheus Server 在載入設定檔後,對於每個 job 都會開一個 goroutine 來定期抓取指標。每到抓取時間,http 發送到 Prometheus Client 的 /metrics 端口。這時 Prometheus Client 的 Registry 會利用有限的 goroutine,一一對所有的 Vec 呼叫 Collect,要求傳回所有的計數器值。這時 CounterVec 會用 mutex 確保沒有新的標籤組合,讀出所有不同標籤的計數器值(但並不阻止計數器增減),再將 mutex 釋放。
所有 VecCollect 都完成後,Registry 會將所有的指標值整理排序,變成 http response。

Prometheus Server Append

Prometheus Server 在收到 /metrics 的 http response 後,會將所有的指標值加入到抽象的 fanout storage 中,fanout storage 會把指標值分發給 local storage wal 和 remote storage。


上一篇
Prometheus - 監控指標舉例
下一篇
Prometheus - Storage 寫入流程
系列文
時間序列資料庫探討 - Prometheus30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言