Table of Contents
ALM Intelligent Event Processing
Retrieves Intelligent Event Processing (IEP) metrics from SAP Cloud ALM API. Publishes time-series metrics and evaluates alarms per configured row.
- API:
GET /api/calm-metrics/v1/metrics?provider=iep
Prerequisites
Cloud ALM Connector (required)
Requires a Web Service connector with authentication type CLOUD_ALM.
Based on a service key from the SAP Cloud ALM API service instance in the BTP subaccount.
Required OAuth scopes in the authorities list of the instance parameters:
$XSMASTERAPPNAME.calm-api.iep.read$XSMASTERAPPNAME.calm-api.metrics.read
API Endpoints
| Endpoint | Purpose |
|---|---|
| POST /oauth/token | Authentication (BTP UAA) |
| POST /api/calm-analytics/v1/analytics/providers/filters | Fetch IEP service IDs (data collection) |
| GET /api/calm-metrics/v1/metrics?provider=iep | Retrieve IEP metrics |
Key Features
- Publishes eight metric types per IEP datapoint:
eventsevent_situationstotal_durationticketsalertsmailschat_messagesoperation_flows - Time window is a 5-minute aligned UTC window with a 1-minute delay:
to = floor(now - 1min, 5min),from = to - 5min(formatyyyyMMddHHmmssUTC) - Paginated fetching up to 2000 records per page using the
x-total-countresponse header - The metrics API is only queried for the Service IDs present in active rows. Unlike the RUM, EXM and Health monitors there is no “fetch everything, filter afterwards” mode — each active row must carry a concrete
Service ID - Per-row thresholds with standard
G2W:80 W2M:90syntax. Multi Threshold Syntax Attributes Filternarrows which datapoints a row evaluatesExclusivecontrols whether a matched datapoint is consumed or passed to later rows- Glob support for
MetricandService namefields (*= all; note: partial globs like*_situationsdo NOT work onMetric) - Optional alarm tag for grouping or routing
- Auto-clear when alarm condition no longer matches
- Load Services button: auto-discovers IEP service IDs and labels from the live tenant and populates
Service nameandService IDin the table
Data Collection
Data collection populates Service name and Service ID from the Cloud ALM IEP service registry.
Always run data collection before adding rows. A service not returned by data collection does not have a usable Service ID.
Data collection runs one call:
POST /api/calm-analytics/v1/analytics/providers/filterswith body{“providerName”:“EVENTS”,“providerVersion”:“v1”}— returns the IEP service filter list. Extracts each service UUID and its label (e.g.S4H.100).
Click Load Services to run data collection and populate the surveillance table.
Why Service ID matters: the metrics API call adds&serviceId=<id1>,<id2>,…built only from theService IDvalues of active rows. A row with an emptyService IDcontributes nothing to this list. If every active row has an emptyService ID, no service ID is found, the input job skips the API call entirely, and the monitor collects no data at all.
Configuration
Method 1: Load Services
- Open monitor configuration
- Click Load Services
- Table populates with
Service nameandService IDfrom the live tenant - Enable rows, set thresholds, save
Method 2: Manual / Wildcard
- Set
Metric=*to match all metric types for a service Service IDhas no wildcard. Each active row must reference one concrete Service ID (UUID) obtained from data collectionService name=*only controls which rows a datapoint matches for publishing and alarms. It does not change which services are queried from the API — that is controlled byService IDalone
Settings Reference
| Field | Type | Default | Description |
|---|---|---|---|
| Active | Boolean | true | Enable or disable this row |
| Service name | String | * | Glob matched against IEP service label e.g. S4H.100. * = all. Populated by data collection |
| Service ID | String | (empty) | UUID of service. Required to query the metrics API for that service. Populated by data collection |
| Metric | String | * | Metric type to match. Exact values only or *. See Metric types |
| Attributes Filter | String | (empty) | Narrows datapoints. Format: key:value,key2:value2. Empty = no restriction |
| Thresholds | String | G2W:80 W2M:90 | Alarm thresholds. Multi Threshold Syntax |
| Alarm tag | String | (empty) | Optional tag appended to alarm message |
| Exclusive | Boolean | true | If true datapoint is consumed by this row and not re-evaluated by later rows |
| Alarm | Boolean | true | Enable alarm evaluation for this row |
| Metric | Boolean | true | Publish metric datapoints for this row. If false evaluate alarms only |
Metric types
| Value | Description |
|---|---|
| events | Total number of events |
| event_situations | Number of event situations |
| total_duration | Total duration associated with events |
| tickets | Number of tickets created |
| alerts | Number of alerts raised |
| mails | Number of mails sent |
| chat_messages | Number of chat messages sent |
| operation_flows | Number of operation flows triggered |
| * | All of the above |
Attributes Filter
Narrows which datapoints a row matches. All clauses must match (AND). Matching is case insensitive. Malformed clauses are silently ignored.
| Attribute | Description | Example |
|---|---|---|
| serviceType | Service type identifier | S4 |
| useCase | Use case identifier | EVENTS |
| serviceId | UUID of the service | 426ab4… |
| serviceName | Service label | S4H.100 |
| eventName | Name of the underlying event | SYSTEM_DOWN |
Example filter value:
eventName:SYSTEM_DOWN,serviceType:S4
Filter Evaluation Order
- No rows configured, or no active row carries a
Service ID: nothing is collected. Add at least one active row with aService IDto receive data. Service name: glob matched against IEP service label.S4H*matchesS4H.100.*matches all.Metric: exact match only.*matches all types. Partial globs do NOT work.Attributes Filter: all clauses must match. Empty = match all datapoints.Exclusive = true: datapoint consumed by first matching row. Later rows skip it.Metric = false: row evaluates alarms but publishes no metric datapoints.
Collected Metrics
Base key: promonitor.cloud_alm.iep.*
| Metric key | Unit | Description |
|---|---|---|
promonitor.cloud_alm.iep.events | - | Total number of events |
promonitor.cloud_alm.iep.event_situations | - | Number of event situations |
promonitor.cloud_alm.iep.total_duration | - | Total duration associated with events |
promonitor.cloud_alm.iep.tickets | - | Number of tickets created |
promonitor.cloud_alm.iep.alerts | - | Number of alerts raised |
promonitor.cloud_alm.iep.mails | - | Number of mails sent |
promonitor.cloud_alm.iep.chat_messages | - | Number of chat messages sent |
promonitor.cloud_alm.iep.operation_flows | - | Number of operation flows triggered |
Tags published with each datapoint: service.name sap.service.name service.namespace service.instance.id sap.service.display_name plus datapoint-level tags serviceType useCase serviceId serviceName eventName
Alarm Evaluation
Alarms use a suppression key to deduplicate. Format:
{monitorId}_{connectorId}_alm_iep_{service}_{metric}_{rowIdx}
One alarm per unique key. A new value overwrites the previous alarm state for the same key.
Time Window
The time window is computed at collection time using 5-minute alignment with a 1-minute delay:
adjustedNow = UTC.now() - 1 minute minuteFloor = floor(adjustedNow.minute / 5) * 5 to = adjustedNow with minute=minuteFloor, second=0, nanosecond=0 from = to - 5 minutes
Example at 14:37 UTC: from=20260601143000 to=20260601143500
This ensures the query always covers a complete 5-minute window that the IEP backend has already finalized.
Examples
1. Collect all metric types for one service
| Active | Service name | Service ID | Metric | Attributes Filter | Thresholds | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|---|
| true | S4H.100 | 426ab4-… | * | (empty) | G2W:80 W2M:90 | true | true | true |
Service ID is mandatory — there is no equivalent of “empty table = publish everything” for this monitor.
2. Alarm on event count above threshold
| Active | Service name | Service ID | Metric | Attributes Filter | Thresholds | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|---|
| true | S4H.100 | 426ab4-… | events | (empty) | G2W:1 W2M:10 | true | true | true |
Alarms as soon as 1 event appears. G2W:1 means any non-zero value triggers warning.
3. Alarm on a specific event name only
| Active | Service name | Service ID | Metric | Attributes Filter | Thresholds | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|---|
| true | S4H.100 | 426ab4-… | events | eventName:SYSTEM_DOWN | G2W:1 W2M:5 | true | true | true |
Only datapoints where eventName = SYSTEM_DOWN are evaluated.
4. Alarm on open tickets without publishing metrics
| Active | Service name | Service ID | Metric | Attributes Filter | Thresholds | Alarm tag | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|---|---|
| true | S4H.100 | 426ab4-… | tickets | (empty) | G2W:1 W2M:5 | TICKETS | true | true | false |
Metric = false: alarms fire but no datapoints written to time-series.
5. Monitor alerts and mails with different alarm tags
| Active | Service name | Service ID | Metric | Attributes Filter | Thresholds | Alarm tag | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|---|---|
| true | S4H.100 | 426ab4-… | alerts | (empty) | G2W:1 W2M:5 | IEP_ALERT | true | true | true |
| true | S4H.100 | 426ab4-… | mails | (empty) | G2W:5 W2M:20 | IEP_MAIL | true | true | true |
Each metric type gets its own alarm tag. Exclusive rows prevent cross-matching.
6. Two services with different thresholds
| Active | Service name | Service ID | Metric | Attributes Filter | Thresholds | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|---|
| true | S4H.100 | 426ab4-… | events | (empty) | G2W:1 W2M:5 | true | true | true |
| true | S4H.200 | 9b21cd-… | events | (empty) | G2W:5 W2M:20 | true | true | true |
Each row queries its own Service ID. Thresholds are independent per service.
7. Suppress an informational metric from alarming
| Active | Service name | Service ID | Metric | Attributes Filter | Thresholds | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|---|
| true | S4H.100 | 426ab4-… | operation_flows | (empty) | G2W:80 W2M:90 | true | false | false |
| true | S4H.100 | 426ab4-… | * | (empty) | G2W:80 W2M:90 | true | true | true |
Row 1 consumes operation_flows (Exclusive = true, Alarm = false, Metric = false). Row 2 handles the remaining measures for the same service.
Troubleshooting
| Symptom | Check |
|---|---|
| No data collected even though rows are Active | Every active row has an empty Service ID. The metrics API is never called without at least one. Run Load Services and fill the row. |
| Empty table after Load Services | Connector uses CLOUD_ALM auth. Service key is valid. Tenant has active IEP data. |
| Service name in row does not match | Run data collection again. Use only labels returned by Load Services. Do not type service names manually. |
| HTTP 401 or 403 | Regenerate service key in BTP instance. Verify OAuth scopes are set. |
| Metrics show 0 but Cloud ALM has data | Some measures legitimately report 0 for the 5-minute window. Check filter and attribute values match actual data. |
| Alarms not triggering | Row is Active. Alarm is enabled. Service ID is set. Metric and Service name match incoming data. Threshold syntax is correct. |
| No metrics stored when data exists | Enable Metric on the relevant row. |
| Stale data after adding new services | Click Load Services again or wait for the next scheduled run. |
Limitations
Metricfield does not support partial glob patterns.*_situationsdoes NOT matchevent_situations. Use exact values or*.Service IDis not optional like in the other ALM monitors: without it on at least one active row, the monitor collects nothing for that service.- Malformed
Attributes Filterclauses are silently ignored. Validate format before saving. Exclusive = truemeans first matching row wins. Order rows from most specific to most general.- Thresholds apply to the raw numeric value of the selected metric.
