Jerry每次在工做場合中同Prometheus(普羅米修斯)打交道時,都會「齣戲」,由於這個單詞給個人第一印象,並非用go語言實現的微服務監控利器,而是名導雷德利·斯科特(Ridley Scott)拍攝的科幻大片。數據庫
回到現實中來,Prometheus是由SoundCloud開發的監控系統的開源版本,logo是一個燃燒的紅色火炬,這應該是有情懷的工程師們向泰坦巨神的後代,偷偷盜走天火,傳給人類的普羅米修斯表示的敬意。服務器
2016年,由Google發起的Linux基金會(Cloud Native Computing Foundation,CNCF)將Prometheus歸入其第二大開源項目,在開源社區十分活躍,SAP Kyma也使用了Prometheus做爲其監控組件。架構
Prometheus採用Pull方式獲取監控信息,並提供了多維度的數據模型和靈活的數據查詢和聚合接口。框架
那麼Prometheus是雲原生應用和微服務架構的專屬工具麼?固然不是。下面,Jerry就用SAP CRM On-Premises爲例,介紹ABAP技術棧如何藉助Prometheus來實現自定義的日誌監控功能。微服務
SAP CRM 有個Fiori應用叫作My Opportunity,是SAP成都研究院Jerry所在的CRM Fiori團隊開發維護的。假設咱們有這樣一個需求,須要監控在指定時間段內,該應用收到的讀請求。工具
咱們在Opportunity OData服務的實現裏找到了一個BAdI加強,CRM_OPPORTUNITY_ODATA_BD:單元測試
全部讀請求都會通過這個BAdI,因此在裏面實現咱們自定義的日誌邏輯很合適。測試
建立一個自定義數據庫表,用於記錄讀請求的明細,包括請求者的用戶名,請求日期和請求時間。spa
BAdI實現的邏輯很簡單,依次把字段記錄下來,插入數據庫表:日誌
接着是在本地安裝Prometheus服務器,我安裝的是Windows版本,須要先編輯prometheus.yml配置文件,而後啓動。
下圖是配置文件最核心的部分,定義了Prometheus鏈接SAP CRM抓取監控數據的規則。第24行和25行維護了SAP CRM系統的用戶名和密碼,第26行/sap/zcm是CRM上爲Prometheus暴露出來的數據採集接口的路徑,第28行指定Prometheus服務器每隔2秒鐘採集一次數據。第33行定義了CRM ABAP系統的主機名和端口號。有了這些配置信息,Prometheus能夠同ABAP Netweaver服務器創建鏈接並進行週期性的數據抓取。
最後一步,在/sap/zcm這個路徑上把咱們自定義數據庫表裏的數據暴露出來:
一個SELECT COUNT(*)搞定:
至此萬事俱備了。回到Fiori 應用界面,隨便點擊幾個Opportunity,觸發讀請求,回到自定義的數據庫表,發現已經有一些日誌記錄在內了。
啓動Prometheus服務器,立刻就以2秒的時間間隔,往ABAP服務器發起數據查詢請求:
localhost:9090打開Prometheus的控制檯,能看到從SAP CRM系統實時採集到的讀請求個數:
切換到Graph面板,能看到指定時間間隔內的讀請求變化趨勢,好比下圖的橫軸是時間點,縱軸是讀請求個數,圖上的折線表達了過去五分鐘以內,讀請求數量呈線性增加的趨勢。
Prometheus提供的dashboard,提供了各類維度的數據查詢和聚合功能。若是對其基本的數據展示界面不滿意,能夠選擇另外一款效果更好的開源數據可視化工具Grafana. 下圖是Grafana的dashboard:
但願Jerry這個例子能夠給你們一些啓發:ABAP照樣能夠藉助現代開源工具來實現一些傳統ABAP工具難以實現的功能。在Jerry看來,Prometheus徹底能夠同ABAP的單元測試框架一塊兒協同工做,提升基於ABAP技術棧的應用開發的持續集成和持續交付能力。
感謝閱讀。
要獲取更多Jerry的原創文章,請關注公衆號"汪子熙":