原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
一
前言
PO(/PI)是SAP公司的一个中间件产品,用来辅助连接SAP系统与外围系统. (当然外围系统之间也可以使用PO).
企业通过PO提供统一的中间件服务平台,所有系统都调用PO的服务或者发布服务让PO调用.
如果PO处理消息时出现报错信息,可以通过PO的消息监控器查看报错的消息.这种方式依赖于人员主动的执行消息监控器,无法及时有效的获取PO系统的异常.
**本文主要介绍PO的邮箱报警机制.把报错的消息信息发送到指定用户的邮箱**
本文涉及的操作主要来自于如下链接,做了些翻译及细化的处理.
链 接
> https://blogs.sap.com/2012/03/25/michals-pi-tips-component-based-message-
> alerting/
本文涉及内容的SAP 标准帮助(千万别看, 会晕的)
> 链接
>
> https://help.sap.com/viewer/bdfc9b7d99b544d8bbda40546b70967a/7.4.23/en-
> US/2cf0a3d4540c4c9a9af65139801ef826.html
二
PO的消息监控器
• 消息监控器可以概览查看所有接口的成功/失败信息, 图一
• 并且可以通过点击成功/失败的次数,链接到详细的消息信息中查看具体的报错日志. 图二
图一
图二
三
示意图
报警处理逻辑示意图来自标准的ONLINE HELP 文档.可以直观的理解PO的消息报警机制.
四
配置邮箱报警
基于组件的消息报警配置方式如下
Component-Based Message Alerting (CBMA) is the new way of sending alerts on
SAP PI (either single or double stack) without the use of any additional
components.
_**01** _
**创建报警规则**
进入 Integration Builder 创建报警规则( ALERT RULE)
**basic** 标签页选择需要报警的组件. (图三)
报警对象可以按照多种类型选择, 推荐把相应的对象到放到 configuration scenario 中,在报警规则中使用 configuration
scenario 来包含这些对象.最终根据包含的对象生成过滤消息的规则,详见图五
也可以维护一个空的PARTY 这样所有没有进入PARTY 的对象都会包含进去
**extended** 标签页中选择组件,错误类型, consumers (图四)
• components 报警的组件,包含了Central Adaper Engine 和相应的ABAP proxy对象(ABAP 也有消息监控器, 所以这里对ABAP proxy 对象的监控是可选项)
• error sources 报错消息来源, 大致区分了PO处理的不同环节,不同的通道适配器.建议全选
• consumers 中只有一个选项 ALERT-TO-MAIL ,代表报警信息发送到邮件中. 可以自定义consumer .
图三
图四
图五
_**02** _
**配置邮件客户端**
类似于其它的邮件客户端配置,比如FOXMAIL
因为PO只需要发送邮件. 所以只需要配置如下几个参数
– mail.from 邮件发送者. 需要为PO申请一个企业邮箱账号
– mail.smtp.host SMTP发送邮箱地址 一般情况下把邮箱的浏览器地址mail替换成smtp即可 smtp.qq.com
(mail.qq.com) (如果PO服务器能够连接公网,应该也可以使用公网邮箱)
– mail.smtp.password 用户密码
– mail.smtp.user 用户名 同 mail.from 参数值,登录邮件服务器发送邮件的用户(完整的用户邮件地址)
维护参数的位置
_**03** _
**配置后台作业**
一般情况下,报错消息信息记录在PO的表中. 必须用定时执行的后台作业推送把报错的消息信息推送给用户.
后台作业维护路径如图
有三种和报警相关的任务名称
AlertConsumerJob 简单的单一消息(测试时使用了这个任务)
AlertConsumerJobV2 带模板单一消息
AlertStuckMessagesJob 集中报警
设置任务名称及任务的保留期(超过保留期的任务可以被删除作业自动删除),任务的删除作业应该不能等同于消息的删除作业
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ PO系列之 过期消息的删除
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247485488&idx=1&sn=86c3bc906d1f0c657d2eedff4c49d632&chksm=cf5dd506f82a5c1023fb99806748cc2866b3e820e0494870d308aa42804a66320d1e4660aba6&token=1910988871&lang=zh_CN#rd)
暂时不太清楚怎么设置任务的删除作业.
设置任务参数
MailTo 邮件收件方,不确定是否可以通过分号分隔维护多个收件方(待测试验证,及时不行,应该也可以通过邮件系统的分组解决发送多人的问题)
MailFrom 邮件发送方
AlertsToMailLimit 含义不明,估计代表了邮件中包含警报的个数,暂时设置为1
Consumer ALERT-TO-MAIL 固定内容,与Alert rule 关联起来了.
SupressAlerts 必选项 抑制报警数? 纠结,必选还需要放出来选择
AggregateAlerts 必选项 聚合警报?
设置作业有效期间及间隔时间,如图,设置了2年的有效期, 有效期内,每5分钟执行一次.设置后,记得添加到重复时间表中
设置后,可以看到作业的条目
可以看到作业的每次执行情况.
可以通过 暂停/发布按钮控制 任务的执行
_**04** _
**测试结果**
修改接口配置,强制产生一个错误后, 邮箱会收到消息的报错信息, 点击连接会跳转到消息监控器.
测试通过.
_**05** _
**监控主页**
配置好的消息报警可以在监控主页中看到
可以看到对象的消息头规则,来自于场景 CS_P10002_OFF_ICM 中的对象的所有可能的组合.
这意味着并非该场景中的特定接口才会进入报警,而是该场景中所有涉及到的对象都会生成一个规则,组合起来.按组合规则筛选消息.
五
疑问
PO的消息报错通过邮箱报警的配置过程还是比较简单的. 但是配置完成后,仔细理解了一下整个过程. 发现在任务中并没有指定报警规则, 这样就会带来一个疑问
报警规则可以组合接口对象.
配置了多个报警规则(每个报警规则包含不同的对象), 那么怎么让不同的人接收不同的报警规则中对象的报警呢?
因为所有的报警规则目前都只能使用一个consumer ALERT-TO-MAIL 后台作业似乎也是关联这个consumer 的.
怎么去创建不同的consumer ?
通过示意图也能看到 Consumer是联系报警规则和作业的关键点
六
创建消费者(CONSUMER)
网上查找了关于创建消费者(CONSUMER)的文章. 在所使用的PO系统中均无法重现. 原因未知.
按照链接无法找到如图的入口 web serivce navigator
https://sapintegrationhub.com/pi-po/alerts/register-alert-consumer-sap-pi-po/
可能是版本差异, 没有找到创建消费者的入口(下图中PO系统的主页少了 web services navigator )
找到了另外一个创建consumer的链接,但是似乎也无法参照维护
https://blogs.sap.com/2015/07/17/alert-specific-to-interfaces-in-po-using-
cbma/
服务注册表为空.
看起来是所使用的PO系统有什么限制,无法修改已经注册的服务.原因未知.
七
总结
PO消息报警通过配置
• 报警规则组合对象
• 消费者(CONSUMER)组合多个报警规则
• 基于消费者(CONSUMER)配置后台作业指定邮件接收者
因为未知的原因(PO的版本原因?),使用的PO系统中无法配置消费者(CONSUMER).
这就导致了所有的报错信息只能通知同一个(组)人员.
这两个链接介绍了怎么创建consumer . 后续有机会测试一下自定义的consumer.
https://blogs.sap.com/2012/05/05/michals-pi-tips-component-based-message-
alerting-api/
https://sapintegrationhub.com/pi-po/alerts/register-alert-consumer-sap-pi-po/
这个链接介绍了怎么创建一个发送短信的报警.后续有机会测试一下.
https://blogs.sap.com/2016/03/13/message-alerting-in-sap-pipo-sending-alerts-
as-push-notifications-to-mobile-device/