簡體   English   中英

從Kubernetes中的Docker收集指標

[英]Collect metrics from dockers in Kubernetes

我使用Docker和Kubernetes。 我想從每個Docker收集特定於應用程序的指標。 有各種應用程序,每個應用程序都在一個或多個Docker中運行。 我想以JSON格式收集指標,以便對每種類型的指標進行進一步處理。

我試圖了解什么是最佳實踐(如果有的話)以及可以使用哪些工具實現我的目標。

目前,我正在研究幾種選擇,但看起來都不太好:

  1. 連接到kubectl,獲取pod列表,在每個pod上執行命令(exec),以使應用程序使用指標打印/發送JSON。 我不喜歡這個選項,因為它意味着我需要知道存在哪些Pod並訪問每個Pod,而擁有Kubernetes的全部目的是避免處理此問題。

  2. 我正在尋找Kubernetes API HTTP GET請求,該請求將允許我提取特定文件。 我找到的最接近的是GET /api/v1/namespaces/{namespace}/pods/{name}/log ,看來這不是我所需要的。 再一次,這迫使我按名稱提及每個流行音樂。

  3. 我考慮在Probe中使用ExecAction定期發送帶有指標的JSON。 這是一個hack(因為這不是Probe的目的),但是它消除了處理每個特定吊艙的需要

  4. 由於無法控制的原因,我無法使用Prometheus,但我想知道Prometheus如何收集指標。 也許我可以使用類似的方法?

任何可能的解決方案將不勝感激。

從架構的角度來看,這里有2個選項:

1) pull model :您的應用程序通過一種機制(例如,在不同端口上使用HTTP協議)公開指標數據,而外部工具則以一定的時間間隔抓取您的Pod(從k8s API獲取Pod地址); 例如,這就是普羅米修斯使用的模型。

2) push model :您的應用程序會主動將指標推送到外部服務器,最重要的是將時間序列數據庫(例如influxdb)與它最相關。

我認為,方案2是最容易實現的,因為:

  • 您無需處理k8s API即可發現Pod地址;
  • 您無需創建本地存儲層來存儲指標(因為它們在占用時被一個接一個地推送);

但是有一個缺點:您需要小心實現,這可能會導致API變慢,並且可能需要處理對指標服務器的異步調用。

這顯然是一個非常通用的答案,但我希望它可以為您指明正確的方向。

可惜你不能使用普羅米修斯,但這是在這個范圍內可以做的一個很好的線索。 舞會的工作如下:

1:假設您要抓取(收集)的指標與Prometheus可以訪問的一些http端點公開。

2:它連接到kubernetes api來執行發現端點以從中刮取指標(有一個配置,但是通常這意味着它必須能夠連接到API並列出服務/部署/吊艙並分析其注釋(因為他們具有有關指標終結點的信息)來組成從中抓取數據的場所列表

3:周期性地(15s,60s等)連接到端點並收集公開的指標。

而已。 剩下的就是存儲/后處理。 與kube相關的部分可能要做很多工作,因此最好使用已經存在的東西。

旁注:雖然這通常是基於拉的模型,但在某些情況下無法進行拉(例如php等短期腳本),這就是Prometheus pushgateway發揮作用的地方,它允許將度量推到Prometheus將要從中拉出的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM