← All posts

Monitoring and alerts for a small product: what to watch and how to avoid noise

A lean monitoring setup for products run by a small team: external uptime checks, health endpoints, error tracking, server metrics, logs and alert rules that wake you only when it matters.

Author
Elie Chaaban
Published
Reading time
5 min
Topics
DevOps, Monitoring, Reliability, Servers

Small products usually find out about outages from customers. A client calls to say the app is not loading, someone checks, and it turns out the disk filled up three hours ago. Monitoring exists so that you are the first to know, ideally before anyone notices.

The opposite failure is just as common: a monitoring system so noisy that everyone mutes the alerts, and then a real problem gets missed. For a product run by one person or a small team, the goal is a lean setup with few alerts, each of which means "act now".

This is the setup I use for products like NeonTask and Pro Clean+, which run as Dockerized services on Linux servers.

Layer 1: External uptime checks

Start from the outside, because that is what users see. An external service requests your public URLs every minute or so from several locations and alerts when they fail.

Check:

Alert after a couple of consecutive failures, not one, to avoid alerts from a single network blip. Many hosted uptime services do this well, and some have generous free tiers. The important thing is that the checker runs somewhere other than your server, because a monitor on a dead server cannot tell you it is dead.

Layer 2: Health endpoints that mean something

A health endpoint that returns "OK" whenever the web process is running tells you little. A useful one checks the application's real dependencies:

Keep two endpoints: a light "liveness" check for container restarts, and a deeper "readiness" or status check for monitoring. Do not make the deep check too expensive, since it runs constantly, and do not expose sensitive details in its response.

Docker health checks on containers, combined with restart policies, handle many transient failures automatically. Monitoring then tells you when restarts happen repeatedly.

Layer 3: Error tracking

Uptime checks catch the site being down. They do not catch a button that throws an error for some users. Error tracking does: the backend, web app and mobile app report exceptions with stack traces, the request or screen involved, the release version and the device or browser.

Good practice:

Layer 4: Server and container metrics

Track the basics for each server:

A common lightweight stack is Prometheus with node exporter and cAdvisor, visualized in Grafana. Hosted options exist too. For a single server, even a simple agent that reports to a hosted dashboard is a big improvement over nothing.

Metrics are mainly for investigation and trends. Only a few should alert.

When something goes wrong, you need to answer "what happened at 10:42?" quickly. That means:

Do not log passwords, tokens, card data or full personal records. Logs are often less protected than databases.

Layer 6: Business signals

Some of the most valuable checks are not technical. For a booking app: "no new bookings in the last N hours during working hours" is often the first sign something is broken in a way no technical check catches, such as an expired API key for SMS, a broken payment callback or a bad app release. Pick one or two key business events and alert when they stop.

Scheduled jobs deserve the same treatment. Use a "dead man's switch" style check: the job pings a URL when it finishes, and you get an alert if the ping does not arrive. This is the right way to watch backups. See Postgres backups that actually restore.

Alert rules that do not burn you out

Every alert should be:

A small, sensible starting set:

  1. Public site or API down for more than a couple of minutes.
  2. Disk usage above a high threshold.
  3. A container restarting repeatedly.
  4. A spike in errors, or a new error type after a release.
  5. Backup or critical scheduled job missed.
  6. TLS certificate expiring soon, if renewal is not fully automatic.
  7. Business heartbeat stopped during working hours.

Everything else belongs on a dashboard you look at weekly.

Route alerts to a channel you will actually notice: a phone push or messaging app for urgent ones, email for daily summaries.

After every incident

Even on a tiny team, write a few lines after any real incident: what happened, how you found out, how long it took to fix and what would have caught it earlier. Then add the missing check or remove the noisy one. Monitoring improves through incidents, not through planning.

Common mistakes

How it fits with the rest

Monitoring is one part of running a product properly, alongside a hardened server, repeatable deployments and real backups. If you are setting up a server, start with the hardening checklist, and see Docker Compose in production for the deployment side.

If you want help setting up monitoring that tells you about problems before your customers do, see my work and get in touch.

More from the blog

Let's work
together