Objective
Field reference and a complete example manifest for the Objective Kind.
Objective
A service-level objective: a target ratio of good events to valid events over a rolling window, with a multi-window, multi-burn-rate alerting policy generated from it. metadata.name is the natural key, unique per organization.
An objective is declared rather than derived because nothing can compute what "good" means for your service. Everything downstream of it, the error budget and the burn-rate alerts, is derived and never authored separately.
Fields
Generated from up0 schema explain Objective --version v1 --output json against a live deployment.
| Field | Type | Required | Default | Meaning |
|---|---|---|---|---|
description | string | no | (none) | |
isEnabled | boolean | no | true | |
service | string | no | (none) | A Service, referenced by metadata.name. |
monitor | string | no | (none) | A Monitor, referenced by metadata.name, resolved to a service through its own soft binding. Set service or monitor, not neither. |
sliKind | string | yes | - | availability or latency. |
sliSource | string | yes | - | synthetic (probe/monitor results) or requests (real ingested spans). |
latencyThresholdMs | integer | no | (none) | Only for sliKind: latency. An event counts as good when it is under this threshold; latency SLOs here are threshold-based, not percentile-based, because a percentile cannot be recomputed over a different window later. |
filters | object | no | {} | Narrows which events count, in the same per-signal filter shape the Query API accepts. |
target | number | yes | - | Strictly between 0 and 1. 0.999 means 99.9%. |
window | string | no | 28d | One of 7d, 28d, 30d, 90d. Rolling, not calendar-aligned; 28d is the default so the day-of-week mix in the window stays constant. |
alerting | array of object | no | (the three-tier policy below) | A multi-window, multi-burn-rate policy: each entry has name, long and short windows, a burn_rate threshold, and a severity. Rules evaluating this policy are generated from it, never authored by hand. |
Default alerting policy, applied when the field is omitted:
[
{"name": "fast", "long": "1h", "short": "5m", "burn_rate": 14.4, "severity": "critical"},
{"name": "slow", "long": "6h", "short": "30m", "burn_rate": 6, "severity": "critical"},
{"name": "trend", "long": "3d", "short": "6h", "burn_rate": 1, "severity": "warning"}
]Example
# up0/objectives/payments-api-availability.yaml
apiVersion: up0.io/v1
kind: Objective
metadata:
name: payments-api-availability
spec:
description: 99.9% of payments-api requests succeed over a rolling 28 days
service: payments-api
sliKind: availability
sliSource: requests
target: 0.999
window: 28dNo direct apply path outside a sync
Objective has no REST create or update endpoint; the only route reachable today is GET. The example above validates against the live schema; applying it needs a connected repository, which the local walk that verified this page's other examples could not complete (see Connect a repository).