Read a resource's metrics
Find a resource's CPU, memory, disk, network and HTTP charts in the portal, read the notes under them, and fetch the same numbers through the API.
Requires: monitoring/read
Reading metrics needs monitoring/read on the resource. Reader, Contributor, Owner, the platform
roles and every scoped reader and operator role hold it — see Permissions.
In the portal
- Open the resource. The Metrics card is at the bottom of its Overview tab.
- Choose the range in the card's header: 15m, 1h, 6h, 1d or 7d. It starts at 15m, and every chart in the card shows the same range.
- Above the charts, each metric has a chip with its latest value. Select a chip to hide the metric and again to show it.
- Point at a chart to see every visible metric at that moment in one tooltip.
The charts are grouped by unit, one chart per unit, on a shared time axis:
| Chart title | Metrics in it |
|---|---|
| CPU and memory, % of limit | CPU, Memory and Disk, as percentages |
| CPU, cores | CPU, when the resource declares no limits |
| Memory, bytes | Memory, when the resource declares no limits |
| Network, bytes/s | Network In and Network Out |
| HTTP requests per 30 s, 1 min or 5 min | HTTP 2xx, HTTP 3xx, HTTP 4xx and HTTP Server Errors, as requests per point |
Which resource types have the card, and what each metric measures, is listed in Charts and metrics.
Notes under the chips
| Note | Meaning |
|---|---|
| CPU: no limit set, showing absolute usage, and the same for Memory | None of the resource's containers declares both a CPU and a memory limit, or the platform has not seen its pods yet. The chart shows cores or bytes instead of a percentage |
| No persistent volume attached | The resource has no persistent volume, or no pod has mounted it yet, so there is no disk chart |
| No requests observed in this period | No request reached the resource through the platform's ingress in the range |
An error under the chips means a metric could not be loaded. Without monitoring/read, none can.
When a chart is empty
A chart that says No data has nothing to draw for the range:
- The resource is new. Points appear once its pods have run for a scrape or two.
- It is stopped. A stopped resource has no pods to measure; its history is still there in the longer ranges. With no pods the platform knows no limits either, so the notes read CPU: no limit set, showing absolute usage and the same for Memory, and the charts show cores and bytes.
- It runs in another cluster. Only the platform's own cluster is measured.
- It is an app slot. A slot's page has a Metrics card, but it shows no data in this version: a slot's pods are measured as part of the app, whose charts include them.
An HTTP chart with nothing to draw says No requests observed in this period instead: requests are only counted for traffic through the platform's ingress, so an app without a public endpoint has none.
When no resource has metrics at all, ask a platform administrator — see Troubleshoot monitoring.
Through the API
Three routes serve a resource's metrics. {type} is the resource type as it appears in the
resource's own routes: apps, containerinstances, staticwebapps, postgresclusters,
sqlserverclusters, qdrantclusters or valkeys; the routes also answer for
s3storageaccounts and functionnamespaces, which have no card. from and to are timestamps such as
2026-09-27T08:00:00Z.
Route under /boundaries/{boundaryId}/resourcegroups/{resourceGroup}/resources/monitoring/{type}/{name} |
Returns |
|---|---|
/utilization?metric=cpu, memory or disk &from=…&to=… |
The metric as a percentage: points (bucket, value), limit — the current limits of the resource's pods added up, or for disk the latest capacity — and a reason — NoLimitsDeclared or NoVolume — when there is nothing to divide by |
/requests?from=…&to=… |
Requests per point in the classes 2xx, 3xx, 4xx and 5xx, with bucketSeconds, the width of a point, and the reason NoRequestsObserved when there was no traffic |
?metric=…&aggregation=…&from=…&to=… |
One stored series, summed over the resource's pods and containers. aggregation is Avg, Max, Min, LastValue or Rate; container= narrows it to one container. The series names are listed in Stored series |
With the CLI signed in:
stsh api GET "/boundaries/<boundary-id>/resourcegroups/my-rg/resources/monitoring/apps/my-app/utilization?metric=cpu&from=2026-09-27T08:00:00Z&to=2026-09-27T09:00:00Z"
stsh api GET "/boundaries/<boundary-id>/resourcegroups/my-rg/resources/monitoring/apps/my-app/requests?from=2026-09-27T08:00:00Z&to=2026-09-27T09:00:00Z"
stsh api GET "/boundaries/<boundary-id>/resourcegroups/my-rg/resources/monitoring/apps/my-app?metric=container_memory_working_set_bytes&aggregation=Max&from=2026-09-20T00:00:00Z&to=2026-09-27T00:00:00Z"The length of the range decides the resolution — see Resolution and history. Every route of the module is listed in its API reference.