摘要:本文就探討一下,平臺內如何做容器日志收集。當然完整的日志體系中,并不僅僅是采集,還需要有日志存儲和展現。是可以理解微的助手,它可以識別容器內的日志卷文件,通知進行采集。
引言
一個完整的容器平臺,容器日志都是很重要的一環。尤其在微服務架構大行其道狀況下,程序的訪問監控健康狀態很多都依賴日志信息的收集,由于Docker的存在,讓容器平臺中的日志收集和傳統方式很多不一樣,日志的輸出和采集點收集和以前大有不同。本文就探討一下,Rancher平臺內如何做容器日志收集。
當前現狀縱覽當前容器日志收集的場景,無非就是兩種方式:一是直接采集Docker標準輸出,容器內的服務將日志信息寫到標準輸出,這樣通過Docker的log driver可以發送到相應的收集程序中;二是延續傳統的日志寫入方式,容器內的服務將日志直接寫到普通文件中,通過Docker volume將日志文件映射到Host上,日志采集程序就可以收集它。
第一種方式足夠簡單,直接配置相關的Log Driver就可以,但是這種方式也有些劣勢:
當主機的容器密度比較高的時候,對Docker Engine的壓力比較大,畢竟容器標準輸出都要通過Docker Engine來處理。
盡管原則上,我們希望遵循一容器部署一個服務的原則,但是有時候特殊情況不可避免容器內有多個業務服務,這時候很難做到所有服務都向標準輸出寫日志,這就需要用到前面所說的第二種場景模式。
雖然我們可以先選擇很多種Log Driver,但是有些Log Driver會破壞Docker原生的體驗,比如docker logs無法直接看到容器日志。
基于以上考慮,一個完整的日志方案必須要同時滿足標準輸出和日志卷兩種模式才可以。當然完整的日志體系中,并不僅僅是采集,還需要有日志存儲和UI展現。日志存儲有很多種開源的實現,這個一般用戶都會有自己鐘情的選擇,而UI展現更是各家有各家的需求,很難形成比較好的標準,一般都是通過定制化方式解決。所以此文主要展現的方案是日志采集方案,當然在存儲和UI展現上會對接開源實現,沒有特殊需求的情況下,也可以擁有一個完整的體驗。
Rancher下的解決方案如上面圖中所示,日志存儲和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,地址為:https://github.com/niusmallna...
進入ES-Kibana ENV中,部署ElasticSearch & Kibana,這兩個應用在Community Catalog中均可以找到,部署非常簡單,需要注意的是,建議選擇Elasticsearch 2.x,Kibana中的Elasicsearch Source選擇elasticseach-clients:
分配兩臺主機并安裝Docker,其中Log Driver分別選擇json-file和journald,并將主機添加到各自的ENV中。 在這兩個ENV中添加External Link指向之前部署的Elasticsearch地址:
然后在Jsonfile & Journald ENV中添加Rancher Logging應用,打開對應的catalog,ES link指向剛才設定的External link, 其中Volume Pattern是日志卷的匹配模式,File Pattern是日志卷內的日志文件匹配模式:
以上部署完成之后,部署一些應用并產生一些訪問日志,就可以在Kibana的界面中看到:
若要使用日志卷方式,則需要在service啟動的時候配置volume,volume name需要匹配之前設定的Volume Pattern:
秉承一切開源的原則,相關實現可以查看一下鏈接:
https://github.com/niusmallna...
https://github.com/niusmallna...
https://github.com/niusmallna...
總結通過Fluentd我們可以對接很多第三方日志存儲體系,但是Fluentd自身并不能完成日志采集的所有場景,所以非常需要Logging Helper的幫助。通過Logging Helper可以定制出一些額外采集規則,比如可以過濾某些容器日志等等。當然真正大規模生產環境日志平臺,其實是對整個運維體系的考驗, 單純靠開源程序的組合并不能真正解決問題。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26859.html
摘要:因此,另一種解決辦法像這樣的工具,則只是將和進行了結合,其功能尤其關注日志管理,比如格式檢查,日志語法分析,數據改進地址地理位置信息,元數據標簽等以及日志路由。 由Rancher社區維護的應用商店最近迎來了兩個明星項目——SPM 和 Logsene,來自Sematext的監控與日志工具。如果你已經熟悉Logstash,Kibana,Prometheus,Grafana這些監控或日志解決...
摘要:來自用戶的最佳實踐分享,如何用阿里開源的日志收集工具收集機器上所有應用日志。具有如下特性一個單獨的進程收集機器上所有容器的日志。無論是強大的阿里云日志服務,還是比較流行的組合,甚至是,都能把日志投遞到正確的地點。 來自用戶的最佳實踐分享,如何用阿里開源的Docker日志收集工具fluentd-pilot收集機器上所有Docker應用日志。 fluentd-pilot簡介 fluentd...
摘要:容器化應用日志收集挑戰應用日志的收集分析和監控是日常運維工作重要的部分,妥善地處理應用日志收集往往是應用容器化重要的一個課題。日志來源識別采用統一應用日志收集方案,日志分散在很多不同容器的相互隔離的環境中,需要解決日志的來源識別問題。 容器化應用日志收集挑戰 應用日志的收集、分析和監控是日常運維工作重要的部分,妥善地處理應用日志收集往往是應用容器化重要的一個課題。 Docker處理日志...
摘要:新近發布,中國區團隊特為中國用戶準備了千元大獎,邀您參與用戶體驗計劃找,提團隊珍視用戶的每一個意見與反饋。新版本發布后還將經歷版本完善與優化的階段。 showImg(https://segmentfault.com/img/remote/1460000016731917?w=1600&h=900); GitLab支持、CICD優化、項目配額管理、驅散容器功能等等,Rancher 2.1...
閱讀 1496·2021-10-11 10:59
閱讀 1857·2021-09-09 11:36
閱讀 1370·2019-08-30 15:55
閱讀 1322·2019-08-29 11:20
閱讀 3057·2019-08-26 13:39
閱讀 1458·2019-08-26 13:37
閱讀 1951·2019-08-26 12:11
閱讀 1313·2019-08-23 14:28