Kubernetes 微服务监控体系
作者|無(wú)敵碼農(nóng)
來(lái)源|無(wú)敵碼農(nóng)
監(jiān)控系統(tǒng)是運(yùn)維體系乃至整個(gè)軟件產(chǎn)品生命周期中最重要的一環(huán),完善的監(jiān)控可以幫助我們事前及時(shí)發(fā)現(xiàn)故障,事后快速追查定位問(wèn)題。而在以微服務(wù)為代表的云原生架構(gòu)體系中,系統(tǒng)分為多個(gè)層次,服務(wù)之間調(diào)用鏈路復(fù)雜,系統(tǒng)中需要監(jiān)控的目標(biāo)非常多,如果沒(méi)有一個(gè)完善的監(jiān)控系統(tǒng)就難以保證整體服務(wù)的持續(xù)穩(wěn)定。
監(jiān)控對(duì)象及分層
在實(shí)際場(chǎng)景中監(jiān)控系統(tǒng)按照監(jiān)控的對(duì)象及系統(tǒng)層次結(jié)構(gòu),從底向上可以依次劃分為基礎(chǔ)層、中間層、應(yīng)用層、業(yè)務(wù)層等多個(gè)層面的監(jiān)控。具體可如圖所示:
基礎(chǔ)層監(jiān)控就是對(duì)主機(jī)服務(wù)器(包括宿主機(jī)、容器)及其底層資源進(jìn)行監(jiān)控,以保證應(yīng)用程序運(yùn)行所依賴的基礎(chǔ)環(huán)境的穩(wěn)定運(yùn)行。基礎(chǔ)層監(jiān)控主要有兩個(gè)方向:
- 資源利用:是對(duì)像I/O利用率、CPU利用率、內(nèi)存使用率、磁盤(pán)使用率、網(wǎng)絡(luò)負(fù)載等這樣的硬件資源進(jìn)行監(jiān)控。避免因應(yīng)用程序本身或其它特殊情況引起的硬件資源耗盡而出現(xiàn)的服務(wù)故障。 
- 網(wǎng)絡(luò)通信:是對(duì)服務(wù)器之間的網(wǎng)絡(luò)狀態(tài)進(jìn)行監(jiān)控。網(wǎng)絡(luò)通信是互聯(lián)網(wǎng)的重要基石,如果主機(jī)之間的網(wǎng)絡(luò)出現(xiàn)如延遲過(guò)大、丟包率高這樣的網(wǎng)絡(luò)問(wèn)題,將會(huì)嚴(yán)重影響業(yè)務(wù)。 
需要說(shuō)明的是,在基于Kubernetes容器化技術(shù)的新型云原生基礎(chǔ)設(shè)施中,基礎(chǔ)層的監(jiān)控不僅要對(duì)宿主機(jī)本身進(jìn)行監(jiān)控,也要對(duì)Kubernetes集群狀態(tài)及其容器資源使用情況進(jìn)行監(jiān)控。這在后面我們構(gòu)建基于Kubernetes的基礎(chǔ)層監(jiān)控體系時(shí)將會(huì)具體介紹。
中間層監(jiān)控主要是指對(duì)諸如Nginx、Redis、MySQL、RocketMQ、Kafka等應(yīng)用服務(wù)所依賴的中間件軟件的監(jiān)控,它們的穩(wěn)定也是保證應(yīng)用程序持續(xù)可用的關(guān)鍵。一般來(lái)說(shuō)特定的中間件軟件都會(huì)根據(jù)自身特點(diǎn)構(gòu)建針對(duì)性的監(jiān)控體系。
應(yīng)用層監(jiān)控這里就是指對(duì)業(yè)務(wù)性服務(wù)程序的監(jiān)控,一般來(lái)說(shuō)我們對(duì)應(yīng)用程序監(jiān)控的關(guān)注點(diǎn)主要體現(xiàn)在以下幾個(gè)方面:
- HTTP接口請(qǐng)求訪問(wèn)。包括接口響應(yīng)時(shí)間、吞吐量等; 
- JVM監(jiān)控指標(biāo)。對(duì)于Java服務(wù),還會(huì)重點(diǎn)關(guān)注GC時(shí)間、線程數(shù)、FGC/YGC耗時(shí)等JVM性能相關(guān)的指標(biāo); 
- 資源消耗。應(yīng)用程序部署后會(huì)消耗一定的資源,例如應(yīng)用程序?qū)?nèi)存、CPU的消耗情況; 
- 服務(wù)的健康狀態(tài)。例如當(dāng)前服務(wù)是否存活,運(yùn)行是否穩(wěn)定等; 
- 調(diào)用鏈路。在微服務(wù)架構(gòu)中,由于調(diào)用鏈路變長(zhǎng),還需要重點(diǎn)監(jiān)控服務(wù)之間的調(diào)用關(guān)系和調(diào)用情況,避免局部上下游服務(wù)之間的鏈路故障引發(fā)系統(tǒng)全局性雪崩; 
業(yè)務(wù)層監(jiān)控也是監(jiān)控系統(tǒng)所關(guān)注的一個(gè)重要內(nèi)容,在實(shí)際場(chǎng)景中如果你只是讓?xiě)?yīng)用程序穩(wěn)定運(yùn)行那肯定是遠(yuǎn)遠(yuǎn)不夠的。因此,我們常常會(huì)對(duì)具體業(yè)務(wù)產(chǎn)生的數(shù)據(jù)進(jìn)行監(jiān)控,例如網(wǎng)站系統(tǒng)所關(guān)注的PV、UV等參數(shù);后端如交易之類的系統(tǒng)我們則會(huì)關(guān)注訂單量、成功率等。
業(yè)務(wù)指標(biāo)也是體現(xiàn)系統(tǒng)穩(wěn)定性的核心要素。任何系統(tǒng),如果出現(xiàn)了問(wèn)題,最先受到影響的肯定是業(yè)務(wù)指標(biāo)。對(duì)于核心業(yè)務(wù)指標(biāo)的設(shè)定因具體的業(yè)務(wù)和場(chǎng)景而異,所以對(duì)于業(yè)務(wù)層的監(jiān)控需要構(gòu)建具備業(yè)務(wù)特點(diǎn)的業(yè)務(wù)監(jiān)控系統(tǒng)。
常見(jiàn)的監(jiān)控指標(biāo)類型
在指標(biāo)類監(jiān)控系統(tǒng)中,通過(guò)統(tǒng)計(jì)指標(biāo)可以感性地認(rèn)識(shí)到整個(gè)系統(tǒng)的運(yùn)行情況。出現(xiàn)問(wèn)題后,各個(gè)指標(biāo)會(huì)首先出現(xiàn)波動(dòng),這些波動(dòng)會(huì)反映出系統(tǒng)是那些方面出了問(wèn)題,從而可以據(jù)此排查出現(xiàn)問(wèn)題的原因。下面我們分別來(lái)看下統(tǒng)計(jì)指標(biāo)到底有哪些類型,以及常見(jiàn)的統(tǒng)計(jì)指標(biāo)都有哪些,它是我們進(jìn)一步理解指標(biāo)類監(jiān)控系統(tǒng)的基礎(chǔ)。
從整體上看,常見(jiàn)的Metrics指標(biāo)類型主要有:計(jì)數(shù)器(Counter)、測(cè)量?jī)x(Gauge)、直方圖(Histogram)、摘要(Summary)這四類。它們的特點(diǎn)分別如下:
1.?計(jì)數(shù)器(Counter)
計(jì)數(shù)器是一種具有累加特性的指標(biāo)類型,一般這個(gè)值為Double或者Long類型。例如常見(jiàn)的統(tǒng)計(jì)指標(biāo)QPS、TPS等的值就是通過(guò)計(jì)數(shù)器的形式,然后配合一些統(tǒng)計(jì)函數(shù)計(jì)算得出的。
2.?測(cè)量?jī)x(Gauge)
表示某個(gè)時(shí)間點(diǎn),對(duì)某個(gè)數(shù)值的測(cè)量。測(cè)量?jī)x和計(jì)數(shù)器都可以用來(lái)查詢某個(gè)時(shí)間點(diǎn)的固定內(nèi)容的數(shù)值,但和計(jì)數(shù)器不同,測(cè)量?jī)x的值可以隨意變化,可以增加也可以減少。比如獲取Java線程池中活躍的線程數(shù),使用的是ThreadPoolExecutor中的getActiveCount方法;此外,還有比較常見(jiàn)的CPU使用率、內(nèi)存占用量等具體指標(biāo)都是通過(guò)測(cè)量?jī)x獲取的。
3.?直方圖(Histogram)
直方圖是一種將多個(gè)數(shù)值聚合在一起的數(shù)據(jù)結(jié)構(gòu),可以表示數(shù)據(jù)的分布情況。比如以常見(jiàn)的響應(yīng)耗時(shí)舉例,可以把響應(yīng)耗時(shí)數(shù)據(jù)分為多個(gè)桶(Bucket),每個(gè)桶代表一個(gè)耗時(shí)區(qū)間,例如0~100毫秒、100~500毫秒,以此類推。通過(guò)這樣的形式,可以直觀地看到一個(gè)時(shí)間段內(nèi)的請(qǐng)求耗時(shí)分布,這將有助于我們理解耗時(shí)情況分布。
4.?摘要(Summary)
摘要與直方圖類似,表示的也是一段時(shí)間內(nèi)的數(shù)據(jù)結(jié)果,但是摘要反應(yīng)的數(shù)據(jù)內(nèi)容不太一樣。摘要一般用于標(biāo)識(shí)分位值,分位值其實(shí)就是我們常說(shuō)的TP90、TP99等。例如有100個(gè)耗時(shí)數(shù)值,將所有的數(shù)值從低到高排列,取第90%的位置,這個(gè)位置的值就是TP90的值,如果這個(gè)桶對(duì)應(yīng)的值假設(shè)是80ms,那么就代表小于等于90%位置的請(qǐng)求都≤80ms。
Kubernetes微服務(wù)監(jiān)控體系
前面我們從整體上描述了監(jiān)控系統(tǒng)分層以及理解指標(biāo)類監(jiān)控系統(tǒng)所需要掌握的幾類常見(jiàn)的指標(biāo)類型。接下來(lái)我們重點(diǎn)探討基于Kubernetes的微服務(wù)監(jiān)控體系。
從監(jiān)控對(duì)象及系統(tǒng)分層的角度看,監(jiān)控系統(tǒng)需要監(jiān)控的范圍是非常廣泛的,但從微服務(wù)監(jiān)控的角度來(lái)說(shuō),如果你的微服務(wù)部署完全是基于Kubernetes云原生環(huán)境的,那么我們需要關(guān)注的監(jiān)控對(duì)象主要就是Kubernetes集群本身以及運(yùn)行其中的微服務(wù)應(yīng)用容器。例如對(duì)容器資源使用情況,如CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)、I/O等指標(biāo)的監(jiān)控。
當(dāng)然,這并不是說(shuō)像基礎(chǔ)層的物理機(jī)、虛擬機(jī)設(shè)備或者中間層軟件的監(jiān)控我們不需要關(guān)注,只是這部分工作一般會(huì)有專門(mén)的人員去維護(hù)。而如果使用的是云服務(wù),那么云服務(wù)廠商大都已經(jīng)為我們提供了監(jiān)控支持。此外,對(duì)于基礎(chǔ)物理層及大部分中間軟件的監(jiān)控并不是本文所要表達(dá)的重點(diǎn),所以也就不再做過(guò)多的實(shí)踐,大家對(duì)此有個(gè)全局的認(rèn)識(shí)即可。
而回到以Kubernetes為載體的微服務(wù)監(jiān)控體系,雖然曾經(jīng)Kubernetes項(xiàng)目的監(jiān)控體系非常復(fù)雜,社區(qū)中也有很多方案。但是這套體系發(fā)展到今天,已經(jīng)完全演變成了以Prometheus項(xiàng)目為核心的一套統(tǒng)一方案。在本節(jié)的內(nèi)容中我們就將演示如何圍繞Prometheus來(lái)構(gòu)建針對(duì)Kubernetes的微服務(wù)監(jiān)控系統(tǒng)。
1.?Prometheus簡(jiǎn)介
經(jīng)過(guò)行業(yè)多年的實(shí)踐和沉淀,目前監(jiān)控系統(tǒng)按實(shí)現(xiàn)方式主要可以分為四類:1)、基于時(shí)間序列的Metrics(度量指標(biāo))監(jiān)控;2)、基于調(diào)用鏈的Tracing(鏈路)監(jiān)控;3)、基于Logging(日志)的監(jiān)控;4)、健康性檢查(Healthcheck)。而在上述幾種監(jiān)控方式中Metrics監(jiān)控是其中最主要的一種監(jiān)控方式。
簡(jiǎn)單理解Metrics的表現(xiàn)形式,就是在離散的時(shí)間點(diǎn)上產(chǎn)生的數(shù)值點(diǎn)[Time,Value],由某個(gè)指標(biāo)組成的一組[Time,Value]數(shù)值點(diǎn)序列也被稱為時(shí)間序列,所以Metrics監(jiān)控也常常被稱為時(shí)間序列監(jiān)控。
如上所述,我們簡(jiǎn)單闡述了指標(biāo)系統(tǒng)的基本特點(diǎn),而接下來(lái)要介紹的Prometheus就是一款基于時(shí)間序列的開(kāi)源Metrics類型的監(jiān)控系統(tǒng),它可以很方便地進(jìn)行統(tǒng)計(jì)指標(biāo)的存儲(chǔ)、查詢和告警。從整體上看Prometheus的系統(tǒng)結(jié)構(gòu),如下圖所示:
從上圖中可以看出,Prometheus工作的核心,主要是使用Pull(拉取)的模式去收集被監(jiān)控對(duì)象的Metrics數(shù)據(jù)(監(jiān)控指標(biāo)數(shù)據(jù)),然后由Prometheus服務(wù)器將收到的指標(biāo)數(shù)據(jù)進(jìn)行聚合后存儲(chǔ)到TSDB(時(shí)間序列數(shù)據(jù)庫(kù),例如OpenTSDB、InfluxDB)中,以便后續(xù)根據(jù)時(shí)間自由檢索。
有了這套核心機(jī)制,Prometheus剩下的組件就主要是用來(lái)配合這套機(jī)制運(yùn)行的了。比如PushGateway,它可以允許被監(jiān)控對(duì)象以Push的方式向Prometheus推送Metrics數(shù)據(jù)。而Alertmanager,則可以根據(jù)Metrics信息靈活地設(shè)置報(bào)警。
此外,Prometheus還提供了一套完整的PromQL查詢語(yǔ)言,通過(guò)其提供的HTTP查詢接口,使用者可以很方便地將指標(biāo)數(shù)據(jù)與Grafana(可視化監(jiān)控指標(biāo)展示工具)結(jié)合起來(lái),從而靈活地定制屬于系統(tǒng)自身的關(guān)鍵指標(biāo)監(jiān)控Dashboard(看板)。
2.?Prometheus Operator安裝部署
前面我們簡(jiǎn)單介紹了Prometheus監(jiān)控系統(tǒng)的基本原理,接下來(lái)的內(nèi)容將以實(shí)操的方式演示如何使用Prometheus構(gòu)建一套針對(duì)Kubernetes集群的微服務(wù)監(jiān)控體系。
在實(shí)際的應(yīng)用場(chǎng)景中,針對(duì)不同的監(jiān)控對(duì)象Prometheus的部署方式也會(huì)有所不同。例如要監(jiān)控的對(duì)象是底層的物理機(jī),或者以物理機(jī)方式部署的數(shù)據(jù)庫(kù)等中間件系統(tǒng),那么這種情況下一般也會(huì)將Prometheus監(jiān)控系統(tǒng)的部署環(huán)境放置在物理機(jī)下。
而如果針對(duì)的是Kubernetes集群的監(jiān)控,那么現(xiàn)在主流的方式是采用Promethues-Operator將Promethues部署到Kubernetes集群之中,這樣能以更原生的方式實(shí)施對(duì)Kubernetes集群及容器的監(jiān)控。這里所說(shuō)的Promethues-Operator 是指專門(mén)針對(duì)Kubernetes的Promethues封裝包,它可以簡(jiǎn)化Promethues的部署和配置。
接下來(lái)我們具體演示如何通過(guò)Promethues-Operator在Kubernetes中快速安裝部署Promethues(Kubernetes實(shí)驗(yàn)環(huán)境可參考本專欄相關(guān)內(nèi)容),具體步驟如下:
1)安裝Helm
在本次安裝過(guò)程中,將使用到Kubernetes的包管理工具Helm。Helm是Kubernetes的一種包管理工具,與Java中的Maven、NodeJs中的Npm以及Ubuntu的apt和CentOS的yum類似。主要用來(lái)簡(jiǎn)化Kubernetes對(duì)應(yīng)用的部署和管理。
首先從Github下載相應(yīng)的Helm安裝包,具體命令參考如下:
#找到Github中Helm相關(guān)的發(fā)布包,參考鏈接如下 https://github.com/helm/helm/releases#確定好相關(guān)版本后,將具體安裝版本下載至某個(gè)安裝了kubectl的節(jié)點(diǎn)? wget?https://get.helm.sh/helm-v3.4.0-rc.1-linux-amd64.tar.gz解壓,并將下載的可執(zhí)行Helm文件拷貝到文件夾/usr/local/bin下,命令如下:
tar?-zxvf?helm-v3.4.0-rc.1-linux-amd64.tar.gz? #將下載的可執(zhí)行helm文件拷貝到文件夾/usr/local/bin下 mv?linux-amd64/helm?/usr/local/bin/之后執(zhí)行helm version,如果能看到Helm版本信息,就說(shuō)明Helm客戶端安裝成功了,具體如下:
$helm?version version.BuildInfo{Version:"v3.4.0-rc.1",? GitCommit:"7090a89efc8a18f3d8178bf47d2462450349a004",? GitTreeState:"clean",?GoVersion:"go1.14.10"}安裝完Helm客戶端后,由于一些公共Kubernetes包是在遠(yuǎn)程倉(cāng)庫(kù)中管理的,所以還需要添加helm charts(Helm中的Kubernetes安裝包又叫charts)官方倉(cāng)庫(kù),命令如下:
$helm?repo?add?stable?https://charts.helm.sh/stable查看本地helm倉(cāng)庫(kù)是否添加成功,命令如下:
$helm?repo?list NAME??????URL?????????????????????????? stable????https://charts.helm.sh/stable此時(shí),查看Helm倉(cāng)庫(kù)就能看到各種組件的charts列表了,命令效果如下:
$helm?search?repo?stableNAME??????????????????????????????CHART?VERSION???APP?VERSION?????DESCRIPTION??????????????????????????????????????? stable/acs-engine-autoscaler??????2.1.3???????????2.1.1???????????Scales?worker?nodes?within?agent?pools???????????? stable/aerospike? ...如上所示,此時(shí)通過(guò)“helm search”命令就可以查看到各種stable版本的Kubernetes安裝包了!
2)Helm搜索Prometheus-Operator安裝包
在具體安裝Prometheus-Operator之前,我們先用“helm”命令搜索Prometheus相關(guān)的charts包,命令如下:
$?helm?search?repo?prometheus具體搜索結(jié)果如下圖所示:
如上圖所示,我們可以看到Helm倉(cāng)庫(kù)中可以搜索到版本為0.38.1的“stable/prometheus-operator”的安裝包。接下來(lái)就可以通過(guò)helm具體安裝了!
3)Helm安裝Prometheus-Operator監(jiān)控系統(tǒng)
接下來(lái)啊,通過(guò)Helm具體安裝prometheus-operator監(jiān)控系統(tǒng),命令如下:
#創(chuàng)建k8s名稱空間 kubectl?create?ns?monitoring#通過(guò)helm安裝promethues-operator監(jiān)控系統(tǒng) helm?install?promethues-operator?stable/prometheus-operator?-n?monitoring執(zhí)行安裝命令后,輸出結(jié)果如下:
WARNING:?This?chart?is?deprecated manifest_sorter.go:192:?info:?skipping?unknown?hook:?"crd-install" manifest_sorter.go:192:?info:?skipping?unknown?hook:?"crd-install" manifest_sorter.go:192:?info:?skipping?unknown?hook:?"crd-install" manifest_sorter.go:192:?info:?skipping?unknown?hook:?"crd-install" manifest_sorter.go:192:?info:?skipping?unknown?hook:?"crd-install" manifest_sorter.go:192:?info:?skipping?unknown?hook:?"crd-install" NAME:?promethues-operator LAST?DEPLOYED:?Mon?Oct?26?10:15:45?2020 NAMESPACE:?monitoring STATUS:?deployed REVISION:?1 NOTES: ******************* ***?DEPRECATED?**** ******************* *?stable/prometheus-operator?chart?is?deprecated. *?Further?development?has?moved?to?https://github.com/prometheus-community/helm-charts *?The?chart?has?been?renamed?kube-prometheus-stack?to?more?clearly?reflect *?that?it?installs?the?`kube-prometheus`?project?stack,?within?which?Prometheus *?Operator?is?only?one?component.The?Prometheus?Operator?has?been?installed.?Check?its?status?by?running:kubectl?--namespace?monitoring?get?pods?-l?"release=promethues-operator"Visit?https://github.com/coreos/prometheus-operator?for?instructions?on?how to?create?&?configure?Alertmanager?and?Prometheus?instances?using?the?Operator.執(zhí)行完安裝命令后,查看具體的Kubernetes Pods信息,命令如下:
$?kubectl?get?po?-n?monitoringNAME?????????????????????????????????????????????????????READY???STATUS????RESTARTS???AGE alertmanager-promethues-operator-promet-alertmanager-0???2/2?????Running???0??????????5m42s prometheus-promethues-operator-promet-prometheus-0???????3/3?????Running???1??????????5m31s promethues-operator-grafana-5df74d9cb4-5d475?????????????2/2?????Running???0??????????6m53s promethues-operator-kube-state-metrics-89d8c459f-449k4???1/1?????Running???0??????????6m53s promethues-operator-promet-operator-79f8b5f7ff-pfpbl?????2/2?????Running???0??????????6m53s promethues-operator-prometheus-node-exporter-6ll4z???????1/1?????Running???0??????????6m53s promethues-operator-prometheus-node-exporter-bvdb4???????1/1?????Running???0??????????6m53s如上所示,可以看到Prometheus監(jiān)控系統(tǒng)相關(guān)的組件都以Pod的方式運(yùn)行在了Kubernetes集群中。
Prometheus監(jiān)控效果演示
通過(guò)前面的實(shí)際操作,我們通過(guò)Helm的方式已經(jīng)將Prometheus Operator安裝包部署在了Kubernetes集群之中。而此時(shí)的Prometheus實(shí)際上就已經(jīng)開(kāi)始發(fā)揮作用,并采集了各類Kubernetes的運(yùn)行指標(biāo)信息。可以通過(guò)Promethues內(nèi)置的監(jiān)控界面對(duì)此進(jìn)行查看,具體步驟如下:
查看Kubernetes中查看內(nèi)置監(jiān)控界面所在的Pod節(jié)點(diǎn),命令如下:
kubectl?-n?monitoring?get?svc使用nodeport方式將promethues-operator內(nèi)置界面服務(wù)暴露在集群外,并指定使用30444端口,命令如下:
kubectl??patch?svc?promethues-operator-promet-prometheus?-n?monitoring?-p?'{"spec":{"type":"NodePort","ports":[{"port":9090,"targetPort":9090,"nodePort":30444}]}}' service/promethues-operator-promet-prometheus?patched此時(shí)在瀏覽器中輸入Pod節(jié)點(diǎn)所在的宿主機(jī)IP+端口地址,URL示例如下:
http://10.211.55.11:30444/graph此時(shí)就可以看到Promethues內(nèi)置的監(jiān)控可視化界面了,效果如下圖所示:
而如果此時(shí)以PromeQL的方式查看一個(gè)具體指標(biāo),以“http_requests_total”為例,展示效果如圖所示:
由此說(shuō)明,此時(shí)Promethues監(jiān)控系統(tǒng)已經(jīng)開(kāi)始運(yùn)行,并采集了相關(guān)Metrics指標(biāo)數(shù)據(jù)!
Grafana可視化監(jiān)控系統(tǒng)
Grafana是一個(gè)強(qiáng)大的跨平臺(tái)的開(kāi)源度量分析和可視化工具,可以將采集的指標(biāo)數(shù)據(jù)進(jìn)行定制化的圖形界面展示,經(jīng)常被用作為時(shí)間序列數(shù)據(jù)和應(yīng)用程序分析的可視化。Grafana支持多種數(shù)據(jù)源,如InfluxDB、OpenTSDB、ElasticSearch以及Prometheus。
前面我們?cè)贙ubernetes中安裝部署Prometheus-Operator時(shí),實(shí)際上Grafana就已經(jīng)被集成并運(yùn)行了,可以通過(guò)Kubernetes的相關(guān)命令查詢Grafana的實(shí)際運(yùn)行Pod,并將其Web端口對(duì)外進(jìn)行暴露,具體如下:
#查看服務(wù)節(jié)點(diǎn)信息 kubectl?-n?monitoring?get?svc#使用nodeport方式將promethues-operator-grafana暴露在集群外,指定使用30441端口 kubectl??patch?svc?promethues-operator-grafana?-n?monitoring?-p?'{"spec":{"type":"NodePort","ports":[{"port":80,"targetPort":3000,"nodePort":30441}]}}'需要注意由于Grafana的應(yīng)用運(yùn)行的默認(rèn)端口為80,為避免實(shí)驗(yàn)環(huán)境沖突,這里映射時(shí)將目標(biāo)容器端口指定為3000,并最終將節(jié)點(diǎn)端口映射為30441。完成后,瀏覽器輸入U(xiǎn)RL:
#IP地址為映射命令執(zhí)行時(shí)所在的節(jié)點(diǎn) http://10.211.55.11:30441如果映射正常,此時(shí)會(huì)返回Grafana可視化圖形界面的登錄界面,如圖所示:
這里缺省登錄賬號(hào)密碼為:admin/prom-operator。輸入后可進(jìn)入Grafana主界面如下圖所示:
可以看到部署完成的Grafana已經(jīng)默認(rèn)內(nèi)置了許多針對(duì)Kubernetes平臺(tái)的企業(yè)級(jí)監(jiān)控Dashboard,例如針對(duì)Kubernetes集群組件的“Kubernetes/API server”、“Kubernetes/Kubelet”,以及針對(duì)Kubernetees計(jì)算資源的“Kubernetes/Compute Resources/Pod”、“Kubernetes/Compute Resources/Workload”等等。
這里我們找一個(gè)針對(duì)Kubernetes物理節(jié)點(diǎn)的“Nodes”監(jiān)控Dashboard,點(diǎn)擊打開(kāi)后看到的監(jiān)控效果如下圖所示:
上圖所示的Dashboard中展示了Kubernetes集群所在的各物理節(jié)點(diǎn)CPU、負(fù)載、內(nèi)存、磁盤(pán)I/O、磁盤(pán)空間、網(wǎng)絡(luò)傳輸?shù)扔布Y源的使用情況。從這些豐富的視圖可以看出Grafana強(qiáng)大的監(jiān)控指標(biāo)可視化能力!
后記
本文給大家從理論到實(shí)踐簡(jiǎn)單介紹了Kubernetes微服務(wù)監(jiān)控體系的構(gòu)建步驟,希望能夠?qū)Υ蠹覍W(xué)習(xí)Kubernetes有所幫助。目前以Kubernetes為代表的容器化技術(shù)已經(jīng)成為現(xiàn)代軟件應(yīng)用發(fā)布的標(biāo)準(zhǔn)方式,作為一名普通研發(fā)人員,對(duì)Kubernetes的學(xué)習(xí)將有助于我們更深入的理解整體軟件系統(tǒng)的構(gòu)建原理,也是我們進(jìn)階提升必不可少的知識(shí)儲(chǔ)備!
往期推薦
做安全操作系統(tǒng),這位技術(shù)老兵很認(rèn)真
云原生時(shí)代,底層性能如何調(diào)優(yōu)?
到底什么是“無(wú)源物聯(lián)網(wǎng)”?
張一鳴購(gòu)得元宇宙入場(chǎng)券,誰(shuí)將是頭號(hào)玩家?
點(diǎn)分享
點(diǎn)收藏
點(diǎn)點(diǎn)贊
點(diǎn)在看
總結(jié)
以上是生活随笔為你收集整理的Kubernetes 微服务监控体系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: Redis 会遇到的「坑」,你踩过几个?
- 下一篇: 华为徐直军:以持续创新加快数字化发展
