Skip to content

Observability

Revenue › Decision Engine › Observability is your organization’s decide log. It answers two questions: what did EdgeKit answer for this user on this page, and did it refuse the request. Nothing on it is authored or editable.

Sign-in and other identity activity is not here: it is in Identity › Audience › Observability.

The screen labels its rows Events. There are three kinds:

  • A decision. One row per feature EdgeKit answered. A decide request that asks for three features writes three rows.
  • An unknown feature. One row per feature name the request asked for that your deployed document does not answer on that site, for example a misspelled, left out or removed feature. Its outcome reads unknown.
  • A refusal. One row per decide request refused before any decision, for example an origin missing from the site’s allowed list, an unknown site or a rate limit. Its outcome reads refused.

Rows cover every decide route, including journey redirects and gift link creation. Rows reach the screen within a minute or two of the request.

Column A decision A refusal
Time (UTC) When the request was decided When the request was refused
Feature The feature name, as the request sent it Empty
Outcome The outcome’s id, or unknown refused
Reason The outcome’s reason, such as grant, meter or paywall The error code, or the HTTP status, and the message
Site The site’s domain The site’s domain, when the request named one
User The user the decision was for, or Anonymous Anonymous, unless the user was identified first

The User column shows the signed-in user’s id for a browser request. For a request from your server, it shows the user id your server sent, whatever that value is. If your server sends email addresses as user ids, this column shows email addresses to everyone who can open the screen.

Select a decision row, or press Enter or Space on it, to open the full answer for that feature as it was served. It holds every value the outcome returned to the caller, unredacted. Unknown features and refusals have no detail.

  • Range: 15m, 1h, 24h, 7d or 30d. The default is 24 hours, and nothing older than 30 days can be read.
  • Result: Served or Refused.
  • Reason: the outcome’s reason, from grant, meter, registration, paywall, gift, upgrade and restricted, to Rule matched, Fell through (a canvas’s or the feature’s default answered), Error slot (an error outcome answered) and Redirect (a journey resolved to a URL).
  • Type: Allow, Deny, Redirect or Data.
  • Site: one of your sites, by domain.
  • Identity: the identity mode the request was decided under: EdgeKit only, External only or Dual.
  • Answered: Decided or Unknown feature.
  • Contains…: text in a refusal’s message.

Each filter takes one value. Clearing the filters keeps the range. The chart above the table counts the rows over the range with the same filters.

The table shows the newest 200 rows. When there are more, the footer says so: narrow the range or the filters to see further back.

The screen does not update by itself. It reads the log when it opens and each time you change a filter or the range. Select Refresh to read it again.

Every read is a staff read of your organization’s data: each one, including each Refresh, writes a row to your organization’s audit log naming who read the decide log.

  • No events in this range. Nothing matched. Try a longer range or fewer filters, and check that your site is calling decide.
  • You can’t read this organization’s decision log. Your role does not hold the Observability permission. Every other Decision Engine screen stays open to you.
  • Not set up yet. EdgeKit has not finished setting up your organization, so nothing is deciding yet.
  • We couldn’t read the log. The read failed or timed out. Select Refresh.

If your organization’s telemetry is delivered to its own account instead of to EdgeKit, the screen says so and shows no rows. Decisions are still being made: read them in that account.

Observability is a permission of its own. Every built-in role holds it: Owner, Admin, Developer, Editor and Member. A custom role holds it only when it is given it. Without it, the screen stays in the rail and shows the permission message instead of the log.