Kubernetes入门——Kubernetes日志采集与监控告警
作者簡(jiǎn)介:
郭川磊
百度基礎(chǔ)架構(gòu)部研發(fā)工程師
負(fù)責(zé)云原生產(chǎn)品的研發(fā)
本文基于百度云原生團(tuán)隊(duì)『云原生基礎(chǔ)知識(shí)概述及實(shí)踐』系列視頻課程——『Kubernetes入門(mén)—Kubernetes實(shí)現(xiàn)應(yīng)用高可用』梳理.
視頻課程可點(diǎn)擊:https://cloud.baidu.com/video-center/video.html?id=610進(jìn)行學(xué)習(xí)。
導(dǎo)讀:
本節(jié)課是Kubernetes入門(mén)課程的最后一課。
可關(guān)注百度開(kāi)發(fā)者中心公眾號(hào),回復(fù)k8s獲取全部課件pdf電子版。
本節(jié)課主要分為以下四個(gè)板塊:
Kubernetes日志處理方案
以Prometheus為核心的統(tǒng)一監(jiān)控方案
演示云原生環(huán)境日志采集與指標(biāo)監(jiān)控
總結(jié)日志采集與指標(biāo)監(jiān)控要點(diǎn)
01 容器日志搜集與管理
日志采集場(chǎng)景
日志采集場(chǎng)景主要分為以下四種:
**集群核心組件日志:**審計(jì)需要Kube-apiserver日志,診斷調(diào)度需要kube-scheduler日志,接入層流量分析需要Ingress日志。
**主機(jī)內(nèi)核日志:**內(nèi)核日志可以用于幫助開(kāi)發(fā)及運(yùn)維同學(xué)診斷影響節(jié)點(diǎn)穩(wěn)定的異常,如:文件系統(tǒng)異常,網(wǎng)絡(luò)棧異常,設(shè)備驅(qū)動(dòng)異常等。
應(yīng)用運(yùn)行時(shí)日志:Docker是最常見(jiàn)的容器運(yùn)行時(shí),可以利用Docker和Kubelet日志排查Pod創(chuàng)建和啟動(dòng)失敗等問(wèn)題。
業(yè)務(wù)應(yīng)用日志:通過(guò)分析業(yè)務(wù)的運(yùn)行日志分析和觀察業(yè)務(wù)狀態(tài),診斷異常。
日志采集目標(biāo)
Kubernetes對(duì)容器日志的期望處理方式為:集群級(jí)日志處理(cluster-level-logging)即:與容器、Pod、節(jié)點(diǎn)生命周期完全無(wú)關(guān)。
對(duì)于一個(gè)容器,當(dāng)應(yīng)用將日志輸出到stdout和stderr后,docker默認(rèn)將這些日志輸出到宿主機(jī)上一個(gè)JSON文件中。
日志采集方式
Kubernetes本身并不會(huì)對(duì)用戶進(jìn)行任何的日志搜集工作。為了實(shí)現(xiàn)集群級(jí)日志處理,需要在集群前,提前對(duì)日志采集管理進(jìn)行方案規(guī)劃。Kubernetes本身推薦3種日志方案。
日志采集方式1:使用節(jié)點(diǎn)級(jí)日志代理
核心是logging-agent (fluentd,etc );
Logging-agent以DaemonSet方式運(yùn)行在節(jié)點(diǎn)上;
掛載宿主機(jī)上的容器日志目錄;
轉(zhuǎn)發(fā)日志至后端存儲(chǔ)(ElasticSearch, etc);
優(yōu)點(diǎn):對(duì)應(yīng)用和Pod完全無(wú)侵入,一個(gè)節(jié)點(diǎn)僅需部署一個(gè)agent。
缺點(diǎn):要求應(yīng)用日志直接輸出至容器的stdout和stderr。
日志采集方式2:使用sidecar容器和日志代理
容器全部或部分日志輸出到文件
一個(gè)或多個(gè)sidecar容器將應(yīng)用程序日志傳送到自己的stdout和stderr。
優(yōu)點(diǎn):能夠繼續(xù)使用日志采集方式1。
缺點(diǎn):成倍增加磁盤(pán)占用,造成浪費(fèi)。(應(yīng)用和sidecar容器寫(xiě)入兩份相同日志文件)
日志采集方式3:使用具有日志代理功能的sidecar容器
相當(dāng)于將logging-agent直接集成進(jìn)Pod。
應(yīng)用和輸出日志至stdout&stderr或文件。
Logging-agent的輸入源為應(yīng)用日志文件。
優(yōu)點(diǎn):部署簡(jiǎn)單,對(duì)宿主機(jī)友好。
缺點(diǎn):1.Sidecar容器可能消耗較多資源,甚至拖掛應(yīng)用容器。
2. 無(wú)法使用kubectl logs命令查看容器日志。
總結(jié):
實(shí)現(xiàn)集群級(jí)日志采集的三種方式:
- 使用節(jié)點(diǎn)級(jí)日志代理。
- 使用sidecar容器和日志代理。
- 使用具有日志代理功能的sidecar容器。
建議:使用方案1,將應(yīng)用日志輸出到stdout&stderr,通過(guò)宿主機(jī)上直接部署logging-agent的方式集中處理日志。
- 管理簡(jiǎn)單。
- 可以使用kubectl logs命令查看日志。
- 宿主機(jī)本身可能已有rstlogd等成熟日志收集組件可使用。
選型推薦
02 容器監(jiān)控指標(biāo)的采集與管理
監(jiān)控場(chǎng)景
從監(jiān)控類(lèi)型劃分,可分為以下幾個(gè)場(chǎng)景:
資源監(jiān)控:
CPU,內(nèi)存,網(wǎng)絡(luò)等資源類(lèi)指標(biāo),常以數(shù)值,百分比為單位進(jìn)行統(tǒng)計(jì),是最常見(jiàn)的資源監(jiān)控方式。
性能監(jiān)控:
應(yīng)用的內(nèi)部監(jiān)控。通常是Hock機(jī)制在虛擬機(jī)層,字節(jié)碼執(zhí)行層隱式回調(diào),或者在應(yīng)用層顯式注入,獲取更深層次的監(jiān)控指標(biāo),常用來(lái)應(yīng)用診斷與調(diào)優(yōu)。
比如Jvm通過(guò)Hock機(jī)制,拿到類(lèi)似Jvm里面的垃圾回收的次數(shù),各種內(nèi)存帶的分布以及網(wǎng)絡(luò)連接數(shù)的一些指標(biāo)。通過(guò)這樣的方式來(lái)進(jìn)行應(yīng)用的診斷與調(diào)優(yōu)。
安全監(jiān)控:
針對(duì)安全進(jìn)行一系列監(jiān)控策略,例如越權(quán)管理,安全漏洞掃描等。
事件監(jiān)控:
Kubernetes中特有的監(jiān)控方式,貼合Kubernetes設(shè)計(jì)理念,作為常規(guī)監(jiān)控方案的補(bǔ)充。為什么說(shuō)事件監(jiān)控貼合Kubernetes設(shè)計(jì)理念呢?這是因?yàn)镵ubernetes其中一個(gè)設(shè)計(jì)理念就是基于狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換。從正常狀態(tài)轉(zhuǎn)換成另一個(gè)狀態(tài)的時(shí)候,會(huì)發(fā)生一個(gè)Normal級(jí)別的事件(也就是正常的事件)而從一個(gè)正常狀態(tài)轉(zhuǎn)換成異常狀態(tài)時(shí),平臺(tái)會(huì)觸發(fā)一個(gè)Warning級(jí)別(也就是警告級(jí)別的事件)通常,Warning級(jí)別的事件是我們關(guān)心的事件。
而事件監(jiān)控就可以把Normal級(jí)別的事件或Warning級(jí)別的事件離線存儲(chǔ)到數(shù)據(jù)中心,然后通過(guò)數(shù)據(jù)中心的分析與報(bào)警,將相應(yīng)的異常通過(guò)短信,郵件的方式暴露,彌補(bǔ)常規(guī)監(jiān)控的弊端。
Prometheus的起源及現(xiàn)狀
Prometheus與Kubernetes一樣,來(lái)自于Borg體系。原型叫做BorgMon,是與Borg同時(shí)誕生的內(nèi)部監(jiān)控系統(tǒng)。而Prometheus項(xiàng)目發(fā)起的元嬰也與Kubernetes類(lèi)似,希望通過(guò)對(duì)用戶更友好的方式,將Google內(nèi)部系統(tǒng)的設(shè)計(jì)理念傳遞給開(kāi)發(fā)者和用戶。
Kubernetes監(jiān)控體系曾經(jīng)非常繁雜,但今天已經(jīng)演變成了以Prometheus為核心的一套統(tǒng)一的方案。
Prometheus的架構(gòu)與工作方式
Prometheus指標(biāo)來(lái)源:
- 宿主機(jī)的監(jiān)控?cái)?shù)據(jù):需要借助Node Exporter向外暴露;Exporter代替被監(jiān)控對(duì)象來(lái)向Prometheus暴露可以被抓取的指標(biāo)信息。 Kubernetes組件如APIServer,
- kubelet等的/metrics AP:除CPU,內(nèi)存外,還包括各個(gè)組件的核心監(jiān)控指標(biāo)。
- Kubernetes核心的監(jiān)控?cái)?shù)據(jù):包括Pod、Node、容器、Service等主要核心概念的metrics,其中容器相關(guān)的指標(biāo)來(lái)源于kubectl內(nèi)置的cAdvisor服務(wù)。
Prometheus特點(diǎn):
講師第三節(jié),演示了Kubernetes環(huán)境下日志采集與指標(biāo)監(jiān)控的一個(gè)Demo。感興趣的同學(xué)可以點(diǎn)擊視頻觀看。https://cloud.baidu.com/video-center/video.html?id=610
以上就是本期課程的所有內(nèi)容,也是Kubernetes系列課程的最后一課。感謝大家的關(guān)注與支持,感謝百度云原生團(tuán)隊(duì)對(duì)課程的策劃與支持??牲c(diǎn)擊下方鏈接回顧課程
Kubernetes入門(mén)——深入淺出講Docker
Kubernetes入門(mén)——Kubernetes工作原理及使用
Kubernetes入門(mén)——Kubernetes應(yīng)用部署
Kubernetes入門(mén)——Kubernetes實(shí)現(xiàn)應(yīng)用的高可用
總結(jié)
以上是生活随笔為你收集整理的Kubernetes入门——Kubernetes日志采集与监控告警的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 必看:Kubernetes 开发环境对比
- 下一篇: 百度 Serverless 架构揭秘与应