Table of Contents
ALM Job & Automation Monitoring
Retrieves job execution metrics from SAP Cloud ALM Job & Automation Monitoring (JAM). Publishes time-series metrics and evaluates alarms per configured row.
- API:
GET /api/calm-metrics/v1/metrics?provider=jam
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.jam.read$XSMASTERAPPNAME.calm-api.metrics.read
API Endpoints
| Endpoint | Purpose |
|---|---|
| POST /oauth/token | Authentication (BTP UAA) |
| GET /api/calm-metrics/v1/metrics?provider=jam | Retrieve JAM metrics |
Key Features
- Publishes eight metric types per JAM datapoint:
run_timeaverage_run_timeexecutionssuccesswarningabortedapplication_warningapplication_error - Time window is derived from the monitor schedule:
from = now - schedule_interval,to = now(formatyyyyMMddHHmmssUTC) - Paginated fetching up to 3000 records per page using
x-total-countresponse header - 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) - Optional alarm tag for grouping or routing
- Auto-clear when alarm condition no longer matches
- Load Services button: auto-discovers JAM service IDs and names from the live tenant
Data Collection
Data collection populates Service name and Service ID from the Cloud ALM JAM service registry.
Always run data collection before adding rows. A service name not returned by data collection may not match what the metrics API returns.
Click Load Services to run data collection and populate the surveillance table.
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=*and/orService name=*to match all - Use only service names returned by data collection
Settings Reference
| Field | Type | Default | Description |
|---|---|---|---|
| Active | Boolean | true | Enable or disable this row |
| Service name | String | * | Glob matched against JAM service label e.g. MY_SERVICE.100. * = all. Populated by data collection |
| Service ID | String | (empty) | UUID of service. Auto-populated by data collection |
| Metric | String | * | Metric type to match. Exact values or *. See Metric types |
| Attributes Filter | String | (empty) | Narrows datapoints. Format: key:value,key2:value2. Empty = no restriction. See Attributes Filter |
| 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 |
Metric types
| Value | Description |
|---|---|
| run_time | Last execution run time in ms |
| average_run_time | Average run time in ms |
| executions | Total execution count |
| success | Count of successful executions |
| warning | Count of executions completed with warnings |
| aborted | Count of aborted executions |
| application_warning | Count of executions with application warnings |
| application_error | Count of executions with application errors |
| * | 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 |
|---|---|---|
| jobname | Name of the scheduled job | MY_JOB |
| jobtype | Internal job type identifier | ABAP |
| jobtypelabel | Human-readable job type label | ABAP Job |
| servicetype | Service type identifier | S4 |
| servicetypelabel | Human-readable service type label | SAP S/4HANA |
Example filter value:
jobtype:ABAP,servicetypelabel:SAP S/4HANA
Filter Evaluation Order
- No rows configured: nothing is published. Add at least one active row to collect data.
Service name: glob matched against JAM service label.MY_SERVICE*matchesMY_SERVICE.100.*matches all.Metric: exact match or*. 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.jam.*
| Metric key | Unit | Description |
|---|---|---|
promonitor.cloud_alm.jam.run_time | ms | Last execution run time |
promonitor.cloud_alm.jam.average_run_time | ms | Average run time |
promonitor.cloud_alm.jam.executions | count | Total executions |
promonitor.cloud_alm.jam.success | count | Successful executions |
promonitor.cloud_alm.jam.warning | count | Executions with warnings |
promonitor.cloud_alm.jam.aborted | count | Aborted executions |
promonitor.cloud_alm.jam.application_warning | count | Executions with application warning |
promonitor.cloud_alm.jam.application_error | count | Executions with application error |
Tags published with each datapoint: service_name sap_service_name service_namespace service_instance_id sap_service_display_name plus datapoint-level tags jobname jobtype jobtypelabel servicetype servicetypelabel
Alarm Evaluation
Alarms use a suppression key to deduplicate. Format:
- With job name:
{monitorId}_{connectorId}_alm_jam_{service}_{metric}_{jobName}_{rowIdx} - Without job name:
{monitorId}_{connectorId}_alm_jam_{service}_{metric}_{rowIdx}
One alarm per unique key. A new execution value overwrites the previous alarm state for the same key.
Examples
1. Publish all metrics for all services
Set Service name = * and Metric = *. An empty table sends nothing.
2. Alarm on average run time above 5 minutes for all services
| Active | Service name | Metric | Attributes Filter | Thresholds | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|
| true | * | average_run_time | (empty) | G2W:300000 W2M:600000 | true | true | true |
Value is in ms. G2W:300000 = warning above 5 min. W2M:600000 = major above 10 min.
3. Alarm on aborted executions for one service
| Active | Service name | Metric | Attributes Filter | Thresholds | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|
| true | MY_SERVICE | aborted | (empty) | G2W:1 W2M:5 | true | true | true |
Alarms as soon as 1 aborted job appears. G2W:1 means any non-zero value triggers warning.
4. Alarm on ABAP jobs only
| Active | Service name | Metric | Attributes Filter | Thresholds | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|
| true | * | aborted | jobtype:ABAP | G2W:1 W2M:5 | true | true | true |
Only ABAP job datapoints evaluated. Other job types not matched.
5. Alarm without publishing metrics
| Active | Service name | Metric | Attributes Filter | Thresholds | Alarm | Metric |
|---|---|---|---|---|---|---|
| true | * | average_run_time | (empty) | G2W:300000 W2M:600000 | true | false |
Metric = false: alarms fire but no datapoints written to time-series.
6. Two services with different thresholds
| Active | Service name | Metric | Attributes Filter | Thresholds | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|
| true | MY_SERVICE | average_run_time | (empty) | G2W:120000 W2M:300000 | true | true | true |
| true | * | average_run_time | (empty) | G2W:300000 W2M:600000 | true | true | true |
Row 1 consumes MY_SERVICE datapoints (Exclusive = true). Row 2 applies a looser threshold to all other services.
7. Monitor errors and warnings separately
| Active | Service name | Metric | Attributes Filter | Thresholds | Alarm tag | Exclusive | Alarm | Metric |
|---|---|---|---|---|---|---|---|---|
| true | MY_SERVICE | application_error | (empty) | G2W:1 W2M:5 | JAM_ERR | true | true | true |
| true | MY_SERVICE | application_warning | (empty) | G2W:5 W2M:20 | JAM_WARN | true | true | true |
Each metric type gets its own threshold and alarm tag.
Troubleshooting
| Symptom | Check |
|---|---|
| Empty table after Load Services | Connector uses CLOUD_ALM auth. Service key is valid. Tenant has active JAM data. |
| HTTP 401 or 403 | Regenerate service key in BTP instance. Verify OAuth scopes include calm-api.jam.read. |
| No data in time window | Check the monitor schedule. The time window is now - schedule_interval. A very short schedule may return no data if JAM has not yet produced new results. |
| Metrics show 0 but Cloud ALM has data | Check from/to time window matches when JAM jobs actually run. Some measures legitimately report 0. |
| Alarms not triggering | Row is Active. Alarm is enabled. Metric and Service name match incoming data. Threshold syntax is correct. |
| Duplicate alarms for same job | Add Attributes Filter with jobname: to target a specific job per row. |
| No metrics stored when data exists | Enable Metric on the relevant row. |
Limitations
Metricfield does not support partial glob patterns.*Errordoes NOT matchapplication_error. Use exact values or*.Service IDis auto-populated by data collection. Manual entry is possible if the UUID is known.- Malformed
Attributes Filterclauses are silently ignored. Validate format before saving. - Time window resolution depends on the monitor schedule. If the schedule interval is larger than the JAM data retention window, some executions may be missed.
Exclusive = truemeans first matching row wins. Order rows from most specific to most general.
