Kubernetes入门——Kubernetes日志采集与监控告警
作者簡介:
郭川磊
百度基礎架構部研發工程師
負責云原生產品的研發
本文基于百度云原生團隊『云原生基礎知識概述及實踐』系列視頻課程——『Kubernetes入門—Kubernetes實現應用高可用』梳理.
視頻課程可點擊:https://cloud.baidu.com/video-center/video.html?id=610進行學習。
導讀:
本節課是Kubernetes入門課程的最后一課。
可關注百度開發者中心公眾號,回復k8s獲取全部課件pdf電子版。
本節課主要分為以下四個板塊:
Kubernetes日志處理方案
以Prometheus為核心的統一監控方案
演示云原生環境日志采集與指標監控
總結日志采集與指標監控要點
01 容器日志搜集與管理
日志采集場景
日志采集場景主要分為以下四種:
**集群核心組件日志:**審計需要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等成熟日志收集組件可使用。
選型推薦
02 容器監控指標的采集與管理
監控場景
從監控類型劃分,可分為以下幾個場景:
資源監控:
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特點:
講師第三節,演示了Kubernetes環境下日志采集與指標監控的一個Demo。感興趣的同學可以點擊視頻觀看。https://cloud.baidu.com/video-center/video.html?id=610
以上就是本期課程的所有內容,也是Kubernetes系列課程的最后一課。感謝大家的關注與支持,感謝百度云原生團隊對課程的策劃與支持。可點擊下方鏈接回顧課程
Kubernetes入門——深入淺出講Docker
Kubernetes入門——Kubernetes工作原理及使用
Kubernetes入門——Kubernetes應用部署
Kubernetes入門——Kubernetes實現應用的高可用
總結
以上是生活随笔為你收集整理的Kubernetes入门——Kubernetes日志采集与监控告警的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 必看:Kubernetes 开发环境对比
- 下一篇: 百度 Serverless 架构揭秘与应