今天想跟大家聊一聊在k8s環境裡關於紀錄檔採集的解決方案。主要介紹一下我們的系統都有哪些紀錄檔檔案,以及各種紀錄檔檔案是如何被採集和應用的。
這裡的分類是按照我們現有生產環境所處理的log進行劃分,按照叢集劃分,可以分為以下3種:
按照業務種類劃分,又可以分為以下2種:
下面構成圖中關於PKS Cluster,K8S Cluster,Monitor System的詳細介紹請參照本系列文章的其他章節。
PKS叢集紀錄檔收集備份
PKS叢集中所有伺服器的系統log都是通過syslog服務從叢集中將log轉送到監控伺服器所掛載的NAS中。
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檔案。
監控伺服器紀錄檔收集備份
監控伺服器是獨立於K8S叢集和PKS叢集的虛擬伺服器,這臺機器上的log收集備份,通過指令碼來實現,我們設定了Crontab,定期執行,最終也是備份到NAS裡。
上面我們提到K8S叢集各個節點上的業務log是通過fluent-bit和fluentd來進行收集和聚合的,那麼我們來簡單介紹一下這兩個服務。
fluent bit是一個用c寫成的外掛式、輕量級、多平臺開源紀錄檔收集工具。它允許從不同的源收集資料並行送到多個目的地。完全相容docker和kubernetes生態環境。概括來說,fluent-bit是一個簡單紀錄檔收集,處理工具。而fluentd與fluent-bit類似,也是一個紀錄檔收集,處理工具,但是相較fluent-bit來說,fluentd有更強大的聚合功能。這裡我列出它們的對比進行參考。
fluentd | fluent-bit | |
---|---|---|
範圍 | 容器/伺服器 | 容器/伺服器 |
語言 | C和Ruby | C |
大小 | 約40MB | 約450KB |
效能 | 高效能 | 高效能 |
依賴關係 | 作為Ruby Gem構建,主要依賴gems | 除了一些安裝編譯外掛(GCC、CMAKE)其它零依賴。 |
外掛支援 | 超過650個可用外掛 | 大約35個可用外掛 |
許可證 | Apache許可證2.0版 | Apache許可證2.0版 |
紀錄檔採集最關鍵的一個作用就是用於監控,關於監控,我們有專門的章節進行說明,這裡我只簡單的介紹一下紀錄檔採集與監控的設計概要。K8S叢集中每一個Node節點上都有執行著一個flunet-bit服務,用來採集log資訊。監控伺服器上的fluntd將fluent-bit採集到的log資訊進行聚合,過濾。prometheus對fluntd處理之後的資訊進行監控,最終通過grafana將監控資訊視覺化展示。這裡需要說明的一點,K8S叢集中fluent-bit是以Pod形式存在,而監控伺服器中的fluentd,prometheus,grafana都是容器形式執行。
用來進行紀錄檔採集分析的工具以及解決方案有很多,但是不論用什麼方法進行採集,紀錄檔刪除也是需要考慮的一個問題。如果不定期刪除,Node節點會因為磁碟空間被紀錄檔檔案佔滿而崩潰。我們的環境在執行過程中就遇到過這樣的問題,因為一些業務log沒有及時被刪除,而導致執行在Node節點上的其他Pod無法正常工作,其中就包括flunt-bit,因此log也無法正常被收集。
作者:rm * 小組
日期:2020/9/20