今天來分享在建置完K8S後的基本工作之一 : 監控。
只要是任何會”運作”的物件(Object),不管平台、服務、軟體、硬體,為了要提供最高的可用性,就會需要透過大大小小的監控元件來幫助我們了解所有的狀態,以便在問題發生時能做到最快速的反應。
如果做的更好,甚至可以在問題還沒發生之前提早預料到接下來可能會發生什麼事,在問題未發生前就提早解決問題。本文針對在K8S平台上的監控方案Loki與大家分享一些基本概念。
一如往常,以下是本文將說明的部分:
過往在Kubernetes架構之下,通常會建立以ElasticSearch為主的EFK stack架構,但這個架構雖然功能完整,但對於一些規模較小的K8S cluster環境,如果使用了EFK stack反而會提高資源與管理上的複雜度,此時就可以選擇以Grafana Loki為主的另一種K8S監控方案。
相對於EFK,Loki也是從Prometheus方案所沿伸出來,並且也具備高可用性、水平擴展的功能,更重要的是相對於ElasticSearch,它不會去索引整個日誌的內容,而是為每個日誌提供一組標籤,如此一來就變的更輕量化、所需求的資源也就比傳統EFK stack來的更少。
Loki相對於其他的監控方案的不同如下:
所謂的PLG stack指的是以下三個專案的組合:
簡單來說,這三個元件是用以下圖方式運行:
針對這三個元件的功能分述如下:
由Promtail將日誌採集之後, 傳送至主元件(Loki),Loki則可用LogQL將查詢直接轉換成Prometheus metrics,使其在Grafana UI上呈現給使用者進行查詢操作。
有以下幾種常見的部署模式:
(1) Monolithic(All-in-One) : 所有的元件都在一個容器內運行,通常是測試與小規模。在一個Process內運行所有的元件。所有元件只透過Localhost進行元件之間的溝通(grpc),一般可以用Helm
來進行部署。(建議:每日不超過100GB適用)
(2) Simple scalable mode(Simple HA) : 部署在多個read/write的複本節點(建議:每日幾TB適用)
簡單說明:
push
流量導至write node,其他流量導至read node(Round robin)(3) Microservices : 每個元件都可以容器的方式獨立運行。(建議:適合非常大的規模),適合與Kubernetes部署一起使用,將元件全部拆開各自獨立運作。
目前如果要在正式環境下建置時,建議使用Simple scalable mode或是Microservices模式較佳。
原本我在建置完K8S平台後,通常是採用EFK stack,一步步將整個監控部署在整個平台上,但常常就是到最後花了很多心力進行相關的部署與調整工作,更別提最後還要建置出合適的Dashboard(儀表板)才算告一段落,同時也因為傳統的EFK架構所需資源較高,在規劃時就必須要針對EFK保留更多的系統資源。
Loki為基礎的PLG Stack方案提供給我另一個更好的選擇,我可以在測試環境以Standalone模式建置出整套系統,並且在正式環境下還可以有更具擴展性的方式可供選擇,對於管理人員來說除了部署相對簡單之外,更有幫助的是還具備了輕量、彈性的好處。
針對監控部分個人希望可以有更加深入的了解,在學習的過程中也將盡可能的分享給大家,敬請期待後續的分享。
請大家給我鼓勵,你的鼓勵可以讓我更有動力分享。
References: