Tuesday, August 4, 2026

#1160 - Download the OIC Audit Log via API

Introduction

The 26.07 release saw the OIC audit stream augmented with logging of OIC activity stream views. Essentially telling us who looked at what in the activity stream. Let's try this out - 

I click on the Instance ID link and check out the activity stream -


Now let's check the audit log - 

I click the Audit link -


User niall.commiskey@oracle.com viewed activity stream for 
integration id: AA_ERRORS/SYNC_UPDATE_ORDER (1.0), 
instance id: clbG7JACEfG9ee_6FVinEA, business identifiers: (orderNr: 123), 
tracing level: Audit

So how can we download such via the OIC api?

/ic/api/integration/v1/monitoring/auditRecords?integrationInstance=yourOICInstance

Here's an example from Postman - 

Note the query filter parameters available - 

So let's try out some of these - 

https://design.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/monitoring/auditRecords?integrationInstance=yourOICInstance&q={timewindow:'6h'}

The above applies a timewindow of 6 hours to the query.

{
    "items": [
        {
            "auditTrailMessage": "User niall.commiskey@oracle.com viewed activity stream for integration id: AA_ERRORS/A_CALLING_B (1.0), instance id: 7WR6yZAEEfG8D-EccQuiTg, business identifiers: (orderNr: 310397), tracing level: Production",
            "operationName": "view",
            "resourceType": "activity stream",
            "timeStamp": "2026-08-04T13:04:27.897+0000",
            "userName": "niall.commiskey@oracle.com"
        },
        {
            "auditTrailMessage": "User niall.commiskey@oracle.com viewed activity stream for integration id: AA_ERRORS/A_CALLING_B (1.0), instance id: 7WR6yZAEEfG8D-EccQuiTg, business identifiers: (orderNr: 310397), tracing level: Production",
            "operationName": "view",
            "resourceType": "activity stream",
            "timeStamp": "2026-08-04T13:03:51.287+0000",
            "userName": "niall.commiskey@oracle.com"
        },
        {
            "auditTrailMessage": "User niall.commiskey@oracle.com unlocked lookup AA_ERRORS/orderValues ",
            "operationName": "unlock",
            "resourceCode": "orderValues",
            "resourceName": "orderValues",
            "resourceType": "ICS_DVM",
            "timeStamp": "2026-08-04T13:03:15.409+0000",
            "userName": "niall.commiskey@oracle.com"
        },
        {
            "auditTrailMessage": "User niall.commiskey@oracle.com updated lookup AA_ERRORS/orderValues ",
            "operationName": "update",
            "resourceCode": "orderValues",
            "resourceName": "orderValues",
            "resourceType": "ICS_DVM",
            "timeStamp": "2026-08-04T12:59:42.378+0000",
            "userName": "niall.commiskey@oracle.com"
        },
        {
            "auditTrailMessage": "User niall.commiskey@oracle.com locked lookup AA_ERRORS/orderValues ",
            "operationName": "lock",
            "resourceCode": "orderValues",
            "resourceName": "orderValues",
            "resourceType": "ICS_DVM",
            "timeStamp": "2026-08-04T12:59:24.919+0000",
            "userName": "niall.commiskey@oracle.com"
        },
        {
            "auditTrailMessage": "User niall.commiskey@oracle.com viewed activity stream for integration id: AA_ERRORS/SYNC_UPDATE_ORDER (1.0), instance id: clbG7JACEfG9ee_6FVinEA, business identifiers: (orderNr: 123), tracing level: Audit",
            "operationName": "view",
            "resourceType": "activity stream",
            "timeStamp": "2026-08-04T12:47:03.378+0000",
            "userName": "niall.commiskey@oracle.com"
        },
        {
            "auditTrailMessage": "User niall.commiskey@oracle.com viewed activity stream for integration id: AA_ERRORS/SYNC_UPDATE_ORDER (1.0), instance id: clbG7JACEfG9ee_6FVinEA, business identifiers: (orderNr: 123), tracing level: Audit",
            "operationName": "view",
            "resourceType": "activity stream",
            "timeStamp": "2026-08-04T12:46:08.602+0000",
            "userName": "niall.commiskey@oracle.com"
        },
        {
            "auditTrailMessage": "User niall.commiskey@oracle.com viewed activity stream for integration id: AA_2607_NEW_FEATURES/DATA_TRANSLATE_DEMO (1.0), instance id: yvkVeo__EfGSfZ-fcacITg, business identifiers: (orderNr: 123), tracing level: Production",
            "operationName": "view",
            "resourceType": "activity stream",
            "timeStamp": "2026-08-04T12:27:07.547+0000",
            "userName": "niall.commiskey@oracle.com"
        }
    ],
    "links": [
        {
            "href": "https://design.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/monitoring/auditRecords?integrationInstance=...",
            "rel": "self"
        },
        {
            "href": "https://design.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/monitoring/auditRecords?integrationInstance=...",
            "rel": "canonical"
        }
    ],
    "totalResults": "8"
}

As you can see - log entries for viewing the activity stream, updating a lookup etc.


Now I query for log entries related to the lookup - q={timewindow:'6h', type:/ICS_DVM/}


Now I query for just a specific integration, HELLOWORLD -

q={timewindow:'6h', code:'HELLOWORLD'}


We can also add the integration version number - q={timewindow:'6h', code:'HELLOWORLD', version: '01.00.0000'}


Back to the type filter - for auditing just schedules I can use - ICS_Schedule - q={timewindow:'1h', type:'ICS_Schedule'}


For auditing libraries use - 
q=
{timewindow:'1h', type:'API_LIBRARY'}

The filter parameter - ICS_ProjectV2 - refers to integrations - 

Another Approach

One can download the audit trail from the OIC UI - 

Internally, this operation uses the following factory api - 


https://design.integration.yourRegion.ocp.oraclecloud.com/ic/api/integration/v1/monitoring/logs/icsauditlog?q=%7Btimewindow%3A%271d%27%7D&integrationInstance=yourOIC

I try this out in Postman - 


 I can save this to a file - 

Here is a short extract - 

[2026-08-04 15:44:17.007 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,UNLOCK,ICS_ProjectV2,BLAH,BLAH,01.00.0000,] User niall.commiskey@oracle.com unlocked integration BLAH (1.0)
[2026-08-04 15:44:15.618 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,UPDATE,ICS_ProjectV2,BLAH,blah,01.00.0000,] User niall.commiskey@oracle.com updated integration BLAH (1.0)
[2026-08-04 15:44:05.760 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,UPDATE,ICS_ProjectV2,BLAH,blah,01.00.0000,] User niall.commiskey@oracle.com updated integration BLAH (1.0)
[2026-08-04 15:44:04.362 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,LOCK,ICS_ProjectV2,BLAH,BLAH,01.00.0000,] User niall.commiskey@oracle.com locked integration BLAH (1.0)
[2026-08-04 15:43:20.055 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,UNLOCK,ICS_ProjectV2,BLAH,BLAH,01.00.0000,] User niall.commiskey@oracle.com unlocked integration BLAH (1.0)
[2026-08-04 15:43:18.303 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,UPDATE,ICS_ProjectV2,BLAH,blah,01.00.0000,] User niall.commiskey@oracle.com updated integration BLAH (1.0)
[2026-08-04 15:43:11.085 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,UPDATE,ICS_ProjectV2,BLAH,blah,01.00.0000,] User niall.commiskey@oracle.com updated integration BLAH (1.0)
[2026-08-04 15:43:09.583 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,LOCK,ICS_ProjectV2,BLAH,BLAH,01.00.0000,] User niall.commiskey@oracle.com locked integration BLAH (1.0)
[2026-08-04 15:43:04.313 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,UNLOCK,ICS_ProjectV2,HELLOWORLD,HELLOWORLD,01.00.0000,] User niall.commiskey@oracle.com unlocked integration HELLOWORLD (1.0)

Note the format - 
[2026-08-04 15:44:17.007 Z] [userID: niall.commiskey@oracle.com] [niall.commiskey@oracle.com,UNLOCK,ICS_ProjectV2,BLAH,BLAH,01.00.0000,] User niall.commiskey@oracle.com unlocked integration BLAH (1.0)

Compare this to the structured response from the previous api -

 







{"auditTrailMessage": "User niall.commiskey@oracle.com unlocked
integration BLAH (1.0)",
 "operationName": "unlock",
"resourceCode": "BLAH",
"resourceName": "BLAH",
 "resourceType": "ICS_ProjectV2",
 "resourceVersion": "01.00.0000",
"timeStamp": "2026-08-04T15:44:17.007+0000",
 "userName": "niall.commiskey@oracle.com"
}

The UI offers other filters - 

Let's look at the api call OIC makes to retrieve audit records for the project AA_NEW_PROJECT.

https://design.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/monitoring/auditRecords?offset=0&limit=50&q=%7Btimewindow%3A%271d%27%2C+projectCode%3A%27AA_NEW_PROJECT%27%7D&integrationInstance=yourOICInstance

As you can see, it's using the api we discussed earlier, just with a different query.
This time query is set to q={timewindow:'1d', projectCode:'AA_NEW_PROJECT'}

I try this out in Postman - works a dream, so this is another filter we can use. We can also leverage the other filters available in the UI. These are listed below.



Summa Summarum

As I hope I've shown, /ic/api/integration/v1/monitoring/auditRecords, is a useful api, with a powerful set of filters. 

Let's recap on them, firstly, those I garnered from the OUC designtime - 
  • projectCode - filter on a specific project
  • code - filter on a specific integration
  • action - designtime action e.g. UNLOCK
  • userName - filter on OIC user
Now to the documented filter - type -

  • API_LIBRARY - filter to return only Library related log entries
  • ICS_Schedule - filter to return only Schedule related log entries
  • ICS_DVM - filter to return only Lookup related log entries
  • ICS_ProjectV2 - filter to return only Integration related log entries, albeit a cryptically name type.
Net, net - I hope it can help in ensuring your design time audit trail can be exported efficiently.

Cerevisia aestiva

Today's beer is a Export Dunkel (Dark) from Spalter Brauerei. A stronger beer, 5.5%, with a true caramel colour. This is a perfect malt infused beer, which can be enjoyed at any time of the year. Spalter Brauerei is the only communally owned brewery in Germany. Ca. 5000 locals are involved in keeping this great brewing tradition alive.

 






 



  

Monday, August 3, 2026

#1159 New Service Metric for Scheduled Integrations

Introduction 

The Scheduler Triggered Instances Count metric - details how many integrations have been triggered by the OIC scheduler; naturally, only integrations of type "scheduled" can be triggered by such.

This is the metric from my Test OIC instance, where, as you can see, nothing much is happening. I add some more scheduled integrations to my project - 

Back to the metric - the only dimension we can add is flowType
The only selectable value is "SCHEDULED" - making this superfluous.

You can have multiple OIC scheduled flows running at the same time. However, each scheduled integration runs as a singleton, so you cannot have multiple instances of the same scheduled integration running simultaneously.











Thursday, July 30, 2026

#1158 - OIC 26.07 - New Service Limit for Async Queue Depth

Introduction 

In Oracle Integration Cloud (OIC), asynchronous requests decouple the client from the backend process using a fire-and-forget message-queuing mechanism. This pattern maximizes throughput, protects downstream systems from spikes in traffic, and makes efficient use of integration resources.

Great to know! However, we did introduce a service limit; on this with the 26.07 release this is based on the number of message packs assigned to the OIC instance.

We also recently introduced a new service metric - Async Queue Depth -

This will be your tool for monitoring.

Now back to the new service limit - the actual formula is built up as follows -
Take the number of messages per hour and multiply that by 10. That, essentially is the limit on the potential size of your async queue.

A simple example - I have 1 message pack assigned to my OIC instance, so this equates to 5000 * 10. That gives us a 50k limit on the queue size. This is like saying I can cope with a spike of 10 times the usual number of requests, or in other words, I have a 10 hour backlog.

We do add a buffer on top of this; in the case of a 1 message pack OIC instance, this insures the 50001th message will not be rejected. However, you should focus on the limit for the number of message packs you have assigned, and not rely on the buffer.


As you can see, the upper limit is 600k, however, this can be increased, if necessary. For such, you would need to contact Oracle, open an SR etc.

Hitting the Limit

I will run a test on an OIC 26.07 instance, but, before doing that, let's check the Async Queue Depth service metric for that instance -

As you can see, nothing in the Queue.

I will run the following async integration that, in turn, invokes a sync integration. The sync integration includes a WAIT, set to 120 seconds.
That's how I build up the queue.

I test from SOAPUI as follows - 

Test run 1 creates 20k flows.


Here we see the concurrency limit for async being enforced.

I check the service metrics and see the queue building up - the service metric query I use is as follows - AsyncInboundRequestsDepth[1m]{resourceId = "yourOCID"}.grouping().max()

20000 - 615 = 19385.

I run another 20k test - 

40000 - 1269 = 38731

Now for a 3rd SOAPUI test - 

and then a 4th run - 

Here the queue levels out, i.e. it does not increase. Note the buffer I've been given is ca. 10%, but, as already mentioned, please do not rely on this.


I now run the same async integration from within OIC - 

Error message - 
429 Too Many Requests

{"type":"429","title":"Too busy right now. Please retry later.","detail":"The service is temporarily busy. Please retry later."}

Alarm on 80% of Queue Limit 

Let's create an OCI Alarm to ensure we get informed when the queue reaches 80% of its limit. 

In your OIC instance Service Metrics page, select the Async queue metric - 

As you can see, I am using a pre-existing topic.

I run another load test - 

The email body - 

80% is probably a very high limit, from a business perspective. I discussed this with a customer, who said she would set the limit at 10%, i.e. 1 hour backlog. Net, net, this is up to you to decide on what works best for your business.  

Summa Summarum


Please be aware of this new limit, especially if you are prone to huge spikes in traffic. Again, this limit can be raised Please contact your friends at Oracle Support if you need > 600k. 

Cerevisia aestiva

As it's summer, the next set of posts will contain an extra section on the beers I'm drinking this summer. 
The Latin word for beer is cerevisia, which surfaces in the Spanish, cerveza. Aestiva is the Latin for summer.

The first beer I'll review is from Dorn Bräu, a brewery based in the Franconian town of Bruckberg, about 20 km away from me. It's a family owned brewery, founded in 1685, so these guys know what they're doing.  

This beer is what the Germans call "süffig". There is no direct English translation. The word I got was quaffable, but sure who uses that word today? 
Net, net - this is a "helles" - that means golden in colour, smooth malty taste and low in bitterness. At 5%, it's the usual strength of German beer. A great everyday beer!