Operator Events
Operator events let you subscribe to lifecycle events from your Outpost deployment — delivery failures, destination disabling, retry exhaustion, and subscription changes. Use them to build alerting, auditing, or automation on top of Outpost.
Configuration
Enable operator events by specifying which topics to subscribe to and configuring a sink to receive them.
Topics
Set OPERATOR_EVENTS_TOPICS to a comma-separated list of topics, or * for all topics:
Available topics:
| Topic | Trigger |
|---|---|
alert.destination.consecutive_failure | Consecutive failure count reaches 50%, 70%, 90%, or 100% of ALERT_CONSECUTIVE_FAILURE_COUNT |
alert.destination.disabled | Destination auto-disabled at 100% failure threshold |
alert.attempt.exhausted_retries | Delivery exhausts all retry attempts (deduplicated per event+destination) |
tenant.subscription.updated | Destination created, updated, deleted, disabled, or enabled (when topics or destination count changes) |
If OPERATOR_EVENTS_TOPICS is empty or unset, operator events are disabled. If topics are configured but no sink is set, Outpost will fail to start.
Sinks
Configure exactly one sink to receive events. Four sink types are supported:
HTTP
Sends events as POST requests to a URL, signed with HMAC-SHA256.
The HTTP sink signs each request body and sends the signature in the X-Outpost-Signature header:
- Format:
v0=<hex> - Algorithm: HMAC-SHA256 over the raw JSON body
Verification example:
python
AWS SQS
GCP Pub/Sub
RabbitMQ
Event Envelope
All operator events share a common envelope:
json
| Field | Description |
|---|---|
id | Unique event identifier |
topic | Event topic |
time | ISO 8601 timestamp |
deployment_id | Deployment ID (if configured) |
tenant_id | Tenant associated with the event (if applicable) |
data | Topic-specific payload (see below) |
Event Payloads
alert.destination.consecutive_failure
Emitted when a destination's consecutive failure count reaches 50%, 70%, 90%, or 100% of ALERT_CONSECUTIVE_FAILURE_COUNT.
json
alert.destination.disabled
Emitted when a destination is auto-disabled after reaching 100% of the failure threshold. Only emitted when ALERT_AUTO_DISABLE_DESTINATION=true.
json
alert.attempt.exhausted_retries
Emitted when a delivery exhausts all retry attempts. Deduplicated per event+destination within a configurable time window (ALERT_EXHAUSTED_RETRIES_WINDOW_SECONDS, default: 3600).
json
tenant.subscription.updated
Emitted when a destination is created, updated, deleted, disabled, or enabled, and the change affects the tenant's subscribed topics or destination count.
json
Delivery Guarantees
Operator events are delivered on a best-effort basis with up to 3 attempts. Consumers should use the id field for deduplication.
Related Configuration
| Config | Description | Default |
|---|---|---|
ALERT_CONSECUTIVE_FAILURE_COUNT | Number of consecutive failures before the 100% threshold | 100 |
ALERT_AUTO_DISABLE_DESTINATION | Auto-disable destinations at 100% failure threshold | false |
ALERT_EXHAUSTED_RETRIES_WINDOW_SECONDS | Deduplication window for exhausted retry alerts (seconds) | 3600 |