当ABAP遇见普罗米修斯
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,所以在里面实现我们自定义的日志逻辑很合适。

创建一个自定义数据库表,用于记录读请求的明细,包括请求者的用户名,请求日期和请求时间。

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的原创文章,请关注公众号"汪子熙":

当ABAP遇见普罗米修斯的更多相关文章
- (2012年旧文)纪念史蒂夫乔布斯---IT界的普罗米修斯
谈苹果与乔布斯系列一 IT界的普罗米修斯 纪念PC界的先驱 史蒂夫乔布斯 2012-4-5 清明节,纪念IT时代的开创人—伟大的史蒂夫 乔布斯. 没有乔布斯,计算机还是属于一群科技人士的工具,没有漂 ...
- 在Grafana使用普罗米修斯
aaarticlea/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IE ...
- 普罗米修斯Prometheus监控安装
普罗米修斯Prometheus监控安装 架构: 服务端:192.168.0.204 客户端:192.168.0.206 环境准备:所有节点安装go 语言环境 rz go1.12.linux-amd64 ...
- 监控神器-普罗米修斯Prometheus的安装
搬砖党的福音:普罗米修斯-监控神器 功能: 在业务层用作埋点系统 Prometheus支持多种语言(Go,java,python,ruby官方提供客户端,其他语言有第三方开源客户端).我们可以通过客户 ...
- 记录一次k8s环境尝试过程(初始方案,现在已经做过很多完善,例如普罗米修斯)
记录一次Team k8s环境搭建过程(初始方案,现在已经做过很多完善,例如普罗米修斯) span::selection, .CodeMirror-line > span > span::s ...
- 一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起
上帝之火 本系列讲述的是开源实时监控告警解决方案Prometheus,这个单词很牛逼.每次我都能联想到带来上帝之火的希腊之神,普罗米修斯.而这个开源的logo也是火,个人挺喜欢这个logo的设计. 本 ...
- 普罗米修斯+grafana监控k8s
其实现原理有点类似ELK.node-exporter组件负责收集节点上的metrics监控数据,并将数据推送给prometheus, prometheus负责存储这些数据,grafana将这些数据通过 ...
- 普罗米修斯!Ubuntu下prometheus监控软件安装使用
*Prometheus* 是一个开源的服务监控系统和时间序列数据库 官方网站:prometheus.io 一.安装prometheus cd /usr/local/ #进入安装目录 wg ...
- Prometheus普罗米修斯快速入门
欢迎来到普罗米修斯! Prometheus是一个监控平台,通过从监控目标的抓取HTTP端点上获取指标. 本指南将展示如何使用和安装Promethues,配置和监视第一个资源.还将下载并安装导出器Exp ...
随机推荐
- -[UITableView copyWithZone:]: unrecognized selector sent to instance 0x7XXXXXX00
-[UITableView copyWithZone:]: unrecognized selector sent to instance 0x7XXXXXX00 -[Class copyWithZon ...
- mysql插入数据报错IntegrityError: (1062, "Duplicate entry 'xx' for key 'xxxxx'")
1.问题描述 MySQL插入数据的时候报错,提示如下: IntegrityError: (1062, "Duplicate entry 'xx' for key 'xxxxx'") ...
- 在 json4s 中自定义CustomSerializer
到目前为止,Scala 环境下至少存在6种 Json 解析的类库,这里面不包括 Java 语言实现的 Json 类库.所有这些库都有一个非常相似的抽象语法树(AST).而 json4s 项目旨在提供一 ...
- LeetCode 108. Convert Sorted Array to Binary Search Tree (将有序数组转换成BST)
108. Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascendin ...
- promise简单实现
function isFunction(fn){ return Object.prototype.toString.call(fn) === '[object Function]'; } let ST ...
- linux解压xz文件
本来要下一个 tar.gz 文件的,但是下了一个 xz的,以为不能用了,但是万能的百度.. 解决方法: 首先打包成tar文件 xz -d demo.tar.xz j接着用 tar -xvf demo. ...
- c++ pipe实现父子进程通信
1.父子进程通信pipe编程流程 -创建管道 -设置进程的输出到管道 -创建进程 -关闭管道写句柄 -读管道读句柄,把数据读到一个buffer里 2.注意事项 -读管道数据的时候,一定要关闭写句柄: ...
- Python之路【第十二篇】:Python面向对象高级
一.反射 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究 ...
- 1. Spark GraphX概述
1.1 什么是Spark GraphX Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求.那么什么是图 ...
- ubuntu 安装和配置 GitLab
一.概述 GitLab 是一个基于 Web 的开源 Git 软件仓库管理器,用 Ruby 编写,包括 wiki,问题管理,代码审查,监控以及持续集成和部署.它使开发人员能够创建,审查和部署他们的项目. ...