Kubernetes 日誌傳輸中的四大挑戰
收集日誌,並將資料傳送到日誌伺服器,這一動作看起來簡單,但其實並不是一件容易的事。比如:容器日誌收集,就存在諸多挑戰。
日誌傳輸,通常包含兩大類:一個是主動方式;一個是被動方式。
主動方式,是指整個程式主動向遠端syslog伺服器傳送日誌訊息。通常,資料編碼的格式是rfc5424。
被動方式,是指部署每個程式的日誌路徑或檔案模式。 LogAgent會定期掃描,並將捕獲的日誌訊息傳送到日誌伺服器。
但是在容器日誌收集中,上述方法並不適用。首先,日誌收集過程更快。其次,流程部署更加分散式。
具體而言,容器日誌收集面臨著四大挑戰:
一、未能收集所有關鍵日誌
當出現問題時,pods 可能會被刪除或重新建立。因此,與pod/container相關聯的日誌檔案將被快速刪除/建立。
藉助LogAgent(如Fluentd或Logstash),我們可以定期掃描資料夾,或利用內建模式定義自動檢測日誌,並且預設掃描間隔為60秒(見下圖)。掃描間隔太慢,將無法及時捕捉pod。假如:我們把間隔設得短一些,比如1秒,效能提升要高得多,但是會出現日誌丟失現象。
此前,在VM環境下,就不用擔心會出現類似問題。當程式以某種方式重新啟動時,日誌檔案可能會被改變,但不會被刪除。最多隻是感覺到日誌收集速度變慢,但不會丟失關鍵日誌。
如何解決這一問題?我們可以透過Kubernetes雲控制器功能來監控pod。每當啟動pod建立事件時,立即通知LogAgent。honeycomb- kubernetts -agent是一個有機統一體。
值得一提的是,不是所有日誌都被重定向到stdout/stderr。如果pod內的程式將日誌寫入本地檔案,而不是stdout/stderr,LogAgent將無法獲得日誌,系統只監視與pod關聯的日誌檔案,如下所示。該日誌檔案將只捕獲容器的stdout/stderr。
這種日誌記錄行為是Kubernetes環境下的模式。儘管,雲原生移動確實需要時間,但並不是每個應用都是最前沿應用,對於DB服務尤其如此。
與VM環境相比,容器日誌收集更靈活,Pod可以經常在不同的工作節點上移動。但是,誰都不希望每當K8s叢集有一個pod更改時,就要重新載入或重新啟動LogAgent,這絕對是一個新的挑戰。
二、Namespaces的多租戶問題
Kubernetes工作負載通常執行在vm共享工作站中。由Namespaces來區分來自不同專案的工作負載分。不同的專案可能對日誌記錄有不同的偏好。日誌到哪裡,由什麼工具管理,都需要提供一種簡單的配置方式,而不需要安裝其他應用。
在筆者看來,Kubernetes CRD (CustomResourceDefinition自定義資源定義)非常好用。你需要學習的只是標準的kubectl命令。RBAC可以藉此應用定製資源。所以,Kubernetes CRD安全並且簡單,更容易執行。在PKS中,我們將這個特性稱為sink資源。
三、如何在不同的Namespaces下支援SLA
為了讓操作更簡單,人們通常只部署一個LogAgent作為Kubernetes daemonset。這代表每個Kubernetes工作節點有一個pod。如果這個pod需要重新載入或重新排程,它將影響這個工作節點中的所有pod。
從K8s v1.12開始,每個節點可以執行100個pod。你需要確保LogAgent足夠快,可以從所有pod中收集日誌。像任何共享環境一樣,你可能會遇到錯綜複雜的關聯問題。一個pod的錯誤行為會損傷同一工作節點中的所有其他pod。
可能每個人都會想到,讓有問題的Namespaces禁用禁用日誌記錄,這樣我們可以很容易避免發出日誌,不會影響日誌收集。但是,緩慢的磁碟處理可能會對日誌傳輸造成明顯的延遲。
四、如何處理來自不同層面的日誌記錄
如下圖所示,我們有pod日誌、K8s日誌和平臺日誌。即使對於“pod日誌”,我們也有來自標準工作負載或K8s附加元件的日誌。
而不同型別的日誌具有不同的特徵。他們可能會有不同優先順序別事項。不僅是層對層,而且是同一層的不同SLA。
在K8s解決方案中,我們如何解決這一問題?如何協助專案經理/開發人員迅速找出問題的根源?如何減少安裝與部署環節?PKS可能是最佳選擇!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545808/viewspace-2216008/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle DG 日誌傳輸小結Oracle
- oracle10g DataGuard的日誌傳輸方式Oracle
- sqlserver關於日誌傳輸log shipping的總結SQLServer
- 關於11G DataGuard 日誌傳輸的案例
- 7 Redo Transport Services 日誌傳輸服務
- Kubernetes 中 搭建 EFK 日誌搜尋中心
- Kubernetes日誌採集
- 如何應對Kubernetes的安全挑戰?
- [20181112]11g 日誌傳輸壓縮模式.txt模式
- Kubernetes 叢集日誌 和 EFK 架構日誌方案架構
- Kubernetes日誌的6個最佳實踐
- 最全 Kubernetes 審計日誌方案
- Kubernetes叢集日誌詳解
- logback 日誌輸出格式
- python如何輸出日誌?Python
- 分散式日誌傳輸系統Databus(一)--系統介紹分散式
- “Hack”阿里雲Kubernetes的Scheduler的日誌級別阿里
- fluentd收集kubernetes 叢集日誌分析
- 指令碼日誌的標準輸出指令碼
- 日誌架構演進:從集中式到分散式的Kubernetes日誌策略架構分散式
- 將程式碼中的除錯資訊輸出到日誌檔案中除錯
- 程式中的日誌
- python日誌重複輸出Python
- 操作日誌記錄(包括輸出至自定義日誌檔案)
- filebeat 收集nginx日誌輸出到kafkaNginxKafka
- mybatis log sql日誌輸出外掛MyBatisSQL
- Kubernetes Ingress 日誌分析與監控的最佳實踐
- 鐳速傳輸:媒體行業資料量激增帶來的挑戰引發熱議行業
- 醫療人工智慧:如何抓住四大機遇,應對四大挑戰人工智慧
- 啟動tomcat時,日誌裡大量輸出建立資料來源dataSource的日誌Tomcat
- 中繼日誌中繼
- Kubernetes日誌系統新貴Loki-StackLoki
- Kubernetes 穩定性保障手冊 -- 日誌專題
- 搜狗輸入法也在挑戰國人的智商!
- 突破傳統:AI如何應對心電圖中的長尾挑戰?AI
- 重定向Kubernetes pod中的tcpdump輸出TCP
- C#按照日期輸出程式日誌C#
- Java 如何正確地輸出日誌Java