Key Metrics and Thresholds¶
Applies to: All subscriptions
Purpose¶
Define what to measure, what healthy looks like, and the point at which someone should act. Thresholds here are starting points; the section ends with how to replace them with measured values.
Audience¶
Operations teams, infrastructure teams, the customer's integration owner.
Prerequisites¶
- Health Endpoints
- At least four weeks of real traffic, before setting final thresholds
Reference¶
Every threshold below is a starting point, not a measurement. Replace each with a value derived from your own baseline after four weeks. A threshold set from a document rather than from data produces either constant noise or silence.
Infrastructure¶
| Metric | Healthy | Warn | Act |
|---|---|---|---|
| Application CPU, sustained | Under 60% | 60–75% | Above 75% |
| Application memory, peak | Under 75% | 75–85% | Above 85%, or any out-of-memory event |
| Database CPU, sustained | Under 50% | 50–70% | Above 70% |
| Disk free, any volume | Above 30% | 20–30% | Below 20% |
| Database growth against forecast | Within 25% | 25–50% over | Above 50% over — re-forecast now |
Application¶
| Metric | Healthy | Warn | Act |
|---|---|---|---|
| Health probe | Responding under 2s | 2–5s | Failing, or over 5s |
| Error rate | Under 1% of requests | 1–5% | Above 5% |
| Response time, list screens | Under 2s | 2–5s | Above 5s |
| Failed sign-ins | At baseline | Above baseline | A sharp rise — check mail before authentication |
| Oldest incomplete job | Under normal processing time | Up to twice it | Beyond twice it — worker or queue |
| Queue depth | Rises and falls | Rising steadily | Only rising — nothing is consuming |
The last row is the classic silent failure. A depth that only rises means jobs are enqueued and never processed, and the application looks perfectly healthy throughout.
Business¶
These are the metrics most teams omit and where the consequences live.
| Metric | Healthy | Warn | Act |
|---|---|---|---|
| Documents processed per day | Within the normal range | Outside it | Zero during business hours |
| Validation rejection rate | At your baseline | 1.5× baseline | 2× baseline — find the systemic cause |
| Government rejection rate | Near zero | Any sustained rise | Any code recurring — validation should have caught it |
| Documents in quarantine | Cleared daily | Ageing beyond a day | Ageing beyond three days |
| Oldest unregistered document | Well inside the reporting window | Half the window consumed | Two-thirds consumed |
| Documents awaiting registration | Cleared daily | Growing | Growing while the provider is healthy |
| e-Way Bills approaching expiry | Actioned before the alert horizon | Within the horizon | Past it |
The unregistered-document metric is the one with no remedy. Once the reporting window closes, the document cannot be registered — not by configuration, not by escalation, not by support. It is the only metric in this section where crossing the threshold is unrecoverable, and it deserves the most aggressive alerting.
Integration¶
| Metric | Healthy | Warn | Act |
|---|---|---|---|
| Documents received per ERP per hour | Within the normal range | Below it | Zero during business hours |
| Ingest rejection rate per ERP | At baseline | Rising | Sharply rising — an ERP change |
| Write-back backlog age | Under the consumer's interval | 2× the interval | 4× the interval |
| Write-back backlog count | Stable | Rising | Rising with rising age |
| Consecutive delivery failures | Zero | Any | Threshold reached — the circuit will open |
| Dead-lettered events | Zero | Any | Any, before retention expires |
| Provider call volume | Within budget | Approaching it | Above it — check for a polling read |
Alert on backlog age, not count. A steady count can hide a stuck head-of-queue indefinitely; a rising age cannot be hidden.
Security and compliance¶
| Metric | Healthy | Act |
|---|---|---|
| Certificate days remaining | Above 30 | Below 30 |
| Provider credential days remaining | Above 30 | Below 30 |
| Failed authentication attempts | At baseline | A spike, or an unusual source |
| Accounts active but unused for 90 days | None | Any — access review overdue |
| Administrators | At least 2 | Fewer than 2 |
Establishing your own baselines¶
| Week | Action |
|---|---|
| 1 | Collect everything. Set no thresholds |
| 2 | Observe the daily and weekly shape, including month end |
| 3 | Calculate normal ranges from real data |
| 4 | Set thresholds above the observed normal, with headroom |
| Ongoing | Review quarterly, and after any volume change |
Month end matters. Many of these metrics have a monthly peak that a first-week baseline entirely misses, and thresholds set from a quiet week produce a wall of alerts on the last working day.
Validation¶
| Check | Pass condition |
|---|---|
| All four layers measured | Infrastructure, application, business and integration all covered |
| Baselines measured, not assumed | Four weeks of data behind each threshold |
| Month end included | Baselines cover a full cycle |
| The unregistered-age metric exists | Configured, with the most aggressive alerting |
| Backlog alerts use age | Not count |
| ERP-side metrics exist | The customer monitors what their ERP sends |
| Thresholds reviewed | Quarterly, with a named owner |
| Every threshold has an owner | Somebody acts when it fires |
Troubleshooting¶
| Symptom | Cause | Action |
|---|---|---|
| Constant alerting | Thresholds set from a document rather than measurement | Re-derive from your own baseline |
| Silence while problems occur | Thresholds too loose, or the metric absent | Check coverage of all four layers |
| Alert storm at month end | Baselines from a quiet period | Include a month end in the baseline |
| Queue depth rising only | Nothing consuming | Check the worker and the queue |
| Rejection rate doubled overnight | An ERP or master data change | Compare a current payload against one from before |
| Provider volume above budget | An integration polling a read with a local answer | Review the calling pattern |
| Backlog age rising, count flat | Stuck head-of-queue | Investigate the oldest event specifically |
| Documents unregistered past the window | The metric was not monitored | There is no remedy. Add the metric before it recurs |
Related Articles¶
- Health Endpoints — how to collect these
- Alerting — turning thresholds into action
- Daily Checks — the human routine
- Sizing and Capacity — the capacity view