一千萬個為什麽

搜索

您如何監控在Docker容器內運行的Node Micro服務?



This article explains the trouble with monitoring, but it doesn't provide any good examples of how to actually monitor a microservice inside of the docker container.

目前我們正在使用PM2監控來監控我們的微服務,但是當我們將它們放入泊塢窗容器時,我們失去了在一個屏幕上訪問所有各自的微服務的能力。

Dockerswarm監控將告訴我們容器的狀態,但不是內部運行的微服務。

解決這個問題的可靠方法是什麽?

轉載註明原文: 您如何監控在Docker容器內運行的Node Micro服務?

一共有 2 個回答:

One commonly used solution(not container-specific) is to build a health check API within your service which tests all the functionality you want monitored (say availability of DBs and other dependencies) and the app itself, and returns some expected output (say < service >: < status >). You can then trigger alerts from a monitoring service like Nagios if this API does not return an ok for all the services. This will also fail if the microservice itself is unhealthy.

這種方法還可以運行服務的功能測試(通過點擊API端點)。

這種方法雖然不包括一些邊緣案例 - 例如。微服務運行(但特定的API失敗)。

這是Kubernetes具有正確模型的領域,所有應具有功能健康檢查的系統之間應該有負載平衡器。

一旦開始添加Nagios,Zabbix或其他類型的監控到系統中,您就開始構建一個大型狀態機。這將打破松耦合模型並引入相互依賴關系,從而抑制重構。雖然沒有成功,但微服務和其他SOA變體之間的關鍵區別在於這種松散耦合。

如果服務細化並執行單一功能,請在上遊負載平衡器上執行運行狀況檢查,然後監視活動池成員。

作為HAproxy的一個例子

backend myapp
[...]
option tcp-check
tcp-check send GET\ /health HTTP/1.0\r\n
tcp-check send Host:\ foo\r\n
tcp-check send \r\n
tcp-check expect rstring ^HTTP/1.1\ 200\ Ok
tcp-check expect string container\ Good
server srv1 10.0.0.1:8080 check
server srv2 10.0.0.2:8080 check

理論上你不關心實際容器的性能,只是你的整體性能很好。

這種方法可以讓系統自我修復並以最小的復雜度進行擴展。

基本上,你只需要檢查你所期望的系統數量是否還活著,如果沒有,你就可以再增加一些。如果您需要增加容量,只需更改預期節點的數量即可。

這也簡化了重構,因為您只需要復制或修改此測試而無需外部依賴關系或狀態機。

它還應該在系統自我修復時減少停機時間和夜間Pagerduty警報。

至於跟蹤延遲等問題所需的整個系統度量標準,我希望他們在使用彈性搜索等工具的中心位置。如果你使用系統日誌,logstash或者log4?收集長遠來說更加有用的指標。當系統規模小且簡單時,傳統的基於輪詢的監控可能會提供足夠的指標,但最好將它們設置為可搜索的格式,更重要的是與其他系統相關。

像monit這樣的解決方案仍然占據著自己的位置,但它是監控長期存在的組件,如虛擬機或托管您的群集的裸機,但容器本身應與該系統分離以從微服務模型中獲得最大收益。