乙個完整的容器平台,容器日誌都是很重要的一環。尤其在微服務架構大行其道狀況下,程式的訪問監控健康狀態很多都依賴日誌資訊的收集,由於docker的存在,讓容器平台中的日誌收集和傳統方式很多不一樣,日誌的輸出和採集點收集和以前大有不同。本文就**一下,rancher平台內如何做容器日誌收集。
縱覽當前容器日誌收集的場景,無非就是兩種方式:一是直接採集docker標準輸出,容器內的服務將日誌資訊寫到標準輸出,這樣通過docker的log driver可以傳送到相應的收集程式中;二是延續傳統的日誌寫入方式,容器內的服務將日誌直接寫到普通檔案中,通過docker volume將日誌檔案對映到host上,日誌採集程式就可以收集它。
當主機的容器密度比較高的時候,對docker engine的壓力比較大,畢竟容器標準輸出都要通過docker engine來處理。
儘管原則上,我們希望遵循一容器部署乙個服務的原則,但是有時候特殊情況不可避免容器內有多個業務服務,這時候很難做到所有服務都向標準輸出寫日誌,這就需要用到前面所說的第二種場景模式。
雖然我們可以先選擇很多種log driver,但是有些log driver會破壞docker原生的體驗,比如docker logs無法直接看到容器日誌。
基於以上考慮,乙個完整的日誌方案必須要同時滿足標準輸出和日誌卷兩種模式才可以。當然完整的日誌體系中,並不僅僅是採集,還需要有日誌儲存和ui展現。日誌儲存有很多種開源的實現,這個一般使用者都會有自己鍾情的選擇,而ui展現更是各家有各家的需求,很難形成比較好的標準,一般都是通過定製化方式解決。所以此文主要展現的方案是日誌採集方案,當然在儲存和ui展現上會對接開源實現,沒有特殊需求的情況下,也可以擁有乙個完整的體驗。
如上面圖中所示,日誌儲存和ui展現可以直接使用elasticsearch & kibana,日誌採集方面如之前所分析,需要對接兩種採集模式,所以這部分採用fluentd & logging helper的組合,fluentd是很通用的日誌採集程式,擁有優異的效能,相對logstash來說同等壓力下,其記憶體消耗要少很多。logging helper是可以理解微fluentd的助手,它可以識別容器內的日誌卷檔案,通知fluentd進行採集。此外,由於要保證dokcer和rancher體驗的完整性,在docker log driver的選型上支援json-file和journald,其原因:一是json-file和journald相對來說比較常用;二是這兩種驅動下,docker logs依然可以有內容輸出,保證了體驗的完整性。
下面開始說明,整個方案的部署過程。先用一張圖來描述整體的部署結構,如下:
總共劃分三個env,其中乙個env部署es & kibana,另外兩個env分別新增json-file驅動的主機和journald驅動的主機。詳細部署過程如下:
建立三個env,使用cattle引擎。設定logging catalog方便部署,在admin–settings頁面中新增catalog,位址為:
進入es-kibana env中,部署elasticsearch & kibana,這兩個應用在community catalog中均可以找到,部署非常簡單,需要注意的是,建議選擇elasticsearch 2.x,kibana中的elasicsearch source選擇elasticseach-clients:
然後在jsonfile & journald env中新增rancher logging應用,開啟對應的catalog,es link指向剛才設定的external link, 其中volume pattern是日誌卷的匹配模式,file pattern是日誌卷內的日誌檔案匹配模式:
以上部署完成之後,部署一些應用並產生一些訪問日誌,就可以在kibana的介面中看到:
若要使用日誌卷方式,則需要在service啟動的時候配置volume,volume name需要匹配之前設定的volume pattern:
通過fluentd我們可以對接很多第三方日誌儲存體系,但是fluentd自身並不能完成日誌採集的所有場景,所以非常需要logging helper的幫助。通過logging helper可以定製出一些額外採集規則,比如可以過濾某些容器日誌等等。當然真正大規模生產環境日誌平台,其實是對整個運維體系的考驗, 單純靠開源程式的組合並不能真正解決問題。
Rancher體系下容器日誌採集
乙個完整的容器平台,容器日誌都是很重要的一環。尤其在微服務架構大行其道狀況下,程式的訪問監控健康狀態很多都依賴日誌資訊的收集,由於docker的存在,讓容器平台中的日誌收集和傳統方式很多不一樣,日誌的輸出和採集點收集和以前大有不同。本文就 一下,rancher平台內如何做容器日誌收集。縱覽當前容器日...
容器編排之rancher
容器編排之rancher 環境 docker 1.12.0 centos 7.2 rancher 1.3.1 官方 一.服務端 rancher server docker run d restart unless stopped p 8080 8080 rancher server v1.3.1 二...
單容器rancher證書過期解決
2.2版本的rancher證書過期,docker會頻繁重啟報錯 e0814 08 51 46.160212 6 reflector.go 134 k8s.io client go informers factory.go 127 failed to list v1.replicationcontro...