王駿翔
(中遠(yuǎn)海運(yùn)科技股份有限公司, 上海 200135)
近年來,在產(chǎn)業(yè)轉(zhuǎn)型過程中,我國各行業(yè)企業(yè)紛紛利用云計(jì)算和人工智能等新興技術(shù)提升自身的生產(chǎn)效率、創(chuàng)新能力和資源利用率,促進(jìn)發(fā)展模式變革,為實(shí)現(xiàn)數(shù)字化轉(zhuǎn)型奠定了堅(jiān)實(shí)基礎(chǔ)。當(dāng)前,我國各行業(yè)企業(yè)的信息技術(shù)(Information Technology,IT)基礎(chǔ)架構(gòu)向云遷移已成為主流趨勢,各行業(yè)的業(yè)務(wù)系統(tǒng)上云率不斷提升,而隨著數(shù)字化轉(zhuǎn)型需求的增加,云計(jì)算在數(shù)字化轉(zhuǎn)型和智能化升級(jí)過程中將得到更廣泛的應(yīng)用。數(shù)字化轉(zhuǎn)型的前提是對(duì)企業(yè)資源進(jìn)行優(yōu)化,而云計(jì)算以其強(qiáng)大的彈性和高可拓展性,不僅能實(shí)現(xiàn)IT資源優(yōu)化,而且能實(shí)現(xiàn)規(guī)模效應(yīng)最大化。隨著云計(jì)算技術(shù)的不斷發(fā)展,諸多企業(yè)紛紛圍繞其軟件和硬件基礎(chǔ)環(huán)境的交付特點(diǎn),建設(shè)或使用滿足自身需求的云計(jì)算平臺(tái)或公有云服務(wù)。企業(yè)級(jí)應(yīng)用的云資源服務(wù)也已從傳統(tǒng)的云資源向容器云、微服務(wù)和各種PaaS服務(wù)演變。
本文結(jié)合實(shí)際工程案例,利用開源的云計(jì)算技術(shù)和監(jiān)控分析技術(shù),提出一種適用于大型集團(tuán)型企業(yè)的云計(jì)算多云資源和云服務(wù)性能監(jiān)控系統(tǒng)的技術(shù)。對(duì)技術(shù)方案的建設(shè)需求、技術(shù)理論和實(shí)現(xiàn)方式進(jìn)行詳細(xì)闡述。以某大型集團(tuán)型企業(yè)為例,介紹其在多云資源和多云服務(wù)環(huán)境下的新一代監(jiān)控告警方式的技術(shù)變革。
近年來,越來越多的企業(yè)開始將自己的核心生產(chǎn)業(yè)務(wù)系統(tǒng)向云遷移。在上云應(yīng)用過程中,對(duì)云計(jì)算資源的多元化服務(wù)需求隨著云計(jì)算技術(shù)的演變發(fā)生著質(zhì)的變化。
傳統(tǒng)信息系統(tǒng)的底座是操作系統(tǒng)(如Windows、Linux和Docker等),上層由用于支撐業(yè)務(wù)運(yùn)作的各種中間件構(gòu)成(數(shù)據(jù)庫有Mysql和Oracle;應(yīng)用服務(wù)有apache、tomcat、redis和kafka等)。隨著云計(jì)算技術(shù)的不斷發(fā)展,傳統(tǒng)硬件架構(gòu)已轉(zhuǎn)化為云化架構(gòu),既有虛擬化環(huán)境,又有容器環(huán)境,以及各種微服務(wù)和PaaS服務(wù)等;同時(shí),隨著公有云、行業(yè)云和專有云的不斷衍生,出現(xiàn)了企業(yè)多云和混合架構(gòu)的巨變。
圖1為多云服務(wù)的演變示圖。
圖1 多云服務(wù)的演變示圖
未來,數(shù)字經(jīng)濟(jì)將促使我國云計(jì)算產(chǎn)業(yè)得到快速發(fā)展。從技術(shù)層面來看,新技術(shù)和新應(yīng)用將給云計(jì)算市場帶來新的活力,使用好用于支撐業(yè)務(wù)系統(tǒng)的各種多云服務(wù)逐漸成為企業(yè)數(shù)字化轉(zhuǎn)型進(jìn)程中必不可少的重要環(huán)節(jié)。
對(duì)于已完成云基礎(chǔ)資源納管和交付的“上云”企業(yè)而言,隨著云計(jì)算技術(shù)的不斷發(fā)展和業(yè)務(wù)形態(tài)的不斷變化,企業(yè)多云環(huán)境、跨云架構(gòu)和容器微服務(wù)等云服務(wù)的形態(tài)逐漸顯露,并迅速得到應(yīng)用和發(fā)展。
云計(jì)算將各類異構(gòu)的、動(dòng)態(tài)的資源分布于整體的云計(jì)算服務(wù)中,形成巨大的異構(gòu)云資源池,用戶可依照按需使用的原則獲取服務(wù)。云服務(wù)所提供服務(wù)的質(zhì)量依賴于云計(jì)算整體服務(wù)架構(gòu)和資源的穩(wěn)定性,可通過對(duì)云計(jì)算服務(wù)中的傳統(tǒng)云主機(jī)、容器云資源和多云服務(wù)資源進(jìn)行實(shí)時(shí)監(jiān)控,為上層整體的云服務(wù)體系持續(xù)賦能,以提供高效、穩(wěn)定、健壯的云運(yùn)行環(huán)境。
1.2.1 傳統(tǒng)云主機(jī)資源的監(jiān)控需求
傳統(tǒng)云主機(jī)虛擬化技術(shù)是云計(jì)算服務(wù)的基礎(chǔ),云主機(jī)的性能和穩(wěn)定性直接影響著整體云服務(wù)的效率和用戶體驗(yàn),對(duì)云主機(jī)運(yùn)行的穩(wěn)定性和性能進(jìn)行監(jiān)控顯得尤為重要。通過對(duì)云主機(jī)進(jìn)行監(jiān)控,獲取資源實(shí)時(shí)監(jiān)控?cái)?shù)據(jù),并對(duì)性能歷史數(shù)據(jù)進(jìn)行分析,既可有效地對(duì)云主機(jī)資源進(jìn)行動(dòng)態(tài)的配置調(diào)整,又能根據(jù)云主機(jī)占用宿主機(jī)資源的情況對(duì)云主機(jī)進(jìn)行動(dòng)態(tài)遷移。因此,云主機(jī)的資源監(jiān)控在云計(jì)算服務(wù)中占據(jù)著非常重要的位置。
1.2.2 容器云資源的監(jiān)控需求
隨著云計(jì)算技術(shù)的不斷發(fā)展,微服務(wù)和容器技術(shù)已成為企業(yè)廣泛應(yīng)用的新型云技術(shù),對(duì)容器云資源的穩(wěn)定性和性能監(jiān)控的需求變得日趨迫切。相較于傳統(tǒng)云主機(jī),容器環(huán)境是運(yùn)算資源隨機(jī)池化的,存在著1個(gè)節(jié)點(diǎn)上運(yùn)行著隨機(jī)調(diào)配的多個(gè)容器的情況,很難通過傳統(tǒng)監(jiān)控手段區(qū)分每個(gè)容器的資源占用情況和負(fù)載情況。除了需對(duì)容器的性能指標(biāo)進(jìn)行實(shí)時(shí)監(jiān)控以外,還需對(duì)整個(gè)容器群集系統(tǒng)的各組件和運(yùn)算節(jié)點(diǎn)的性能、流量、用戶行為模式和應(yīng)用程序性能等傳統(tǒng)因素進(jìn)行監(jiān)控,保證容器基礎(chǔ)設(shè)施穩(wěn)定、高效運(yùn)行。
1.2.3 多云服務(wù)資源的監(jiān)控需求
當(dāng)前,通過利用云計(jì)算技術(shù)和自動(dòng)服務(wù)編排技術(shù)等,能實(shí)現(xiàn)基于云資源的靈活配置,由此衍生出的諸多aPaaS云服務(wù)已成為企業(yè)快速交付業(yè)務(wù)的基礎(chǔ)。針對(duì)這些aPaaS云服務(wù)(例如Nginx、HAProxy、JVM、MQ、Kafka、Oracle、MySQL和Redis等),實(shí)時(shí)掌握和了解相應(yīng)云服務(wù)的健壯性和性能指標(biāo)是支撐上層云業(yè)務(wù)的關(guān)鍵。通過對(duì)多云服務(wù)資源監(jiān)控指標(biāo)進(jìn)行采集,既能在性能調(diào)優(yōu)時(shí)滿足實(shí)時(shí)性能分析的需求,又能在日后通過歷史數(shù)據(jù)回溯業(yè)務(wù)故障點(diǎn)時(shí)提供有效的手段,搭配云主機(jī)和容器等監(jiān)控?cái)?shù)據(jù),更可全方位地支撐和保障整體云服務(wù)的狀態(tài)。
應(yīng)對(duì)不斷新增的云計(jì)算服務(wù),通過有效的手段對(duì)傳統(tǒng)云主機(jī)服務(wù)、容器云服務(wù)和多云服務(wù)等云資源進(jìn)行實(shí)時(shí)、精準(zhǔn)的監(jiān)控?cái)?shù)據(jù)采集和性能分析,不僅是保障企業(yè)上層各業(yè)務(wù)系統(tǒng)穩(wěn)定運(yùn)行的基石,而且是將傳統(tǒng)被動(dòng)式運(yùn)維轉(zhuǎn)化為主動(dòng)防護(hù)和監(jiān)管的有效措施。
對(duì)于大型集團(tuán)型企業(yè)而言,通過構(gòu)建數(shù)據(jù)中心級(jí)別的統(tǒng)一多云監(jiān)控體系,可在滿足多元化業(yè)務(wù)發(fā)展需求的同時(shí),建立穩(wěn)定、高效的開放式監(jiān)控平臺(tái),輻射所有云應(yīng)用資源和上云系統(tǒng)。各上云企業(yè)和系統(tǒng)在此基礎(chǔ)上,只需關(guān)注自身的產(chǎn)品服務(wù)能力,無需單獨(dú)構(gòu)建多云監(jiān)控系統(tǒng),達(dá)到企業(yè)數(shù)字化轉(zhuǎn)型和降本增效的目標(biāo)。
在設(shè)計(jì)該技術(shù)方案時(shí),重點(diǎn)關(guān)注企業(yè)級(jí)大型數(shù)據(jù)中心多云資源和多云服務(wù)的性能監(jiān)控場景,主要提升多種云資源在性能監(jiān)控?cái)?shù)據(jù)采集、數(shù)據(jù)匯總清洗、分析展示和異常告警等方面的靈活性和可擴(kuò)展性。在多云資源的監(jiān)控方案中,采用基于開源的Prometheus技術(shù)實(shí)現(xiàn)上述功能。
Prometheus 是一套開源的系統(tǒng)監(jiān)控報(bào)警框架。采用TSDB(Time Series Database)時(shí)序列數(shù)據(jù)庫為監(jiān)控指標(biāo)和鍵值建立多維度數(shù)據(jù)模型。通過HTTP協(xié)議,周期性地抓取被監(jiān)控組件的狀態(tài),受監(jiān)控的組件根據(jù)其組件類型提供對(duì)應(yīng)的HTTP接口,即可進(jìn)行對(duì)接。Prometheus架構(gòu)拓?fù)鋱D見圖2。
圖2 Prometheus架構(gòu)拓?fù)鋱D
Prometheus的技術(shù)特點(diǎn)主要有:
1) 采用TSDB(Time Series Database)時(shí)序列數(shù)據(jù)庫的多維度數(shù)據(jù)模型;
2) 可利用各種維度靈活的PromQL查詢語言;
3) 不依賴分布式存儲(chǔ),單個(gè)服務(wù)器節(jié)點(diǎn)是自主的;
圖3 Prometheus技術(shù)方法的實(shí)施步驟
4) 通過基于HTTP的Pull方式采集時(shí)序數(shù)據(jù);
5) 可通過中間網(wǎng)關(guān)(Pushgateway)進(jìn)行時(shí)序列數(shù)據(jù)推送;
6) 通過服務(wù)發(fā)現(xiàn)或靜態(tài)配置發(fā)現(xiàn)目標(biāo)服務(wù)對(duì)象;
7) 支持多種多樣的圖表和界面展示,比如Grafana等。
Prometheus技術(shù)方法的實(shí)施步驟見圖3。在該技術(shù)方法中,利用云計(jì)算平臺(tái)中的自動(dòng)化能力部署監(jiān)控采集器,對(duì)多云資源和多云服務(wù)中的可用性和性能指標(biāo)進(jìn)行監(jiān)控;通過確定云可用性和性能監(jiān)控指標(biāo)及鍵值確定監(jiān)控側(cè)策略和閾值;通過監(jiān)控采集器監(jiān)控對(duì)應(yīng)的組件;通過多維度建模及云計(jì)算平臺(tái)下的分權(quán)管控和聯(lián)動(dòng)進(jìn)行數(shù)據(jù)分析;針對(duì)不同云資源展示對(duì)應(yīng)的監(jiān)控?cái)?shù)據(jù)和分析結(jié)果;通過采用底層性能采集服務(wù)的群集,統(tǒng)一性能監(jiān)控?cái)?shù)據(jù)的告警。此外,提供相應(yīng)的告警系統(tǒng),有效提升多種云資源在性能監(jiān)控?cái)?shù)據(jù)采集、數(shù)據(jù)匯總清洗、分析展示和異常告警等方面的靈活性和可擴(kuò)展性。
在采集性能監(jiān)控?cái)?shù)據(jù)時(shí),主要利用Prometheus Exporters實(shí)現(xiàn)該功能。Exporters是Prometheus監(jiān)控中的重要組成部分,負(fù)責(zé)對(duì)數(shù)據(jù)指標(biāo)進(jìn)行采集。開源社區(qū)官方給出的插件有node_exporter、blackbox_exporter、mysqld_exporter和snmp_exporter等,第三方的插件有redis_exporter和cadvisor等。
在該技術(shù)方案中,針對(duì)云主機(jī)、數(shù)據(jù)庫和容器部分的監(jiān)控采集采用的主要插件及其用途見表1。
表1 針對(duì)云主機(jī)、數(shù)據(jù)庫和容器部分的監(jiān)控采集采用的主要插件及其用途
Prometheus server會(huì)定期從Exporters組件中拉取metrics監(jiān)控性能指標(biāo)。
在分析和展示云資源性能監(jiān)控?cái)?shù)據(jù)時(shí),結(jié)合數(shù)據(jù)中心多云資源監(jiān)控分析和展示的場景,利用開源的Grafana技術(shù)實(shí)現(xiàn)該功能。
在Prometheus體系中,通過PromQL和其他API(Application Programming Interface)方式可視化地展示收集的數(shù)據(jù),除了其本身提供的Promdash和豐富的模板引擎以外,還提供HTTP API查詢方式,滿足使用者的調(diào)度需求。
在該技術(shù)方法中,采用的Grafana是一個(gè)開源的跨平臺(tái)度量分析和可視化 + 告警工具,提供強(qiáng)大且優(yōu)雅的方式創(chuàng)建、共享和瀏覽數(shù)據(jù)。支持可自定義的分析展現(xiàn)視圖,Dashboard中可顯示不同種類的metric數(shù)據(jù)源中的數(shù)據(jù)。Grafana支持熱插拔控制面板和可擴(kuò)展的數(shù)據(jù)源,與該技術(shù)方案中的Prometheus無縫融合。圖4為Prometheus+Grafana工作原理圖。
圖4 Prometheus+Grafana工作原理圖
監(jiān)控告警是數(shù)據(jù)中心監(jiān)控系統(tǒng)中的重要組成部分,在Prometheus監(jiān)控系統(tǒng)中,采集與告警機(jī)制相應(yīng)分離。Prometheus server在本地存儲(chǔ)收集到的metrics,并運(yùn)行已定義好的告警規(guī)則(alert.rules),通過一定的規(guī)則清理和整理數(shù)據(jù),并將得到的結(jié)果存儲(chǔ)到新的時(shí)間序列中。當(dāng)告警規(guī)則觸發(fā)之后,會(huì)將告警信息轉(zhuǎn)發(fā)到獨(dú)立的組件Alertmanager中,經(jīng)Alertmanager處理之后,通過電子郵件、PaperDuty和HipChat發(fā)送給通知者。Prometheus Alertmanager工作機(jī)制圖見圖5。
圖5 Prometheus Alertmanager工作機(jī)制圖
在該技術(shù)方法中,利用自主可控的開源產(chǎn)品,通過實(shí)時(shí)采集多云資源和多云服務(wù)的監(jiān)控?cái)?shù)據(jù),精準(zhǔn)地提供直觀、實(shí)時(shí)、高效、友好的可視化資源展示界面,對(duì)來自于不同云區(qū)域、不同云基礎(chǔ)平臺(tái)和不同種類的云應(yīng)用服務(wù)的IT管理及性能數(shù)據(jù)進(jìn)行統(tǒng)一存儲(chǔ)、分析和展現(xiàn),幫助上云企業(yè)和云運(yùn)營服務(wù)商輕松掌控全局,高效應(yīng)對(duì)突發(fā)事件,把握整體云資源狀態(tài)。
通過基于Kubernetes的微服務(wù)方式部署構(gòu)建開源的Prometheus和Grafana群集,以下是Prometheus部署配置的部分YAML信息。Prometheus各組件模塊狀態(tài)見圖6。
kind: Deployment
metadata:
name: prometheus
namespace: kube-prometheus
spec:
containers:
- image: 10.xx.xx.xx:8082/prometheus
name: prometheus
imagePullPolicy: IfNotPresent
command:
- "/bin/prometheus"
args:
- '--config.file=/etc/config/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
ports:
- containerPort: 9090
name: http
…
apiVersion: v1
kind: Service
metadata:
name: prometheus
namespace: kube-prometheus
spec:
type: NodePort
ports:
- name: http
port: 9090
protocol: TCP
targetPort: 9090
nodePort: 30089
…
圖6 Prometheus各組件模塊狀態(tài)
以下是Grafana部署配置的部分YAML信息。
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: kube-prometheus
spec:
spec:
containers:
- name: grafana
image: 10.xx.xx.xx:8082/grafana
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
protocol: TCP
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: kube-prometheus
spec:
type: NodePort
ports:
- port : 80
targetPort: 3000
nodePort: 30030
selector:
app: grafana
通過在Prometheus群集環(huán)境中部署啟用Alertmanager模塊,實(shí)現(xiàn)對(duì)告警功能的環(huán)境部署。以下是Alertmanager模塊部署配置的部分YAML信息。圖7為Prometheus Alertmanager規(guī)則配置狀態(tài)。
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-rules
namespace: kube-prometheus
data:
general.rules: |
groups:
- name: general.rules
rules:
- alert: InstanceDown
expr: up == 0
for: 1 m
labels:
severity: error
…
node.rules: |
groups:
- name: node.rules
rules:
- alert: NodeFilesystemUsage
expr: |
100 - (node_filesystem_free{fstype=~"ext4|xfs"} /
node_filesystem_size{fstype=~"ext4|xfs"} * 100) > 80
for: 1 m
…
pod.rules: |
groups:
- name: pod.rules
rules:
- alert: PodCPUUsage
expr: |
sum(rate(container_cpu_usage_seconds_total{image!=""}[1 m]) * 100) by (pod_name, namespace) > 80
for: 5 m
labels:
severity: warning
…
Prometheus提供了標(biāo)準(zhǔn)的API Restful接口,可通過http[s]://IP:PORT/metrics獲取所有監(jiān)控對(duì)象的采集數(shù)據(jù)。
在Grafana設(shè)計(jì)和展示過程中,通過編寫和配置PromQL語言,實(shí)現(xiàn)對(duì)相關(guān)監(jiān)控對(duì)象和指標(biāo)的細(xì)顆粒度的分析。圖8為Grafana性能分析PromQL分析。
通過利用該技術(shù)方法,對(duì)云原生技術(shù)和企業(yè)自主研發(fā)的云計(jì)算服務(wù)平臺(tái)進(jìn)行無縫銜接,有效實(shí)現(xiàn)大型集團(tuán)型企業(yè)在多云資源和多云服務(wù)方面的體系建設(shè)和靈活運(yùn)用。
3.4.1 傳統(tǒng)云主機(jī)的性能監(jiān)控效果
對(duì)于傳統(tǒng)云主機(jī)的性能監(jiān)控,其數(shù)據(jù)采集和分析展現(xiàn)效果見圖9。
圖9 傳統(tǒng)云主機(jī)的性能監(jiān)控分析效果圖
3.4.2 容器云資源的性能監(jiān)控效果
對(duì)于Kubernetes容器云資源的性能監(jiān)控,其數(shù)據(jù)采集和分析展現(xiàn)效果見圖10。
圖10 Kubernetes容器云資源的性能監(jiān)控分析效果圖
3.4.3 多云服務(wù)資源的性能監(jiān)控效果
在多云服務(wù)資源監(jiān)控方面,實(shí)現(xiàn)了對(duì)各種多云服務(wù)(如elasicsearch/minio/rockermq/mysql)的性能監(jiān)控,數(shù)據(jù)采集及分析展現(xiàn)效果見圖11。
從以上性能指標(biāo)和展示效果中可看出,多種云資源和云服務(wù)的性能監(jiān)控?cái)?shù)據(jù)能得到有效的采集和分析展示,在靈活支持和兼容異構(gòu)多云資源與云服務(wù)的情況下,不僅提升了監(jiān)管效率,而且保證了整個(gè)云服務(wù)體系的穩(wěn)定、可靠運(yùn)營。
圖11 云服務(wù)性能監(jiān)控圖分析效果圖
當(dāng)前,很多企業(yè)都面臨著IaaS和PaaS等云計(jì)算服務(wù)監(jiān)控方面的壓力,尤其是多云環(huán)境下的異種云資源和云服務(wù)的統(tǒng)一監(jiān)控和告警能力。為此,在企業(yè)云業(yè)務(wù)的基礎(chǔ)上,構(gòu)建一個(gè)適用于大型集團(tuán)型企業(yè)多云資源和多云服務(wù)的性能監(jiān)控系統(tǒng)尤為重要,不僅能保障云業(yè)務(wù)高效、穩(wěn)定開展,而且能提升整體的云運(yùn)維和服務(wù)能力。