# Observer ## Documentation - [Documentation](https://observer-1784919896800871100.documentationai.com/docs/overview.md): Reference and guidance for Observer, the metrics-driven status page platform. - [Define your first metric](https://observer-1784919896800871100.documentationai.com/docs/quickstart/first-metric.md): Install the agent, define a metric backed by a Prometheus query, and report status to Observer Cloud. - [Define your first metric (HTTP probe)](https://observer-1784919896800871100.documentationai.com/docs/quickstart/first-metric-http.md): Install the agent, define a metric backed by an HTTP probe, and report status to Observer Cloud. - [Define your first SLO](https://observer-1784919896800871100.documentationai.com/docs/quickstart/first-slo.md): Attach a service level objective to a metric and read the error budget. - [Publish your first status page](https://observer-1784919896800871100.documentationai.com/docs/quickstart/first-status-page.md): Compose services, metrics, and SLOs into a customer-facing status page on a subdomain. - [File your first incident](https://observer-1784919896800871100.documentationai.com/docs/quickstart/first-incident.md): Walk a draft → publish → update → resolve incident through the console. - [Schedule your first maintenance](https://observer-1784919896800871100.documentationai.com/docs/quickstart/first-maintenance.md): Schedule a maintenance window with auto-start and auto-complete. - [Add email subscribers to your status page](https://observer-1784919896800871100.documentationai.com/docs/quickstart/first-subscriber.md): Configure the subscribe block, set up double opt-in, and verify a test subscription. - [How Observer works](https://observer-1784919896800871100.documentationai.com/docs/concepts/architecture.md): A high-level view of the agent, the cloud, and how they exchange data. - [Why metrics, not pings](https://observer-1784919896800871100.documentationai.com/docs/concepts/metrics-vs-pings.md): The case for metric-based status over availability pings. - [SLOs and error budgets](https://observer-1784919896800871100.documentationai.com/docs/concepts/slos-and-error-budgets.md): How service level objectives translate metric status into a contractual signal. - [Customer scopes](https://observer-1784919896800871100.documentationai.com/docs/concepts/customer-scopes.md): Per-customer status pages, JWT-verified, with per-customer SLO targets. - [Thresholds and dwell](https://observer-1784919896800871100.documentationai.com/docs/concepts/thresholds-and-dwell.md): How a metric's status is decided, and how dwell gating prevents flapping. - [How status is calculated](https://observer-1784919896800871100.documentationai.com/docs/concepts/how-status-is-calculated.md): Every number and color on a status page, where it comes from, and why it works that way. - [Observer availability](https://observer-1784919896800871100.documentationai.com/docs/concepts/observer-availability.md): What happens when Observer Cloud is degraded, when the agent stops pushing, and why your customers will not see a red status page because of our outage. - [Incidents and metrics](https://observer-1784919896800871100.documentationai.com/docs/concepts/incidents-and-metrics.md): How customer-facing incidents relate to metric-driven status. - [Manual metrics](https://observer-1784919896800871100.documentationai.com/docs/concepts/manual-metrics.md): When the agent can't measure it, set the status explicitly. - [Incident SLO impact](https://observer-1784919896800871100.documentationai.com/docs/concepts/incident-slo-impact.md): How the auto-impact panel computes burn rate and time to budget exhaustion. - [Configure outbound webhooks](https://observer-1784919896800871100.documentationai.com/docs/guides/outbound-webhooks.md): Subscribe an HTTPS endpoint to status, SLO, and agent events. - [Serve a status page on your own domain](https://observer-1784919896800871100.documentationai.com/docs/guides/custom-domain.md): Point status.yourdomain.com at Observer with automatic TLS. - [Password-protect a status page](https://observer-1784919896800871100.documentationai.com/docs/guides/password-protected-pages.md): Require visitors to enter a password before the page renders. - [Configure JWT-scoped access](https://observer-1784919896800871100.documentationai.com/docs/guides/jwt-scoped-access.md): Gate a status page behind a Bearer token verified against your public key or JWKS endpoint. - [Configure customer-scoped pages](https://observer-1784919896800871100.documentationai.com/docs/guides/customer-scoped-pages.md): Render the same status page differently per customer, with per-customer SLO thresholds. - [Use multiple metric sources](https://observer-1784919896800871100.documentationai.com/docs/guides/multiple-metric-sources.md): Mix Prometheus, HTTP, TCP, DNS, and TLS certificate probes in one Observer organisation. - [Start a metric from a template](https://observer-1784919896800871100.documentationai.com/docs/guides/metric-templates.md): Pre-filled metric definitions for common patterns. Pick one, fill a couple of parameters, edit anything, save. - [Threshold suggestions from observed data](https://observer-1784919896800871100.documentationai.com/docs/guides/threshold-suggestions.md): After about a week of history, Observer suggests healthy and unhealthy thresholds grounded in the metric's actual values. - [Customize the status page theme](https://observer-1784919896800871100.documentationai.com/docs/guides/theme-customization.md): Apply a built-in theme preset or override colors, typography, and spacing on a per-page basis. - [Status badges and the public status API](https://observer-1784919896800871100.documentationai.com/docs/guides/status-badges-and-api.md): Embed a live status badge in a README, and read page status as JSON or feeds. - [Define a manual metric](https://observer-1784919896800871100.documentationai.com/docs/guides/define-a-manual-metric.md): The cleanest path for operators without metrics infrastructure. - [Create incidents via API](https://observer-1784919896800871100.documentationai.com/docs/guides/incidents-via-api.md): For IR automation and ChatOps integrations. - [Auto-incident creation](https://observer-1784919896800871100.documentationai.com/docs/guides/auto-incident-creation.md): Opt a metric in to automatic draft-incident creation when it flips unhealthy. Drafts ship with email CTAs so a human always verifies before customers see the incident. - [Migrate from Statuspage](https://observer-1784919896800871100.documentationai.com/docs/guides/migrate-from-statuspage.md): Move services, components, incidents, and subscribers from Atlassian Statuspage to Observer. - [Notifications overview](https://observer-1784919896800871100.documentationai.com/docs/notifications/index.md): Route incident alerts to chat, on-call, and webhook destinations from the integrations console. - [Slack, Discord, Teams, and webhooks](https://observer-1784919896800871100.documentationai.com/docs/notifications/chat-and-webhooks.md): Post incident alerts to a chat channel or a signed HTTPS endpoint. - [Telegram](https://observer-1784919896800871100.documentationai.com/docs/notifications/telegram.md): Connect a Telegram chat to receive incident alerts. - [PagerDuty](https://observer-1784919896800871100.documentationai.com/docs/notifications/pagerduty.md): Trigger, update, and resolve a PagerDuty incident from Observer. - [Jira](https://observer-1784919896800871100.documentationai.com/docs/notifications/jira.md): Open a Jira issue per incident and transition it when the incident resolves. - [Splunk On-Call](https://observer-1784919896800871100.documentationai.com/docs/notifications/splunk-on-call.md): Open and recover a Splunk On-Call incident from Observer. - [Grafana IRM](https://observer-1784919896800871100.documentationai.com/docs/notifications/grafana-irm.md): Fire and resolve a Grafana IRM alert from Observer via an incoming webhook. - [RSS and Atom feeds](https://observer-1784919896800871100.documentationai.com/docs/notifications/rss-feeds.md): A public feed of incidents per status page. - [MCP server](https://observer-1784919896800871100.documentationai.com/docs/mcp/index.md): Observer runs a remote Model Context Protocol server at mcp.use.observer. Connect Claude, Cursor, or any MCP client and let an assistant read your metrics, services, SLOs, incidents, and maintenance windows, and run operations, using your Observer API key. - [Webhook payload reference](https://observer-1784919896800871100.documentationai.com/docs/reference/webhook-payloads.md): JSON shapes for every event type Observer emits. - [Audit log events](https://observer-1784919896800871100.documentationai.com/docs/reference/audit-log-events.md): Categories of administrative events recorded in the audit log. - [Threshold operators](https://observer-1784919896800871100.documentationai.com/docs/reference/threshold-operators.md): How healthy / degraded / unhealthy is decided from a metric value. - [Incident and maintenance lifecycle](https://observer-1784919896800871100.documentationai.com/docs/reference/incident-lifecycle.md): States, transitions, and the events fired on each. - [Subscriber notification events](https://observer-1784919896800871100.documentationai.com/docs/reference/subscriber-events.md): Which incident and maintenance transitions trigger subscriber emails. - [RSS / Atom feed reference](https://observer-1784919896800871100.documentationai.com/docs/reference/feed.md): Public feed shape, caching headers, and exclusion rules. - [Status page renders blank](https://observer-1784919896800871100.documentationai.com/docs/troubleshooting/page-renders-blank.md): Diagnose a public status page that returns 200 but shows no content blocks. - [Metric shows no data](https://observer-1784919896800871100.documentationai.com/docs/troubleshooting/metric-shows-no-data.md): Diagnose a metric that displays no current value or status in the console. - [Webhook deliveries failing](https://observer-1784919896800871100.documentationai.com/docs/troubleshooting/webhook-deliveries-failing.md): Diagnose a webhook subscription whose deliveries do not reach the receiver, or whose receiver rejects them. - [SSO not working](https://observer-1784919896800871100.documentationai.com/docs/troubleshooting/sso-not-working.md): Diagnose JWT-based access on customer-scoped pages and authentication issues for the console. ## Observer Agent - [Observer Agent](https://observer-1784919896800871100.documentationai.com/agent/overview.md): Runs in your network. Probes metric sources, computes status, pushes results to Observer Cloud. - [Install from a release binary](https://observer-1784919896800871100.documentationai.com/agent/quickstart/install-binary.md): Download a single-file executable from GitHub Releases. No runtime install required on the host. - [Install on Docker](https://observer-1784919896800871100.documentationai.com/agent/quickstart/install-docker.md): Run the published image with three environment variables. - [Install on Kubernetes](https://observer-1784919896800871100.documentationai.com/agent/quickstart/install-kubernetes.md): Deployment manifest with Secret-bound credentials. - [Agent and cloud boundary](https://observer-1784919896800871100.documentationai.com/agent/concepts/agent-cloud-boundary.md): What crosses the network and what does not. - [Probes vs scraping](https://observer-1784919896800871100.documentationai.com/agent/concepts/probes-vs-scraping.md): Why the agent runs probes from inside your network instead of having the cloud scrape endpoints. - [The local queue](https://observer-1784919896800871100.documentationai.com/agent/concepts/local-queue.md): Why the agent buffers status pushes locally, and how the buffer behaves under cloud unreachability. - [Build provenance](https://observer-1784919896800871100.documentationai.com/agent/concepts/build-provenance.md): How the agent reports what build it is running, and what the Official, Source, and Modified badges mean. - [Bun and distroless: design choices](https://observer-1784919896800871100.documentationai.com/agent/concepts/bun-distroless-design.md): Why the agent runs on Bun and ships in a distroless image. - [Configure Prometheus query metrics](https://observer-1784919896800871100.documentationai.com/agent/guides/prometheus-source.md): Define a metric whose value comes from a PromQL query the agent runs against your Prometheus. - [Receive metrics over OpenTelemetry (OTLP)](https://observer-1784919896800871100.documentationai.com/agent/guides/otlp-source.md): Run the agent as an OTLP/HTTP receiver so any OpenTelemetry-compatible sender can push metrics into Observer. - [Read metrics from AWS CloudWatch](https://observer-1784919896800871100.documentationai.com/agent/guides/cloudwatch-source.md): Configure the agent to pull a single CloudWatch metric per cron tick using GetMetricData, with optional cross-account role assumption. - [Configure a Grafana Loki source](https://observer-1784919896800871100.documentationai.com/agent/guides/loki-source.md): Turn a LogQL aggregation into a metric. Error rates, event counts, and other signals that live only in logs. - [Configure an Elasticsearch or OpenSearch source](https://observer-1784919896800871100.documentationai.com/agent/guides/elasticsearch-source.md): Turn an Elasticsearch / OpenSearch aggregation into a metric. Error counts, latency percentiles, unique users. - [Read metrics from a database query](https://observer-1784919896800871100.documentationai.com/agent/guides/database-source.md): Configure the agent to run a single read-only query against PostgreSQL, MySQL, Redis, or MongoDB on each cron tick and report the scalar result. - [Configure HTTP probes](https://observer-1784919896800871100.documentationai.com/agent/guides/http-probes.md): Probe an HTTP endpoint and report response time as the metric value. - [Configure TCP probes](https://observer-1784919896800871100.documentationai.com/agent/guides/tcp-probes.md): Open a TCP connection and report connect time as the metric value. - [Configure ICMP ping probes](https://observer-1784919896800871100.documentationai.com/agent/guides/icmp-probes.md): Ping a host for reachability, latency, or packet loss. A layer-3 network health check. - [Configure DNS probes](https://observer-1784919896800871100.documentationai.com/agent/guides/dns-probes.md): Resolve a record and report resolve time as the metric value. - [Configure TLS certificate probes](https://observer-1784919896800871100.documentationai.com/agent/guides/tls-cert-probes.md): Connect to a TLS endpoint and report days until certificate expiry. - [Configure WebSocket probes](https://observer-1784919896800871100.documentationai.com/agent/guides/websocket-probes.md): Connect to a ws:// or wss:// endpoint and measure handshake latency, round-trip latency, or connection success. - [Configure gRPC health-check probes](https://observer-1784919896800871100.documentationai.com/agent/guides/grpc-probes.md): Probe a gRPC service using the standard gRPC Health Checking Protocol. Reports SERVING / NOT_SERVING or Check latency. - [Write custom probes](https://observer-1784919896800871100.documentationai.com/agent/guides/custom-probes.md): The escape hatch. Register a probe function in your agent's codebase and reference it by name from Observer. - [Connect to Grafana Cloud](https://observer-1784919896800871100.documentationai.com/agent/guides/connect-grafana-cloud.md): Use a Grafana Cloud Prometheus endpoint as the agent's metric source. - [Read the agent dashboard](https://observer-1784919896800871100.documentationai.com/agent/guides/read-the-dashboard.md): How to interpret the panels exposed on the agent's debug HTTP surface. - [Diagnose a stalled agent](https://observer-1784919896800871100.documentationai.com/agent/guides/diagnose-stalled-agent.md): Triage path when an agent stops reporting or its queue depth grows. - [Rotate the agent's authentication key](https://observer-1784919896800871100.documentationai.com/agent/guides/rotate-agent-key.md): Generate a new agent key, deploy it, and retire the old one with no observability gap. - [Environment variables](https://observer-1784919896800871100.documentationai.com/agent/reference/environment-variables.md): Every environment variable the agent reads, with defaults and meaning. - [Probe types](https://observer-1784919896800871100.documentationai.com/agent/reference/probe-types.md): Source types the agent supports, with their value semantics and runtime status. - [Dashboard panels](https://observer-1784919896800871100.documentationai.com/agent/reference/dashboard-panels.md): Read-only state surface served on the agent's debug HTTP port. - [Heartbeat payload](https://observer-1784919896800871100.documentationai.com/agent/reference/heartbeat-payload.md): JSON shape the agent posts to /api/agent/heartbeat. ## API - [API reference](https://observer-1784919896800871100.documentationai.com/api/overview.md): Observer's public REST API. Authenticated with API keys scoped per organisation. - [Authentication](https://observer-1784919896800871100.documentationai.com/api/getting-started/auth.md): API keys, scopes, and how to authenticate requests against the public API. - [Errors and status codes](https://observer-1784919896800871100.documentationai.com/api/getting-started/errors.md): The RFC 7807 problem-detail shape every /api/v1 error returns, the title tokens to branch on, and the status codes each endpoint can produce. - [GET /services](https://observer-1784919896800871100.documentationai.com/api/services/get-services.md): List services - [GET /services/{id}](https://observer-1784919896800871100.documentationai.com/api/services/get-services-by-id.md): Get service by id - [GET /metrics](https://observer-1784919896800871100.documentationai.com/api/metrics/get-metrics.md): List metrics - [GET /metrics/{id}](https://observer-1784919896800871100.documentationai.com/api/metrics/get-metrics-by-id.md): Get metric by id - [GET /metrics/{id}/history](https://observer-1784919896800871100.documentationai.com/api/metrics/get-metrics-by-id-history.md): Aggregated metric values over a window (max 30 days) - [POST /metrics/{id}/status](https://observer-1784919896800871100.documentationai.com/api/metrics/post-metrics-by-id-status.md): Set status on a manually-managed metric - [GET /slos](https://observer-1784919896800871100.documentationai.com/api/slos/get-slos.md): List SLOs - [GET /slos/{id}](https://observer-1784919896800871100.documentationai.com/api/slos/get-slos-by-id.md): Get SLO with latest burn event - [GET /incidents](https://observer-1784919896800871100.documentationai.com/api/incidents/get-incidents.md): List incidents - [GET /incidents/{id}](https://observer-1784919896800871100.documentationai.com/api/incidents/get-incidents-by-id.md): Get incident - [POST /incidents](https://observer-1784919896800871100.documentationai.com/api/incidents/post-incidents.md): Create incident (draft or published) - [PATCH /incidents/{id}](https://observer-1784919896800871100.documentationai.com/api/incidents/patch-incidents-by-id.md): Patch incident (title, severity, affected services, visibility) - [POST /incidents/{id}/publish](https://observer-1784919896800871100.documentationai.com/api/incidents/post-incidents-by-id-publish.md): Publish a draft incident - [POST /incidents/{id}/messages](https://observer-1784919896800871100.documentationai.com/api/incidents/post-incidents-by-id-messages.md): Append a timeline message; type=Resolved auto-resolves the parent - [POST /incidents/{id}/resolve](https://observer-1784919896800871100.documentationai.com/api/incidents/post-incidents-by-id-resolve.md): Resolve an incident with optional final message - [POST /incidents/from-metric/{metricId}](https://observer-1784919896800871100.documentationai.com/api/incidents/post-incidents-from-metric-by-metricId.md): Pre-fill a draft incident from the metric's current state (idempotent within 30 minutes) - [DELETE /incidents/{id}](https://observer-1784919896800871100.documentationai.com/api/incidents/delete-incidents-by-id.md): Soft-delete incident - [GET /maintenances](https://observer-1784919896800871100.documentationai.com/api/maintenances/get-maintenances.md): List maintenances - [GET /maintenances/{id}](https://observer-1784919896800871100.documentationai.com/api/maintenances/get-maintenances-by-id.md): Get maintenance - [POST /maintenances](https://observer-1784919896800871100.documentationai.com/api/maintenances/post-maintenances.md): Schedule a maintenance window - [PATCH /maintenances/{id}](https://observer-1784919896800871100.documentationai.com/api/maintenances/patch-maintenances-by-id.md): Edit maintenance (only allowed before actual_start_at is set) - [POST /maintenances/{id}/start](https://observer-1784919896800871100.documentationai.com/api/maintenances/post-maintenances-by-id-start.md): Manually transition a scheduled maintenance to in_progress - [POST /maintenances/{id}/complete](https://observer-1784919896800871100.documentationai.com/api/maintenances/post-maintenances-by-id-complete.md): Manually transition an in-progress maintenance to completed - [POST /maintenances/{id}/cancel](https://observer-1784919896800871100.documentationai.com/api/maintenances/post-maintenances-by-id-cancel.md): Cancel a maintenance before completion - [GET /config/export](https://observer-1784919896800871100.documentationai.com/api/config/get-config-export.md): Export the org's config as a canonical apply document - [POST /config/apply](https://observer-1784919896800871100.documentationai.com/api/config/post-config-apply.md): Apply a config-as-code document (idempotent upsert by config_key) - [POST /change-events](https://observer-1784919896800871100.documentationai.com/api/change-events/post-change-events.md): Ingest a deploy / commit / release event for status-transition correlation ## CLI - [Command-line tool](https://observer-1784919896800871100.documentationai.com/cli/overview.md): Install and use the observer CLI to apply config-as-code from version control.