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