Skip to main content

How to Separate Production and Non-Production Alerts

GuideWritten by oncall.fyi editorialPublication approved by Burak YApproval recorded 12 September 2026
Sources and verification
Source dates
Oldest source check: 12 September 2026.
Technical verification
Separate technical verification has not been recorded.

Publication approval and technical verification are recorded separately. Automated link checks establish reachability, not accuracy. A checked example verifies only its stated test cases, not the whole article or your production setup.

In short

Give every monitored service a trusted environment identity and route production and non-production alerts explicitly. Define which exceptional test or shared-infrastructure failures may page, and send unmatched environments to an owned fallback. Validate both positive and negative cases: production must reach its responder, while an ordinary QA failure must not ring the production phone.

Key takeaways

  • Environment labels must come from controlled configuration, not a changing alert title.
  • Shared infrastructure needs explicit ownership across environment boundaries.
  • A correct separation test proves both delivery and non-delivery.

Decide what separation should guarantee

Write the intended behavior before choosing separate monitoring stacks. A small team may need different notification routes while sharing storage. Another team may need independent collection, credentials and failure domains. Those are different requirements, even when both are described as “separating production.”

List the allowed exceptions. A QA system supporting a scheduled customer acceptance test may need temporary urgent coverage. A shared identity service might affect production even if one symptom appears in a development environment. Make those routes explicit and time-bound where appropriate.

Establish trusted environment identity

Use a stable label such as environment with a small controlled value set. Check the final incoming alert payload, not only the source configuration. Exporters, relabeling and integration transformations can remove or override a label along the way.

The Prometheus configuration reference (opens in a new tab) describes labels and relabeling at several stages. Decide which layer is authoritative and validate its output. Avoid inferring production status from substrings in a host or alert name.

Require new services to declare their environment and owner before enabling their alert route. For legacy services, keep a visible unmatched route while correcting inventory rather than assigning unknown traffic to whichever destination is easiest.

Make notification policies readable

Write a route inventory with the exact matcher, destination, coverage window and whether additional matching routes also run. Alertmanager's routing model (opens in a new tab) is one implementation; other providers may evaluate overlapping policies differently.

Example conditionIntended destination
Production service, urgent customer impactProduction service rotation
QA service, ordinary test failureQA work queue
Development service, informational conditionDevelopment review channel
Shared dependency affecting productionShared dependency owner with production escalation
Missing or unrecognized environmentOwned routing-error fallback

Do not let a non-production child route fall through to a broad production default accidentally. Review wildcard matches and integration-level destinations as well as the visible policy tree.

Test both sides of the boundary

Prepare fixtures for the same condition in production, QA and development. Include missing labels, an unknown value and a service whose name contains “prod” even though its declared environment is QA. Add a shared-infrastructure failure and the temporary urgent-test exception.

Send the fixtures to a review receiver first. Then perform a coordinated delivery test with consenting responders. Record the exact expected recipients and confirm who did not receive a notification, rather than checking only that some message arrived somewhere.

For stronger isolation requirements, also test credential scope and a non-production collector failure. A notification rule cannot provide infrastructure isolation when both environments depend on the same unavailable evaluator or storage endpoint.

Keep temporary exceptions from becoming defaults

Record an owner and expiry for special test routes, along with the source configuration that will remove them. Re-run the negative QA case after changing severity conventions, service discovery or shared notification policies.

Monitor unmatched environments and unexpected cross-environment deliveries. If the new route loses an urgent production fixture, restore the prior configuration while fixing the matcher. Use the multi-cluster architecture guide when the requirement extends beyond routing to separate collection or query failure domains.

Did this help?

Your answer helps us improve this guide. We save only the page and your choice for 30 days.

No name, email, or incident details are requested.

Sources

Vendor facts change. Each source below shows the date this page last checked it.

  1. Prometheus configuration Prometheus. Checked 12 September 2026.
  2. Alertmanager configuration Prometheus. Checked 12 September 2026.

Related

One practical idea, occasionally

The On-Call Brief: short field notes, templates, and operational lessons.

Follow the field guide

Email subscriptions are not open yet. Read new guides in your feed reader — no email address needed.

Subscribe with RSS