Jerry每次在工作場(chǎng)合中同Prometheus(普羅米修斯)打交道時(shí),都會(huì)“出戲”,因?yàn)檫@個(gè)單詞給我的第一印象,并不是用go語(yǔ)言實(shí)現(xiàn)的微服務(wù)監(jiān)控利器,而是名導(dǎo)雷德利·斯科特(Ridley Scott)拍攝的科幻大片。 回到現(xiàn)實(shí)中來(lái),Prometheus是由SoundCloud開(kāi)發(fā)的監(jiān)控系統(tǒng)的開(kāi)源版本,logo是一個(gè)燃燒的紅色火炬,這應(yīng)該是有情懷的工程師們向泰坦巨神的后代,偷偷盜走天火,傳給人類(lèi)的普羅米修斯表示的敬意。 2016年,由Google發(fā)起的Linux基金會(huì)(Cloud Native Computing Foundation,CNCF)將Prometheus納入其第二大開(kāi)源項(xiàng)目,在開(kāi)源社區(qū)十分活躍,SAP Kyma也使用了Prometheus作為其監(jiān)控組件。 Prometheus采用Pull方式獲取監(jiān)控信息,并提供了多維度的數(shù)據(jù)模型和靈活的數(shù)據(jù)查詢(xún)和聚合接口。 那么Prometheus是云原生應(yīng)用和微服務(wù)架構(gòu)的專(zhuān)屬工具么?當(dāng)然不是。下面,Jerry就用SAP CRM On-Premises為例,介紹ABAP技術(shù)棧如何借助Prometheus來(lái)實(shí)現(xiàn)自定義的日志監(jiān)控功能。 SAP CRM 有個(gè)Fiori應(yīng)用叫做My Opportunity,是SAP成都研究院Jerry以前待過(guò)的CRM Fiori團(tuán)隊(duì)開(kāi)發(fā)維護(hù)的。假設(shè)我們有這樣一個(gè)需求,需要監(jiān)控在指定時(shí)間段內(nèi),該應(yīng)用收到的讀請(qǐng)求。 我們?cè)贠pportunity OData服務(wù)的實(shí)現(xiàn)里找到了一個(gè)BAdI增強(qiáng),CRM_OPPORTUNITY_ODATA_BD: 所有讀請(qǐng)求都會(huì)經(jīng)過(guò)這個(gè)BAdI,所以在里面實(shí)現(xiàn)我們自定義的日志邏輯很合適。 創(chuàng)建一個(gè)自定義數(shù)據(jù)庫(kù)表,用于記錄讀請(qǐng)求的明細(xì),包括請(qǐng)求者的用戶(hù)名,請(qǐng)求日期和請(qǐng)求時(shí)間。 BAdI實(shí)現(xiàn)的邏輯很簡(jiǎn)單,依次把字段記錄下來(lái),插入數(shù)據(jù)庫(kù)表: 接著是在本地安裝Prometheus服務(wù)器,我安裝的是Windows版本,需要先編輯prometheus.yml配置文件,然后啟動(dòng)。 下圖是配置文件最核心的部分,定義了Prometheus連接SAP CRM抓取監(jiān)控?cái)?shù)據(jù)的規(guī)則。第24行和25行維護(hù)了SAP CRM系統(tǒng)的用戶(hù)名和密碼,第26行/sap/zcm是CRM上為Prometheus暴露出來(lái)的數(shù)據(jù)采集接口的路徑,第28行指定Prometheus服務(wù)器每隔2秒鐘采集一次數(shù)據(jù)。第33行定義了CRM ABAP系統(tǒng)的主機(jī)名和端口號(hào)。有了這些配置信息,Prometheus可以同ABAP Netweaver服務(wù)器建立連接并進(jìn)行周期性的數(shù)據(jù)抓取。 最后一步,在/sap/zcm這個(gè)路徑上把我們自定義數(shù)據(jù)庫(kù)表里的數(shù)據(jù)暴露出來(lái): 一個(gè)SELECT COUNT(*)搞定: 至此萬(wàn)事俱備了。回到Fiori 應(yīng)用界面,隨便點(diǎn)擊幾個(gè)Opportunity,觸發(fā)讀請(qǐng)求,回到自定義的數(shù)據(jù)庫(kù)表,發(fā)現(xiàn)已經(jīng)有一些日志記錄在內(nèi)了。 啟動(dòng)Prometheus服務(wù)器,馬上就以2秒的時(shí)間間隔,往ABAP服務(wù)器發(fā)起數(shù)據(jù)查詢(xún)請(qǐng)求: localhost:9090打開(kāi)Prometheus的控制臺(tái),能看到從SAP CRM系統(tǒng)實(shí)時(shí)采集到的讀請(qǐng)求個(gè)數(shù): 切換到Graph面板,能看到指定時(shí)間間隔內(nèi)的讀請(qǐng)求變化趨勢(shì),比如下圖的橫軸是時(shí)間點(diǎn),縱軸是讀請(qǐng)求個(gè)數(shù),圖上的折線(xiàn)表達(dá)了過(guò)去五分鐘之內(nèi),讀請(qǐng)求數(shù)量呈線(xiàn)性增長(zhǎng)的趨勢(shì)。 Prometheus提供的dashboard,提供了各種維度的數(shù)據(jù)查詢(xún)和聚合功能。如果對(duì)其基本的數(shù)據(jù)展現(xiàn)界面不滿(mǎn)意,可以選擇另一款效果更好的開(kāi)源數(shù)據(jù)可視化工具Grafana. 下圖是Grafana的dashboard: 希望Jerry這個(gè)例子可以給大家一些啟發(fā):ABAP照樣可以借助現(xiàn)代開(kāi)源工具來(lái)實(shí)現(xiàn)一些傳統(tǒng)ABAP工具難以實(shí)現(xiàn)的功能。在Jerry看來(lái),Prometheus完全可以同ABAP的單元測(cè)試框架一起協(xié)同工作,提高基于ABAP技術(shù)棧的應(yīng)用開(kāi)發(fā)的持續(xù)集成和持續(xù)交付能力。 感謝閱讀。 更多閱讀
|
|