【生產環境K8S從搭建到運維的實錄(五)】K8S環境紀錄檔採集方案

2020-09-22 11:00:23

【生產環境K8S從搭建到運維的實錄(五)】K8S環境紀錄檔採集方案

1.前述

  今天想跟大家聊一聊在k8s環境裡關於紀錄檔採集的解決方案。主要介紹一下我們的系統都有哪些紀錄檔檔案,以及各種紀錄檔檔案是如何被採集和應用的。

2.紀錄檔種類

  這裡的分類是按照我們現有生產環境所處理的log進行劃分,按照叢集劃分,可以分為以下3種:

  • K8S叢集log
  • PKS叢集log
  • 監控機器log

按照業務種類劃分,又可以分為以下2種:

  • 業務log
  • 系統log

3.Log Systerm構成

  下面構成圖中關於PKS Cluster,K8S Cluster,Monitor System的詳細介紹請參照本系列文章的其他章節。
在這裡插入圖片描述

3-1 紀錄檔收集

  1. PKS叢集紀錄檔收集備份

     PKS叢集中所有伺服器的系統log都是通過syslog服務從叢集中將log轉送到監控伺服器所掛載的NAS中。

  2. K8S叢集紀錄檔收集備份

     K8S叢集,也就是所謂Node節點上的log分為兩種:系統log和業務log。

     系統log和PKS叢集一樣,也是通過syslog服務進行轉送,將Node節點上的系統log轉送到監控伺服器掛載的NAS中。

     業務log則是通過fluent-bit服務進行收集,然後轉送到監控伺服器中,再由監控伺服器上的fluentd服務進行聚合處理。最終的log檔案存貯在NAS中。這裡我們需要注意的是,最終儲存在NAS中的log檔案並不是K8S叢集中的原始檔案,是經過fluent-bit和fluentd加工處理過得log檔案。

  3. 監控伺服器紀錄檔收集備份

     監控伺服器是獨立於K8S叢集和PKS叢集的虛擬伺服器,這臺機器上的log收集備份,通過指令碼來實現,我們設定了Crontab,定期執行,最終也是備份到NAS裡。

3-2 fluent-bit VS fluentd

  上面我們提到K8S叢集各個節點上的業務log是通過fluent-bit和fluentd來進行收集和聚合的,那麼我們來簡單介紹一下這兩個服務。

  fluent bit是一個用c寫成的外掛式、輕量級、多平臺開源紀錄檔收集工具。它允許從不同的源收集資料並行送到多個目的地。完全相容docker和kubernetes生態環境。概括來說,fluent-bit是一個簡單紀錄檔收集,處理工具。而fluentd與fluent-bit類似,也是一個紀錄檔收集,處理工具,但是相較fluent-bit來說,fluentd有更強大的聚合功能。這裡我列出它們的對比進行參考。

fluentdfluent-bit
範圍容器/伺服器容器/伺服器
語言C和RubyC
大小約40MB約450KB
效能高效能高效能
依賴關係作為Ruby Gem構建,主要依賴gems除了一些安裝編譯外掛(GCC、CMAKE)其它零依賴。
外掛支援超過650個可用外掛大約35個可用外掛
許可證Apache許可證2.0版Apache許可證2.0版

3-3 紀錄檔監控

  紀錄檔採集最關鍵的一個作用就是用於監控,關於監控,我們有專門的章節進行說明,這裡我只簡單的介紹一下紀錄檔採集與監控的設計概要。K8S叢集中每一個Node節點上都有執行著一個flunet-bit服務,用來採集log資訊。監控伺服器上的fluntd將fluent-bit採集到的log資訊進行聚合,過濾。prometheus對fluntd處理之後的資訊進行監控,最終通過grafana將監控資訊視覺化展示。這裡需要說明的一點,K8S叢集中fluent-bit是以Pod形式存在,而監控伺服器中的fluentd,prometheus,grafana都是容器形式執行。
在這裡插入圖片描述

4.結束語

 用來進行紀錄檔採集分析的工具以及解決方案有很多,但是不論用什麼方法進行採集,紀錄檔刪除也是需要考慮的一個問題。如果不定期刪除,Node節點會因為磁碟空間被紀錄檔檔案佔滿而崩潰。我們的環境在執行過程中就遇到過這樣的問題,因為一些業務log沒有及時被刪除,而導致執行在Node節點上的其他Pod無法正常工作,其中就包括flunt-bit,因此log也無法正常被收集。

作者:rm * 小組
日期:2020/9/20