直達最佳實踐:【 微服務架構日志采集運維管理最佳實踐】
最佳實踐頻道:【
最佳實踐頻道 這裡有豐富的企業上雲最佳實踐,從典型場景入門,提供一系列項目實踐方案,降低企業上雲門檻的同時滿足您的需求!
Kubernetes日志系統的重要性
雲原生對于微服務可觀測性的一項重要标準就是日志記錄(logging)。日志的采集、存儲和分析時建構現代系統平台的關鍵支柱之一,可以幫助團隊進行問題的診斷、品質的回溯、系統營運效率監控等。在當今容器/Kubernetes技術大火的環境下,日志系統對于Kubernetes也起着非常關鍵的作用,對于Devops、營運、安全等方面都離不開完整多樣有效的日志采集、存儲管理和分析,從下圖可見。

微服務架構下日志采集運維管理面臨的挑戰
衆所周知,随着容器/Kubernetes技術在微服務落地過程中相對實體機、VM在應用部署、應用傳遞等環節給使用者提供了更加簡單輕量、高成本效益等優勢,而且使用者在應用容器/Kubernetes技術做微服務改造過程中,也同時存在容器化應用/非容器化應用混合部署的形态。對于基于VM或者實體機部署的應用,日志采集相關技術都比較完善,有比較健全的Logstash、Fluentd、FileBeats等,但是在應用容器化特别是基于Kubenetes叢集做微服務應用部署時,日志采集運維給使用者帶來了不小的挑戰,主要的原因有:
- 日志采集目标多,需要采集主控端日志、容器内日志、容器stdout,存在多種應用資料及多種日志格式,缺乏統一的一站式日志采集解決方案;
- 叢集彈性伸縮、環境動态性強、服務動态遷移等都給日志采集帶來了很大的困難,日志采集的動态性以及資料完整性都是非常大的挑戰;
- 運維成本非常大,已有的一些方案隻能使用多種軟體組合采集,各個軟體組裝起來的系統穩定性難以保障,且缺乏中心化的管理、配置、監控手段,運維負擔大;
- 日志采集Agent侵入性高,Docker Driver擴充需要修改底層引擎,一個Container對應采集一個日志采集Agent又會産生資源競争和浪費
- 日志采集性能低,正常情況下一個Docker Engine會運作數十個甚至數百個Container,此時開源日志采集Agent采集性能及資源消耗十分不理想;
- 日志分析效率和手段缺乏,開源的日志分析展現工具對于日志的實時分析、智能分析等缺乏簡單有效的可視化手段。
阿裡雲Kubernetes日志采集方案
基于以上分析,阿裡雲日志服務産品針對使用者在基于Kubernetes做應用微服務改造落地過程中日志采集運維管理的需求和痛點,結合阿裡雲組合雲産品的優勢,提出了一站式的日志采集運維管理分析的解決方案,提供了強大的日志處理分析能力,如PB級日志實時查詢、日志聚類分析、Ingress日志分析報表、日志分析函數、上下遊生态對接等能力,提供使用者在 容器/Kubernetes技術落地應用微服務改造過程中的日志采集運維管理一站式能力。
-
Ingress日志解決方案
Kubernetes中Ingress是一種API資源的聲明,具體的實作需要由Ingress Controller來接管Ingress定義,目前比較流行的Ingress Controller實作有Nginx、Traefik、listio、Kong等,在國内接受度最高的是Nginx Ingress Controller。
日志和監控是所有Ingress Controller都會提供的基礎功能,日志一般包括通路日志(Access Log)、控制日志(Controller Log)和錯誤日志(Error Log),監控主要從日志以及Controller中提取Metrics資訊。這心資料中通路日志的量級最大、資訊最多、價值也最高,一般七層的通路日志包括:URL、源IP、UserAgent、狀态碼、入流量、出流量、響應時間等,對于Ingress Controller這種轉發型的日志,還包括轉發的Service名、Service響應時間等額外資訊。從這些資訊中,我們能夠分析出非常多的有用資訊,例如:網站通路的PV、UV;通路的地域分布、裝置端分布;網站通路的錯誤比例;後端服務的響應延遲;不同URL通路分布等。但是手動搭建并運維一整套的Ingress日志分析與監控系統非常複雜,系統需要非常多的子產品,例如部署日志采集Angent并配置采集和解析規則,部署實時資料分析引擎例如Elastic Search、Clickhouse等,部署可視化元件并搭建報表例如Grafana、Kibana等,部署告警子產品等配置告警規則例如ElastAlert等,而且由于Kubernetes叢集的通路量相對較大,是以還需要搭建一個緩沖隊列例如Redis、Kafka等。
為了簡化使用者對于Ingress日志分析與監控的門檻,阿裡雲容器服務和日志服務将Ingress打通,隻需要應用一個yaml資源即可完成日志采集、分析、可視化等一整套Ingress日志方案的部署。
微服務架構下日志采集運維管理分析 微服務架構下日志采集運維管理分析
-
Kubernetes 容器日志采集分析與監控
日志作為任一系統不可或缺的部分,Kubernetes的官方文檔也介紹了多種日志采集形式,總結起來主要有下述三種:原生方式、DaemonSet方式和SideCar方式。
- 原生方式:使用kubectl logs直接檢視本地保留的日志,或者通過docker engine的logging driver将日志重定向到檔案、syslog、fluentd等系統中。
- DaemonSet方式:在Kubernetes叢集的每個節點上部署日志agent,由agent采集所有容器的日志到服務端。
- SideCar方式:一個容器組(Pod)中運作一個SideCar的日志agent容器,用于采集該容器組(Pod)主容器産生的日志。SideCar模式的日志采集依賴Logtail和業務容器共享日志目錄,業務容器将日志寫入到共享目錄中,Logtail通過監控共享目錄中日志檔案變化并采集日志。
從上述表格可以看出,原生方式相對功能太弱,一般不建議在生産系統中使用;DameonSet方式相對資源占用要小很多,但擴充性、租戶隔離性受限,比較适用于功能單一或者業務不是很多的叢集;SideCar方式相對資源占用較多,但靈活性以及多租戶隔離性較強,建議大型的Kubernetes叢集或作為PAAS平台為多個業務方服務的叢集使用該方式。通常我們可以這樣進行采集部署建議:微服務架構下日志采集運維管理分析 - 核心應用:使用SideCar方式采集。
- 普通應用/系統日志:使用DaemonSet方式采集。
- 标準輸出: 使用DaemonSet方式采集。
微服務架構下日志采集運維管理分析
總結
本文介紹了基于Kubernetes進行應用微服務改造過程中的日志采集與運維管理方案,限于篇幅,本文無法對具體實施建議以及更多特色功能進行一一介紹,請大家詳細閱讀阿裡雲官網最佳實踐頻道的