Skip to main content
Most Observer metrics are probed: an agent runs a probe on a schedule and reports the result. Manual metrics are the escape hatch for signals that have no automation, or where the operator wants to control the status surface explicitly.

When to use a manual metric

  • A signal that has no observability today (a third-party SaaS outage, a vendor dependency, an internal system without instrumentation).
  • A high-level rollup that should follow operator judgment, not a noisy underlying measurement.
  • A service whose status is gated on a contract with a vendor (where Observer should reflect what the vendor says, not what we measure).

What is different

How status flips

Two paths set status on a manual metric:
  1. API: POST /api/v1/metrics/{id}/status with {"status": "unhealthy"}. Scope: write:metrics.
  2. Incident impact: when an open incident lists a service with an SLO on a manual metric, that metric auto-flips to mirror the incident severity (minor to degraded, major or critical to unhealthy). On resolve, it is set to healthy.

Threshold model

Manual metrics carry no thresholds. Status is set directly. The healthy_* / unhealthy_* columns on the metric definition are ignored.
AuditEvery manual transition that changes the status writes an audit log row of action metric.status.set_manually with the actor, source, and old → new status. Useful when reconstructing why a public page rendered a particular status at a given time.