Tuesday, October 28, 2025

#1098 - OIC Monitoring - checking for aborted instances

Introduction 

OIC flow instances can abort for the following reasons -

  • timeout - e.g. async flow taking longer than 6 hours.
  • flow aborted by OIC admin.

So how can I see such instances?

OIC Observability

Set the status filter to Aborted to just see aborted instances.

OIC Factory API

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

{
    "dataFetchTime": "2025-10-28T07:44:29.235+0000",
    "hasMore": false,
    "id": "instances",
    "items": [
        {
            "creationDate": "2025-10-28T07:44:06.204+0000",
            "date": "2025-10-28T07:44:21.311+0000",
            "duration": 109,
            "fifo": false,
            "flowType": "ASYNC_ONE_WAY",
            "hasRecoverableFaults": false,
            "id": "4cIoOrPREfCH0M9O6IAqnQ",
            "instanceId": "4cIoOrPREfCH0M9O6IAqnQ",
            "instanceReportingLevel": "Production",
            "integration": "ASYNCTEST|01.00.0000|AA_PROJECT2",
            "integrationId": "ASYNCTEST",
            "integrationName": "asyncTest",
            "integrationVersion": "01.00.0000",
            "invokedBy": "niall.commiskey@oracle.com",
            "isDataAccurate": true,
            "isLitmusFlow": false,
            "isLitmusSupported": false,
            "isPurged": false,
            "lastTrackedTime": "2025-10-28T07:44:21.311+0000",
            "links": [
                {
                    "href": "https://.../ic/api/integration/v1/monitoring/instances/4cIoOrPREfCH0M9O6IAqnQ?integrationInstance=....",
                    "rel": "self"
                },
                {
                    "href": "https://.../ic/api/integration/v1/monitoring/instances/4cIoOrPREfCH0M9O6IAqnQ?integrationInstance=....",
                    "rel": "canonical"
                }
            ],
            "litmusResultStatus": "",
            "mepType": "ASYNC_ONE_WAY",
            "nonScheduleAsync": true,
            "opcRequestId": "5OLUCU9R8EPMK53I4O9J4P9OHQS3WWSI/X3PTAN6JYB3GKUVWIYHYWMYVOJBRBIFG/1Y53WJY8OE8WF8TYR5X7GSR8PWXE27VM",
            "outboundQueueNames": [],
            "processingEndDate": "2025-10-28T07:44:06.671+0000",
            "projectCode": "AA_PROJECT2",
            "projectFound": true,
            "projectName": "AA-Project2",
            "receivedDate": "2025-10-28T07:44:06.562+0000",
            "replayable": false,
            "replayed": false,
            "status": "ABORTED",
            "trackings": [
                {
                    "name": "orderNr",
                    "primary": true,
                    "value": "123"
                }
            ]
        }
    ],
    "links": [
        {
            "href": "https://.../ic/api/integration/v1/monitoring/instances?integrationInstance=....",
            "rel": "self"
        },
        {
            "href": "https://.../ic/api/integration/v1/monitoring/instances?integrationInstance=....",
            "rel": "canonical"
        }
    ],
    "totalRecordsCount": 1,
    "totalResults": 1
}

The above response is for an async flow I aborted. Note the following - 
                      "hasRecoverableFaults": false,
  "mepType": "ASYNC_ONE_WAY",
            "nonScheduleAsync": true,
            ...
  "replayable": false,
            "replayed": false,
            "status": "ABORTED",
            "trackings": [
                {
                    "name": "orderNr",
                    "primary": true,
                    "value": "123"
                }
Aborted flows cannot be recovered (re-submitted). Note the message exchange pattern value, it is set to "ASYNC_ONE_WAY". Also note the tracking fields. 

Now to scheduled integrations - here is an extract from the response - 

        "mepType": "SCHEDULED",
            "nonScheduleAsync": false,
            "opcRequestId": "oci-...",
            "outboundQueueNames": [],
            "processingEndDate": "2025-10-28T09:56:35.832+0000",
            "projectCode": "AA_PROJECT2",
            "projectFound": true,
            "projectName": "AA-Project2",
            "receivedDate": "2025-10-28T09:56:35.750+0000",
            "replayable": false,
            "replayed": false,
            "status": "ABORTED",
            "trackings": [
                {
                    "name": "param_dateLastRun",
                    "primary": true,
                    "value": "2025-10-27T00:00:00.000Z"
                }
            ]

Note the message exchange pattern value, it is set to "SCHEDULED". Also note the tracking fields.
I've used a scheduled parameter, that holds the value of data last run as my primary tracking field. 

OCI Logging

This is the relevant activity stream log entry in OCI Logging - 


{
  "datetime": 1761645414299,
  "logContent": {
    "data": {
      "actionName": "ABORT",
      "actionType": "Abort",
      "eventId": "buZXXrPkEfCgjGnZvXiYSA",
      "executedTime": "2025-10-28T09:56:54.299Z",
      "instanceId": "Y7JMh7PkEfConmFtqrFmpg",
      "integrationFlowIdentifier": "LOADNEWORDERS!01.00.0000",
      "message": "Instance aborted by niall.commiskey@oracle.com  , Source: User , Reason: Abort the in-progress/recoverable instances",
      ...
      "parentEventId": "ALAFIN",
      "projectCode": "AA_PROJECT2",
      "userId": "niall.commiskey@oracle.com"
    },
    "id": "702f03b0-b3e4-11f0-a6d2-ff2cb7d37a5c",
    "oracle": {
    ...
    "specversion": "1.0",
    "time": "2025-10-28T09:56:54.299Z",
    "type": "com.oraclecloud.integration.integrationinstance.activitystream"
  },
  "regionId": "us-phoenix-1"
}

Note the message value - "Instance aborted by niall.commiskey@oracle.com  ,
Source: User ,
Reason: Abort the in-progress/recoverable instances",
     
Also note the actionName & actionType values. I can use these in a search filter -












I can save the search - 











I can use the saved search as the basis for an OCI Dashboard widget - 












Granted, this is of limited use, as it does not include the name/id of the relevant integration.

However, I can click the open with logging search link -











Still not optimal, 
so let's look at OCI Log Analytics -

OCI Log Analytics

Let's try out the following query in Log Explorer -

'Log Source' = 'OCI Integration Activity Stream Logs' and 'Action Type' in (Abort) | stats distinctcount(Instance) as 'Aborted Flow Instances', trend(distinctcount(Instance))

I now group by Integration

This looks good - now to include this in a dashboard - 

Summa Summarum

AS my auld grandmother from the Monaghan/Armagh border used to say - there's many ways to skin a cat! 

I hope you find the observability options I've covered useful. Next step is to raise an alarm on aborted instances, the topic of a future post.
 











 


 

No comments: