The Reporting Service will be a generic service which will listen to Reporting queue of OSB, log or record transaction or exception data, or to raise a notification or alert to an end user or technical support group. It will persist report event data to a database or other similar sink so that it will be available for reporting and auditing purposes.
OSB Requesters will access the Reporting service via a
non-blocking, asynchronous call, passing a simple XML log event object containing various service identification
and log description data. On the service provider side, log events will be
processed sequentially.
An event can be
defined as an action capable of causing more than one action to fire – so a
serious exception may result in the data being persisted to database and an
email notification being sent to the appropriate support team. This can be
designed and developed by leveraging the functionalities of Oracle BAM tool.
Requirements :: Reporting / Analytics
- Ability to report service consumption per service per application
- Calls per sec/min/hour/day
- Error Counts
- Performance Metrics
- Performance monitoring on service level.
Approach
OSB defines an
extensible Reporting Framework that permits adding custom providers. This
OSB/Oracle BAM integration approach consists of developing a custom reporting
provider that enables report information to be sent out to Oracle BAM. This is
accomplished by configuring the reporting action inside an OSB service flow,
and Oracle BAM picking up the message using Enterprise Message Sources.
Oracle BAM defines a basic component called a data object. A
data object represents a data entity whose information is to be stored in
Oracle BAM. Each new message to be integrated into Oracle BAM must be validated
against an underlying XML schema specific for the selected data object
Data Model
Define a Reporting data structure. This will
hold all the data that is defined to hold information that can help in
monitoring as well as reporting.
Sample data structure
Element
|
Description
|
PROJECT_NAME
|
Project Name
|
MODULE_NAME
|
Module name
|
SERVICE_NAME
|
getEmployee
|
SERVICE_TYPE
|
SOAP or REST
|
HTTP_METHOD
|
GET or POST
|
USER_NAME
|
User related name
|
USER_ID
|
User related id
|
START_TIME
|
Start time of the request
|
SYSTEM_ID
|
External system Id
|
CORRELATION_ID
|
Uniquely identify the record ,so that
status updates can be related to the same record
|
MSG_ID
|
Uniquely identify the record
|
REPOSITORY_NAME
|
|
QUERYSTRING
|
For rest calls to store query string
|
PAYLOAD
|
XML payloads
|
STATUS
|
Success /Error
|
PRIMARY_ID
|
Any Ids that we want to track like EmployeeID
|
TOTAL_TIME_SEC
|
Time difference between Start /End time
|
END_TIME
|
End time of the request
|
PROXY_ID
|
|
ERROR_TEXT
|
Error Messages
|
PROCESS_FLOW_STAGE
|
Request ,Response, service
stage-Transcoding
|
TECH_COMPONENT
|
OSB, BPEL, Java
|
Sample XSD
<?xml
version="1.0" encoding="windows-1252" ?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:report="http://geo.com/report/header"
targetNamespace="http://geo.com/report/header"
elementFormDefault="qualified">
<xsd:element
name="REPORT_DATA">
<xsd:complexType>
<xsd:sequence>
<xsd:element
name="PROJECT_NAME" type="xsd:string"/>
<xsd:element
name="MODULE_NAME" type="xsd:string"/>
<xsd:element
name="SERVICE_NAME" type="xsd:string"/>
<xsd:element
name="SERVICE_TYPE" type="xsd:string"/>
<xsd:element
name="HTTP_METHOD" type="xsd:string"/>
<xsd:element name="USER_NAME"
type="xsd:string"/>
<xsd:element
name="USER_ID" type="xsd:string"/>
<xsd:element
name="START_TIME" type="xsd:string"/>
<xsd:element
name="SYSTEM_ID" type="xsd:string"/>
<xsd:element
name="CORRELATION_ID" type="xsd:string"/>
<xsd:element name="MSG_ID"
type="xsd:string"/>
<xsd:element
name="REPOSITORY_NAME" type="xsd:string"/>
<xsd:element
name="QUERYSTRING" type="xsd:string"/>
<xsd:element
name="PAYLOAD" type="xsd:string"/>
<xsd:element name="STATUS"
type="xsd:string"/>
<xsd:element
name="QUERY_KEY" type="xsd:string"/>
<xsd:element
name="PRIMARY_ID" type="xsd:string"/>
<xsd:element
name="TOTAL_TIME_SEC" type="xsd:string"/>
<xsd:element
name="END_TIME" type="xsd:string"/>
<xsd:element
name="PROXY_ID" type="xsd:string"/>
<xsd:element name="ERROR_TEXT"
type="xsd:string"/>
<xsd:element name="PROCESS_FLOW_STAGE"
type="xsd:string"/>
<xsd:element name="TECH_COMPONENT"
type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Implementation
These options are useful in case you have custom OSB Reporting
Data Handler which will be listening to the OSB JMS Provider QUEUE. OSB will
perform reporting using the OSB JMS Provider QUEUE and message payload will
contain ReportData and ReportMetadata. These variables can be
XML elements or Strings. These will need to be retrieved in the custom OSB
reporting handler and processed further.
BAM Dashboards
OSB has inbuilt features to monitor service’s health using
metrics and alerts; however, this monitoring is mostly oriented toward
technical users. Oracle Business
Activity Monitoring is the preferred product to give business users the
functional monitoring on their business services and processes in the
enterprise
·
BAM can be leveraged to build reports based on
the data in the Reporting table.
·
The BAM dashboards are customizable and can
define new dashboards as required.
·
It will be constrained by the way we define the
data model, so will need to be sure we capture all the information required
into the data model.
Notes
- These can be implemented at Gateway level to capture the request and response so all processes can be monitored.
- All process developers must be following naming standards in endpoint URI creation, so that we can identify the Module /service.
- The correlation Id needs to propagate across the proxies so that in case of errors the same record can be updated with the Error status /error message.
- Correlation Id can be transmitted using custom user headers in transport headers or as part of SOAP headers.
Tips on reporting in blog
References :
- http://jvzoggel.wordpress.com/2012/02/15/oracle-service-bus-logging-tracing-iii-create-custom-report-provider/
- http://jvzoggel.wordpress.com/2012/01/18/osb_tracing_report_action/
- http://blog.grummt.org/?cat=4
- http://eelzinga.wordpress.com/2009/07/17/oracle-service-bus-xquery-and-optional-parameters/
- http://docs.oracle.com/cd/E21764_01/doc.1111/e15867/reporting.htm
- http://www.oracle.com/technetwork/middleware/bam/osb-bam.pdf
No comments:
Post a Comment