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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DataGuard日誌傳輸模式模式
- DG 日誌傳輸監控
- oracle DG 日誌傳輸小結Oracle
- SQL Server 事務日誌傳輸SQLServer
- oracle10g DataGuard的日誌傳輸方式Oracle
- 7 Redo Transport Services 日誌傳輸服務
- MySQL如何傳輸二進位制日誌MySql
- 關於11G DataGuard 日誌傳輸的案例
- 從alert日誌看Oracle 11g Datagurad日誌傳輸(上)Oracle
- 從alert日誌看Oracle 11g Datagurad日誌傳輸(下)Oracle
- downstream環境下archive程式停止傳輸日誌Hive
- 【DataGuard】Oracle DataGuard 日誌傳輸狀態監控Oracle
- sqlserver關於日誌傳輸log shipping的總結SQLServer
- 由於域名解析引起的dataguard傳輸日誌故障
- Kubernetes 中 搭建 EFK 日誌搜尋中心
- 【DataGuard】10GR 日誌傳輸服務引數
- 監聽狀態對dataguard及其日誌傳輸的影響
- MySQL資料庫中的日誌檔案---(4)配置日誌檔案輸出路徑MySql資料庫
- Laravel 中輸出 SQL 語句的到 log 日誌LaravelSQL
- Kubernetes日誌採集
- Oracle 11g Dataguard 暫停物理備庫的日誌傳輸Oracle
- linux下如何增量增量傳輸mysql binlog日誌LinuxMySql
- Kubernetes 叢集日誌 和 EFK 架構日誌方案架構
- 將程式碼中的除錯資訊輸出到日誌檔案中除錯
- reportbuilder 日誌輸出UI
- Python輸出日誌Python
- 日誌傳送部署
- Oracle11g Data Guard 暫停物理備庫的日誌傳輸Oracle
- 分散式日誌傳輸系統Databus(一)--系統介紹分散式
- IBM稱全球CIO面臨四大挑戰IBM
- 程式中的日誌
- Kubernetes日誌的6個最佳實踐
- DataGuard故障:Standby日誌檔案正常傳輸但沒有ApplyAPP
- 最全 Kubernetes 審計日誌方案
- Kubernetes叢集日誌詳解
- 日誌傳送事務日誌備份設定
- python如何輸出日誌?Python
- Java日誌輸出問題Java