Introduction
I've blogged extensively about monitoring dashboards, but there's always either some new metrics or new aspects that I haven't covered in depth; hence today's post.
I'll look in depth at the service metrics, including those related to billing. I will also discuss the options one has in respect of dashboarding.
The post covers OCI Console Dashboards, OCI Management Dashboards and OCI Log Analytics. My goal is to provide insight and guidance, so you know which tool to use for your specific monitoring needs.
The starting point is the OIC instance page in the OCI console; here you see all the OIC metrics, currently 19 of them -
The default time filter applied is the last hour; this is important to note, as metrics can be gathered at different times.
For example, I just ran a load test and see the following -
Net, net - the takeaway is some metrics get updated quicker than others. Billing metrics, for example, are always harvested on an hourly basis.
I have the following options for each metric -
Create an alarm on this query - OCI alarms can be easily configured. In this case, I may want an alarm if the Total consumed messages exceeds 10k. Check out my post on such for more details.
I can also view the underlying query in Metric Explorer -
To conclude, the monitoring page, for your OIC instance in OCI, gives us 19 key metrics for OIC tech and billing health.
It offers multiple time interval filters -
and the ability to easily create alarms. However, the widget rendering is basic and, summa summarum, this is not the tool for LOB users; more a great ad hoc tool for OIC admins.
With the basics behind us, let's look at what OCI Console Dashboards offer us.
OCI Console Dashboards
Think of this as the first level of dashboarding available to you. I have already created a dashboard; let's add a new widget to it -Note how some metrics have more dimensions than others. In this case, I can also monitor the messages received for a specific integration.
I can also choose other chart types, such as bar chart.
I can also choose other chart types, such as bar chart.
I can restrict this to a specific OIC instance as follows -
Note the difference between the 2 widgets above. Successful Messages is filtered on resource id, while async queue depth is not, thus one sees the 3 OIC instances listed.
I now apply the resourceid filter to this widget as well -
I can copy the url and make it available to other stakeholders. You will need to create a policy with the following statements -
Allow group OICDashboardViewers to read dashboards-family in compartment DashboardCompartment
Allow group OICDashboardViewers to read metrics in compartment OICCompartment where target.metrics.namespace='oci_integration'
OCI Management Dashboards
These dashboards can be used for Performance analysis and diagnosis across OCI observability services.
The permissions required are as follows -
Allow group DashboardViewers to read management-dashboard-family in compartment DashboardCompartment
Allow group DashboardViewers to read metrics in compartment OICCompartment where target.metrics.namespace='oci_integration'
The above is one of the widgets, I created in a custom billing dashboard. But, before we get into that, these dashboards can be used for fleet monitoring. Let's check out the filters -
The filters selected here can be used in the underlying widget MQLs. I got these filters by duplicating one of the OOTB OIC dashboards -
Each of these contains the filters, so I simply duplicate one of these OOTB dashboards and use that as the basis for my custom dashboard.
Management dashboards can also surface OIC activity stream data, but this post is dedicated to service metrics, so I will not be covering activity stream here. Check out my plethora of posts on OCI Log Analytics for such.
Back to my Billing Metrics dashboard - the first widget is the following -
Note we only see 2 lines, that's because two of the OIC instances have the same number of message packs.
I only need to click on dev instance, for example, to see it's data -
we begin by editing the dashboard -
What's a widget group? A widget group in OCI Management Dashboards is a named container that holds related widgets within a dashboard. It helps organize the layout—for example, keeping all OIC performance charts together. You can move, resize, duplicate, or ungroup the container.
Let's create one for OIC Fleet level Billing Metrics -
Now I add a new widget based on the Total consumed message packs metric - the MQL I coy form the OIC service metrics page -
Let's add another widget group for billing metrics at the OIC Instance level -
We have billing metrics for -
We have billing metrics for -
- integrations
- decisions
- RPA
- HITL and Process
- extended data retention
- ORCL Mgd DR
But let's begin with the instance level metrics -
Note the $(params.selectedInstance). This is a variable I create in the widget and link to the dashboard filter -
- Configured messages
- Message throughput
- Total consumed message packs
I now add a further widget group - Top integrations for selected OIC instance.
Note the MQL I will use -
BilledMessageCount[1h]{resourceId = $(params.selectedInstance)}.groupBy(integrationFlowIdentifier).sum().top_n(10)
Finally I add a widget group - Billed message by component for selected OIC instance.
To summarize OCI Management Dashboards - it's free, easy to use, allows for much richer MQL queries. It also supports many more visualisations compared to OCI Console Dashboards. Finally, it supports the fleet to instance drill down OOTB.
OCI Log Analytics
The dashboard from the previous section has a great name - Oracle Integration: Working NiallcBlogs Billing Dashboard_copy
Let's now go to OCI Log Analytics -
But let's check out the Dashboards -
I can, of course, create dashboards here in OCI Log Analytics, with the same modus operandi as OCI Management Dashboards.
The Log Explorer component allows us to drill into logs, such as the OIC activity stream -
'Log Source' = 'OCI Integration Activity Stream Logs' and Duration != null | eval DurationMs = unit(Duration, ms) | stats count as Samples, avg(DurationMs) as AvgMs, pct(DurationMs, 95) as P95Ms, max(DurationMs) as MaxMs by Integration, Action | sort -P95Ms | head 15
This will give us some latency intel on the integrations.
Net, net - with OCI Log Analytics I can include service metric and OIC activity stream based widgets in the same dashboard.
This is a huge value add.
OCI Log Analytics pricing is storage-based, so how much you retain and for how long drives the cost.
Summa Summarum
People often ask me - which are the important service metrics for OIC? Essentially, to paraphrase George Orwell, they are all important, but some are more important than others. What matters most to me is how many messages are flowing through and how efficiently they’re being handled. From a metrics perspective, we could initially look at -- MessagesReceivedCount
- MessagesSuccessfulCount
- MessagesFailedCount
- AsyncInboundRequestsDepth
To this we could add a custom MQL for concurrent sync request processing -
NumberOfInboundRequests[1m]{resourceId = “yourOIC OCID”}.groupBy(serviceInstanceOcid)
.sum()/60 * InboundRequestProcessingTime[1m]{resourceId = “yourOIC OCID"}.
groupBy(serviceInstanceOcid).mean()/1000
Note, InboundRequestProcessingTime in respect of async requests, measures how long OIC takes to persist the incoming request and send an acknowledgment. It reflects the trigger’s handling of the request, not the full integration execution time.
Also note, OIC has service limits for async and sync concurrent requests. This is message pack based - 1 MP = 100 concurrent sync / 50 concurrent async. 2 MPs - 200 concurrent sync / 100 concurrent async and so on.
Let's create a simple dashboard for this -
I now run a load test from SOAP UI. This invokes an async integration, that, in turn, invokes a sync integration.
The sync integration includes a WAIT action set to 60 secs; thus the async queue will build up.
I start a test with 4125 runs -
I check the dashboard -
We see the concurrent sync metric leveling off at ca. 50.
We know that our concurrent sync request processing limit is 100, as we have 1 message pack assigned to the service instance. We also see we have a large async queue. Here we can improve throughput processing by increasing the number of message packs assigned to the instance. On the other hand, maybe I'm ok with the throttling, I just want insight into what's happening.
Regarding the actual execution times for the async integration, you can check the stats in OIC project observability -
Back to my dashboard, I could also add a widget for the Outbound Request Invocation Time - this will reflect the call’s round-trip time while the parent waits for the sync integration to respond.
Here I select P95 as the stat and I see the result is a constant 60k msecs, which accurately reflects the 60 second WAIT in the sync integration.
I can amend the MQL to make this specific to my async integration - OutboundRequestInvocationTime[5m]{resourceId = $(params.selectedInstance), integrationFlowIdentifier = "ASYNC_CREATE_ORDER!01.00.0000"}.grouping().percentile(.95)
To conclude, we have a plethora of OIC service metrics monitoring capabilities in OCI. Net, net - you decide what to use, based on your specific needs.
Happy Monitoring!





















































































No comments:
Post a Comment