【百度雲原生導讀】本節課是 Kubernetes 入門課程的最後一課,關注『雲原生計算』公衆號,回覆"k8s",獲取課程配套pdf。html
本節課主要分爲如下四個部分:docker
1. 容器日誌採集與管理後端
Kubernetes 日誌處理方案api
2. 容器監控指標的採集與管理安全
以Prometheus 爲核心的統一監控方案微信
3. Demo網絡
演示雲原生環境日誌採集與指標監控架構
4. 總結運維
總結日誌採集與指標監控要點ide
1. 容器日誌採集與管理
日誌採集場景
日誌採集場景主要分爲如下四種:
集羣核心組件日誌:
審計須要 kube-apiserver 日誌,診斷調度須要 kube-scheduler 日誌,接入層流量分析須要 Ingress 日誌。
主機內核日誌:
內核日誌能夠用於幫助開發及運維同窗診斷影響節點穩定的異常,如:文件系統異常,網絡棧異常,設備驅動異常等。
應用運行時日誌:
Docker 是最多見的容器運行時,能夠利用 Docker 和 Kubelet 日誌排查 Pod 建立和啓動失敗等問題。
業務應用日誌:
經過分析業務的運行日誌分析和觀察業務狀態,診斷異常。
日誌採集指標
Kubernetes 對容器日誌的指望處理方式爲:集羣級日誌處理(cluster-level-logging)
即:與容器、Pod、節點生命週期徹底無關。
對於一個容器,當應用將日誌輸出到 stdout 和 stderr 後,docker 默認將這些日誌輸出到宿主機上一個 JSON 文件中。
日誌採集方式
Kubernetes 自己並不會對用戶進行任何的日誌蒐集工做。爲了實現集羣級日誌處理,須要在集羣前,提早對日誌採集管理進行方案規劃。
Kubernetes 自己推薦3種日誌方案。
日誌採集方式1:使用節點級日誌代理
核心是 logging-agent (fluentd,etc );
Logging-agent 以 DaemonSet 方式運行在節點上;
掛載宿主機上的容器日誌目錄;
轉發日誌至後端存儲(ElasticSearch, etc);
優勢:對應用和Pod徹底無侵入,一個節點僅需部署一個 agent。
缺點:要求應用日誌直接輸出至容器的 stdout 和 stderr。
日誌採集方式2:使用 sidecar 容器和日誌代理
容器所有或部分日誌輸出到文件
一個或多個 sidecar 容器將應用程序日誌傳送到本身的 stdout 和 stderr。
優勢:可以繼續使用日誌採集方式1。
缺點:成倍增長磁盤佔用,形成浪費。(應用和sidecar容器寫入兩份相同日誌文件)
日誌採集方式3:使用具備日誌代理功能的 sidecar 容器
至關於將 logging-agent 直接集成進 Pod。
應用和輸出日誌至 stdout&stderr 或文件。
Logging-agent 的輸入源爲應用日誌文件。
優勢:部署簡單,對宿主機友好。
缺點:1. Sidecar 容器可能消耗較多資源,甚至拖掛應用容器。
2. 沒法使用 kubectl logs 命令查看容器日誌。
總結:
實現集羣級日誌採集的三種方式:
-
使用節點級日誌代理。
-
使用 sidecar 容器和日誌代理。
-
使用具備日誌代理功能的 sidecar 容器。
建議:使用方案1,將應用日誌輸出到 stdout&stderr,經過宿主機上直接部署logging-agent 的方式集中處理日誌。
-
管理簡單。
-
可使用 kubectl logs 命令查看日誌。
-
宿主機自己可能已有 rstlogd 等成熟日誌收集組件可以使用。
選型推薦
2. 容器監控指標的採集與管理
監控場景
從監控類型劃分,可分爲如下幾個場景:
資源監控:
CPU,內存,網絡等資源類指標,常以數值,百分比爲單位進行統計,是最多見的資源監控方式。
性能監控:
應用的內部監控。一般是 Hock 機制在虛擬機層,字節碼執行層隱式回調,或者在應用層顯式注入,獲取更深層次的監控指標,經常使用來應用診斷與調優。
好比 Jvm 經過 Hock 機制,拿到相似 Jvm 裏面的垃圾回收的次數,各類內存帶的分佈以及網絡鏈接數的一些指標。經過這樣的方式來進行應用的診斷與調優。
安全監控:
針對安全進行一系列監控策略,例如越權管理,安全漏洞掃描等。
事件監控:
Kubernetes 中特有的監控方式,貼合 Kubernetes 設計理念,做爲常規監控方案的補充。
爲何說事件監控貼合 Kubernetes 設計理念呢?這是由於 Kubernetes 其中一個設計理念就是基於狀態機的狀態轉換。從正常狀態轉換成另外一個狀態的時候,會發生一個 Normal 級別的事件(也就是正常的事件)而從一個正常狀態轉換成異常狀態時,平臺會觸發一個 Warning 級別(也就是警告級別的事件)一般,Warning 級別的事件是咱們關心的事件。
而事件監控就能夠把 Normal 級別的事件或 Warning 級別的事件離線存儲到數據中心,而後經過數據中心的分析與報警,將相應的異常經過短信,郵件的方式暴露,彌補常規監控的弊端。
Prometheus 的起源及現狀
Prometheus 與 Kubernetes 同樣,來自於 Borg 體系。原型叫作 BorgMon,是與Borg同時誕生的內部監控系統。而Prometheus項目發起的緣由也與Kubernetes 相似,但願經過對用戶更友好的方式,將 Google 內部系統的設計理念傳遞給開發者和用戶。
Kubernetes 監控體系曾經很是繁雜,但今天已經演變成了以 Prometheus 爲核心的一套統一的方案。
Prometheus 的架構與工做方式
Prometheus 指標來源
-
宿主機的監控數據:須要藉助 Node Exporter 向外暴露; Exporter 代替被監控對象來向 Prometheus 暴露能夠被抓取的指標信息。
-
Kubernetes 組件如 APIServer, kubelet 等的/metrics AP:除CPU,內存外,還包括各個組件的核心監控指標。
-
Kubernetes 核心的監控數據:包括Pod、Node、容器、Service等主要核心概念的 metrics,其中容器相關的指標來源於 kubectl 內置的 cAdvisor 服務。
Prometheus 特色
-
簡潔強大的接入標準。只要實現 Promethus Client 接口,就能夠直接實現數據的採集。
-
多種數據採集方式。包括:在線,離線,push, pull 聯邦的方式進行數據採集。
-
和 Kubernetes完 全兼容。
-
豐富的插件機制和生態。
-
Prometheus Operator 助力。使 Prometheus 的運維實現自動化。
3. Demo 演示
講師最後演示了 Kubernetes 環境下日誌採集與指標監控的一個 Demo。感興趣的同窗能夠點擊視頻觀看。https://cloud.baidu.com/video-center/video.html?id=610
相關閱讀:
【公開課】Kubernetes 入門——深刻淺出講 Docker
重磅!雲原生計算交流羣成立
掃碼添加小助手便可申請加入,必定要備註:名字-公司/學校-地區,根據格式備註,才能經過且邀請進羣。
瞭解更多微服務、雲原生技術的相關信息,請關注咱們的微信公衆號【雲原生計算】!