Menu

All posts
CompanyEngineering

How we run Navy on Navy

We monitor our own checks, alerts and status pages with Navy. Here is what that setup looks like and what it has taught us.

How we run Navy on Navy

A monitoring product has to be more reliable than the services it watches. The best way we know to get there is to use Navy for everything we run. Here is how we monitor Navy with Navy, and what it has taught us.

1. Every service has a monitor in code

Our check runners, alert delivery, API and status pages are all defined in Terraform with the Navy provider. A new service cannot go live without its monitors in the same pull request. We have not created a production monitor by hand in over a year.

2. A separate stack watches the main one

Monitoring yourself has an obvious flaw: if Navy is down, it cannot tell you. We run a small, independent Navy stack on different infrastructure whose only job is to watch the main one. Each stack checks the other.

3. Heartbeats on every background job

Billing, data retention, certificate checks and subscriber emails all run as scheduled jobs. Each one sends a heartbeat when it starts and finishes. A missed heartbeat pages the same rotation as an API outage.

4. Our status page is a Navy status page

Our public status page runs on the same product as yours, with the same subscriber emails and 90-day uptime bars. If something in the status page flow is confusing during an incident, we feel it first and fix it.

5. What it has taught us

Using our own alerts every day has shaped the product more than any roadmap. Escalation policies, on-call schedules and the automatic incident timeline all started as fixes for our own on-call.

System Monitor types Alert route
Check runners Heartbeat, TCP On-call
Alert delivery HTTP, keyword On-call
Status pages HTTP, SSL certificate On-call and Slack

Running Navy on Navy keeps us honest. Every alert we send is one we would want to receive, and every rough edge in the product is one we hit ourselves first.

Keep reading

More from on call

View all posts
Response time percentiles, explained
EngineeringMay 30, 2025

Response time percentiles, explained

Averages hide the requests your users actually notice. Here is how to read p50, p95 and p99 response times.

Monitors as code with Terraform
EngineeringMay 29, 2025

Monitors as code with Terraform

Define your monitors, alerts and status pages next to the infrastructure they watch, with the Navy Terraform provider.

Scheduled maintenance without the support tickets
ProductJun 1, 2025

Scheduled maintenance without the support tickets

Planned downtime should not surprise anyone. Here is how to announce maintenance so customers know before it starts.

Get the next post in your inbox

One email a month with new posts, product updates and the odd postmortem worth reading. Unsubscribe in one click.