K8S監控之路:探索Loki監控方案(基礎篇)

閱讀時間約 4 分鐘

今天來分享在建置完K8S後的基本工作之一 : 監控。

只要是任何會”運作”的物件(Object),不管平台、服務、軟體、硬體,為了要提供最高的可用性,就會需要透過大大小小的監控元件來幫助我們了解所有的狀態,以便在問題發生時能做到最快速的反應。

raw-image

如果做的更好,甚至可以在問題還沒發生之前提早預料到接下來可能會發生什麼事,在問題未發生前就提早解決問題。本文針對在K8S平台上的監控方案Loki與大家分享一些基本概念。

一如往常,以下是本文將說明的部分:

  1. Loki的基本概念
  2. PLG stack
  3. 部署模式
  4. 結論
  5. 結論

1.Loki 的基本概念

Grafana Loki

Grafana Loki

過往在Kubernetes架構之下,通常會建立以ElasticSearch為主的EFK stack架構,但這個架構雖然功能完整,但對於一些規模較小的K8S cluster環境,如果使用了EFK stack反而會提高資源與管理上的複雜度,此時就可以選擇以Grafana Loki為主的另一種K8S監控方案。

相對於EFK,Loki也是從Prometheus方案所沿伸出來,並且也具備高可用性、水平擴展的功能,更重要的是相對於ElasticSearch,它不會去索引整個日誌的內容,而是為每個日誌提供一組標籤,如此一來就變的更輕量化、所需求的資源也就比傳統EFK stack來的更少。

Loki相對於其他的監控方案的不同如下:

  • 不會去索引整個日誌的內容,將已壓縮後的非結構化日誌進行儲存並只對metadata做索引,因此運行更輕量也更便宜
  • 使用原本在Prometheus就在使用的index、label,實現無縫轉移
  • 特別適合儲存K8S Pod log
  • Grafana v6.0之後原生支援

2.PLG stack

所謂的PLG stack指的是以下三個專案的組合:

  • P : Promtail
  • L : Loki
  • G : Grafana

簡單來說,這三個元件是用以下圖方式運行:

raw-image

針對這三個元件的功能分述如下:

  • Promtail : 等同於EFK的”Filebeat/Fluentd”,負責採集Log然後發送至Loki.
  • Loki : 等同於ElasticSearch,用來儲存Logs與處理查詢
  • Grafana : UI 介面

由Promtail將日誌採集之後, 傳送至主元件(Loki),Loki則可用LogQL將查詢直接轉換成Prometheus metrics,使其在Grafana UI上呈現給使用者進行查詢操作。


3. 部署模式

有以下幾種常見的部署模式:

(1) Monolithic(All-in-One) : 所有的元件都在一個容器內運行,通常是測試與小規模。在一個Process內運行所有的元件。所有元件只透過Localhost進行元件之間的溝通(grpc),一般可以用Helm來進行部署。(建議:每日不超過100GB適用)

(2) Simple scalable mode(Simple HA) : 部署在多個read/write的複本節點(建議:每日幾TB適用)

raw-image

簡單說明:

  • Read node : 如上圖”Read Path”,負責回應Log查詢
  • Write node : 如上圖”Write Path”,負責儲存Log與後端的索引
  • Gateway node : nginx-based的LB,在Loki之前負責將push流量導至write node,其他流量導至read node(Round robin)

(3) Microservices : 每個元件都可以容器的方式獨立運行。(建議:適合非常大的規模),適合與Kubernetes部署一起使用,將元件全部拆開各自獨立運作。

目前如果要在正式環境下建置時,建議使用Simple scalable mode或是Microservices模式較佳。


4.結論

原本我在建置完K8S平台後,通常是採用EFK stack,一步步將整個監控部署在整個平台上,但常常就是到最後花了很多心力進行相關的部署與調整工作,更別提最後還要建置出合適的Dashboard(儀表板)才算告一段落,同時也因為傳統的EFK架構所需資源較高,在規劃時就必須要針對EFK保留更多的系統資源。

Loki為基礎的PLG Stack方案提供給我另一個更好的選擇,我可以在測試環境以Standalone模式建置出整套系統,並且在正式環境下還可以有更具擴展性的方式可供選擇,對於管理人員來說除了部署相對簡單之外,更有幫助的是還具備了輕量、彈性的好處。

針對監控部分個人希望可以有更加深入的了解,在學習的過程中也將盡可能的分享給大家,敬請期待後續的分享。

請大家給我鼓勵,你的鼓勵可以讓我更有動力分享。


References:



15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
延續上篇的內容,在了解了MetalLB的基本概念之後,我們就進入實際上部署的動作,還沒看過的可以到以下連結先有個基本概念: 本篇針對部署一個最基本的MetalLB的做法,共分成四個部分來進行說明:
今天跟大家分享在地端資料中心內建立Kubernetes叢集之後,如何針對網路進行更進一步的優化。除了CNI(容器網路接口)的設定,實務上我還會再另行建立Loadbalancer的機制。
在現今快速發展的數據應用環境之下,Kubernetes已經成為部署和管理容器化應用的首選平台。但是隨著應用服務愈來愈複雜、被攻擊的風險也愈來愈高。為了保護Kubernetes環境的安全性,跟大家介紹一個針對Kubernetes安全合規掃描的工具,幫助確保您的 Kubernetes 叢集設置和應用程序
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
建立Kubernetes cluster時,ETCD 是必不可少的元件,事實上Kubernetes所有資料都會存進ETCD store中,如果要讓Kubernetes的運行效能更好,其中一種方法是在部署之前對ETCD的性能進行優化設計。
今天來記錄版本升級的做法(z版號),Kubernetes的版本更新的很快,所以版本升級是每個管理者所必須要會的必備技能,建議版本升級之前要先去確認升級路徑,不是每個版本號都能一次升級到你需要的版本。
延續上篇的內容,在了解了MetalLB的基本概念之後,我們就進入實際上部署的動作,還沒看過的可以到以下連結先有個基本概念: 本篇針對部署一個最基本的MetalLB的做法,共分成四個部分來進行說明:
今天跟大家分享在地端資料中心內建立Kubernetes叢集之後,如何針對網路進行更進一步的優化。除了CNI(容器網路接口)的設定,實務上我還會再另行建立Loadbalancer的機制。
在現今快速發展的數據應用環境之下,Kubernetes已經成為部署和管理容器化應用的首選平台。但是隨著應用服務愈來愈複雜、被攻擊的風險也愈來愈高。為了保護Kubernetes環境的安全性,跟大家介紹一個針對Kubernetes安全合規掃描的工具,幫助確保您的 Kubernetes 叢集設置和應用程序
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
建立Kubernetes cluster時,ETCD 是必不可少的元件,事實上Kubernetes所有資料都會存進ETCD store中,如果要讓Kubernetes的運行效能更好,其中一種方法是在部署之前對ETCD的性能進行優化設計。
今天來記錄版本升級的做法(z版號),Kubernetes的版本更新的很快,所以版本升級是每個管理者所必須要會的必備技能,建議版本升級之前要先去確認升級路徑,不是每個版本號都能一次升級到你需要的版本。
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
👨‍💻簡介 今天早上在下kubectl get pods時,突然跳出了以下錯誤 Unable to connect to the server: x509: certificate has expired or is not yet valid
Thumbnail
Intro👨‍💻 在gcp環境下使用ansible playbook 建立k8s cluster,目前base image為centos 7,安裝方式類似elk stack,一樣先等master安裝完後產生token,接著安裝slave。 使用的CRI為containerd,CNI為calico
Thumbnail
👨‍💻簡介 有時候修改掛載的config檔,無法即時更新,需要重啟pod才會生效,為了解決這個問題,k8s-reloader因此而誕生,透過觀察掛載的configmap或是secret的變化自動對掛載的物件做滾動更新。 以下為在minikube環境下,透過掛載nginx-config檔並搭配re
Thumbnail
之前都介紹docker監控container,這次來點不一樣的,直接裝在k8s裡面去監控pod的一些指標。 基本的指標像是cpu, mem, pod數量, node數量等等,都能透過kube-state-metrics完成,而如果想要監控一些流量的指標,像是tcp連線數,tw數等,則是需要另外在服務
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
Thumbnail
覺得上一篇網站和廣播節目聽不夠嗎?這篇要再介紹三個好用好聽的K-indie廣播節目讓你的音樂24小時不間斷,除了線上收聽,有的還可以下載或是以Podcast的方式聆聽,即使不會韓文也沒有關係,還有針對台灣聽眾設計的節目!
Thumbnail
<p>日日春成立以來,最常收到的私訊就是「幫忙推薦首爾的Live House」,雖然弘大周邊的Live House近幾年關閉、搬家的消息時有所聞,但是會定期舉辦小型公演的場地大約還是在10間左右。</p>
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
👨‍💻簡介 今天早上在下kubectl get pods時,突然跳出了以下錯誤 Unable to connect to the server: x509: certificate has expired or is not yet valid
Thumbnail
Intro👨‍💻 在gcp環境下使用ansible playbook 建立k8s cluster,目前base image為centos 7,安裝方式類似elk stack,一樣先等master安裝完後產生token,接著安裝slave。 使用的CRI為containerd,CNI為calico
Thumbnail
👨‍💻簡介 有時候修改掛載的config檔,無法即時更新,需要重啟pod才會生效,為了解決這個問題,k8s-reloader因此而誕生,透過觀察掛載的configmap或是secret的變化自動對掛載的物件做滾動更新。 以下為在minikube環境下,透過掛載nginx-config檔並搭配re
Thumbnail
之前都介紹docker監控container,這次來點不一樣的,直接裝在k8s裡面去監控pod的一些指標。 基本的指標像是cpu, mem, pod數量, node數量等等,都能透過kube-state-metrics完成,而如果想要監控一些流量的指標,像是tcp連線數,tw數等,則是需要另外在服務
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
Thumbnail
覺得上一篇網站和廣播節目聽不夠嗎?這篇要再介紹三個好用好聽的K-indie廣播節目讓你的音樂24小時不間斷,除了線上收聽,有的還可以下載或是以Podcast的方式聆聽,即使不會韓文也沒有關係,還有針對台灣聽眾設計的節目!
Thumbnail
<p>日日春成立以來,最常收到的私訊就是「幫忙推薦首爾的Live House」,雖然弘大周邊的Live House近幾年關閉、搬家的消息時有所聞,但是會定期舉辦小型公演的場地大約還是在10間左右。</p>