Configure customer-scoped pages
Render the same status page differently per customer, with per-customer SLO thresholds.
Customer-scoped pages let one underlying page serve multiple
customers, with each customer's signed-in view filtered to the
metrics, services, and SLOs in their contract. The same page can
also apply per-customer SLO targets (for example, an enterprise
customer with 99.99% reads against a different threshold than a
standard customer signed at 99.9%).
Prerequisites
- The audience already authenticates against an Identity Provider capable of signing JWTs.
- A list of customers in the console (open Customers, then New customer, and capture each customer's identifier).
Configure the page
Switch the page to customer-scoped mode
Open the page in the console, then Access. Set:
- Mode:
customer_scoped. - Public key or JWKS URL: same as JWT mode.
- Customer claim: the JWT claim Observer should read to
identify the customer. Common choices are
sub,customer_id, or a custom claim such asobs_customer_id.
Save.
- Mode:
Bind customers to the page
Open the page, then Access, then Customers. Add each customer who is allowed to view the page. Customers without a binding receive a 403 even with a valid token.
Apply per-customer SLO targets (optional)
Open a customer, then SLO overrides. Add an override with:
- The SLO whose target should be customer-specific.
- The customer's contracted target percentage.
When the customer-scoped page renders for that customer, the SLO strip uses the override target. Other customers viewing the same page see the default SLO target.
Issuing tokens
Issue tokens for each customer with the agreed claim set. The customer-claim value must match a customer in the binding list.
{
"iss": "https://your-idp.example",
"aud": "observer-status-page",
"sub": "user-1234",
"obs_customer_id": "acme-cloud",
"exp": 1716480000
}
Behaviour
- Pages without a binding return 403 even with a valid token.
- Token expiry returns 401 and the embedded view re-fetches a token.
- SLO overrides are read on every render and require no caching on the consumer side.