- Monitoring watches for known problems, using predefined metrics and alerts.
- Observability is how well you can understand a system’s internal state from its outputs.
- Logs, metrics and traces are common signals, but collecting them does not guarantee insight.
- They work together: monitoring raises the alarm, and observability helps you find the cause.
The dashboard is green, and yet customers are complaining that checkout is broken. If you have been in this position, you already understand the difference between monitoring vs observability. Your monitoring only checked what you thought to check, and this failure is something new.
This guide explains both ideas without the marketing language, and follows one fictional incident from alert to root cause. The logs, trace and numbers are invented to illustrate the process. You should also know that vendors and practitioners draw this line differently, and some consider it partly a marketing distinction. We focus on the practical part.
The short answer
Monitoring is an activity. You decide in advance what to watch, such as CPU, error rate or disk space, and you set thresholds that trigger alerts. It answers: “Is the thing I was worried about happening?”
Observability is a property of your system. The term comes from control theory, where it describes how well you can infer a system’s internal state from its external outputs. In practice, it answers: “What is happening and why, including for problems I never anticipated?”
Think of a car. The warning lights on the dashboard are monitoring. They cover a set of known problems. A mechanic’s full diagnostic port, which lets someone ask new questions about any part of the engine, is closer to observability.
Monitoring vs observability side by side
| Aspect | Monitoring | Observability |
|---|---|---|
| Main question | Is something wrong? | Why is it wrong? |
| Best for | Known failure modes | Unknown and novel failures |
| Approach | Predefined checks and dashboards | Open exploration of rich data |
| Typical output | Alerts and status graphs | Answers to new questions |
| Data detail | Often aggregated | Detailed, per request where possible |
| Setup | Configure checks from outside | Requires instrumenting your code |
| Used by | Operations, on-call staff | Developers and on-call staff |
This is not a choice between the two. You still need alerts to tell you when to look.
Why monitoring alone is not enough
With one application on one server, the list of things that can go wrong is fairly short, so you can watch them all. A modern system may have dozens of services, queues and third-party APIs, plus containers that come and go. Failures become combinations that nobody predicted: one region, one customer type, a specific app version and a single slow dependency.
You cannot write a dashboard in advance for a question you have not thought of. You need data that lets you ask it afterwards.
Logs, metrics and traces
These three types of telemetry are often called the pillars of observability. Each one answers a different question:
| Signal | What it is | Answers | Weakness |
|---|---|---|---|
| Metrics | Numbers over time | How much? Is it getting worse? | Little detail on single events |
| Logs | Records of individual events | What exactly happened? | Can be costly and noisy |
| Traces | A request’s path through services | Where did the time go? | Require instrumentation and are often sampled |
Metrics
http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4
Metrics are cheap to store and fast to query, which makes them ideal for dashboards and alerts. Be wary of high-cardinality labels, such as a user ID, in many metric systems, because they can sharply increase cost.
Traces
A trace follows one request across services. Each step is a span with a start time and a duration:
POST /checkout 2410 ms
├─ auth-service: verify token 18 ms
├─ cart-service: load cart 42 ms
├─ pricing-service: calculate 2290 ms <-- slow
│ └─ SELECT coupons ... 2265 ms
└─ payment-service: not reached
A trace makes a slow step obvious, which is very hard to see in separate logs from separate services.
Logs
Logs provide the detail of what happened at one moment. We look at how to make them useful in a moment.
An incident walkthrough
Here is how the pieces fit together, in a fictional example.
| Step | Signal | What we learn |
|---|---|---|
| 1. Alert fires | Metric | Checkout p95 latency passed its 1-second target |
| 2. Break it down | Metric | Only the mobile app is affected, not web |
| 3. Inspect a request | Trace | The time is in pricing-service, on a coupon query |
| 4. Read the details | Logs | Slow requests all use a coupon from today’s campaign |
| 5. Confirm the cause | Query plan | Coupon lookup has no suitable index |
| 6. Fix it | Deployment | Add the index, and watch latency recover |
Monitoring handled step 1. Everything after that was observability. Note how each question came from the previous answer. Nobody could have built a dashboard ahead of time for “mobile app coupon query from today’s campaign”. For the fix itself, our guide to SQL query optimization shows how to read that kind of plan.
Better logs
Plain text logs are made for human eyes, and hard to query. Structured logs use fields that a machine can filter on:
# Hard to search
ERROR Payment failed for user 42 after 3 tries
# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
"attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}
With the second form, you can immediately ask “how many failures per provider in the past hour?” The trace_id field is especially valuable, since it links a log line to the whole request, across every service it touched.
Never log passwords, tokens or card numbers, and take care with personal data. As our guide explains, JWTs can be reused by anyone who reads them from a log.
Tip: Add context that you would want during an incident, such as version, region, customer tier and feature flag state. Being able to say “only version 2.14 in one region” often solves the problem on its own.
The golden signals
Not sure what to monitor? Google’s Site Reliability Engineering book suggests four signals for user-facing systems:
| Signal | Question | Example |
|---|---|---|
| Latency | How long do requests take? | p95 and p99 response time |
| Traffic | How much demand is there? | Requests per second |
| Errors | How many requests fail? | Rate of 5xx responses |
| Saturation | How full is the system? | CPU, memory, connection pool use |
Use percentiles for latency, since averages hide slow requests, as we showed in load testing vs stress testing.
Alerts people trust
If alerts fire all the time, people stop reading them. Good ones follow a few rules:
- Alert on symptoms users feel. “Checkout errors above 2%” beats “CPU at 85%”. High CPU that harms nobody should not wake anybody up.
- Make every alert actionable. If nobody needs to do anything, make it a dashboard item or remove it.
- Link to a runbook. Tell the responder where to look and what to try.
- Review them regularly. Delete or fix any alert that was ignored last month.
Service level objectives
An SLO turns “the site should be fast and reliable” into a measurable target, like “99.9% of checkout requests succeed over 30 days”. That allows for about 0.1% of failures, known as an error budget. If you have plenty left, you can ship faster, and if it is almost used up, you can prioritize reliability. It is a helpful way to settle arguments between delivery speed and stability.
OpenTelemetry and tools
OpenTelemetry is an open-source, vendor-neutral standard for generating and exporting telemetry. It is a project of the Cloud Native Computing Foundation. Instrumenting with it means you can change your backend later without rewriting your code. It is not a storage or dashboard product itself, so you pair it with one:
| Purpose | Open-source examples | Commercial examples |
|---|---|---|
| Metrics | Prometheus | Datadog, New Relic |
| Dashboards | Grafana | Datadog, Dynatrace |
| Logs | Loki, OpenSearch | Splunk, Elastic |
| Traces | Jaeger, Tempo | Honeycomb, Datadog |
Check current features and pricing yourself, as these products change often. Costs can grow quickly with data volume, so use sampling and set retention limits.
How to get started
- Begin with the golden signals for your most important service.
- Add one or two alerts on symptoms that users notice.
- Switch to structured logs, with a request ID in each line.
- Add tracing to your main user journey with OpenTelemetry, as auto-instrumentation can cover many common frameworks.
- Link deployments to your graphs, so that you can see whether a release from your CI/CD pipeline caused a change.
- Learn from each incident. After each one, ask what data would have made it quicker to solve, and add that.
A small team with one service does not need a huge platform. Basic metrics, good logs and a few alerts may be plenty. Tracing earns its keep as the number of services grows.
Common mistakes
- Buying a tool and calling it observability. The value comes from good instrumentation and how you use the data.
- Treating three pillars as a checklist. Separate data with no way to link it leaves you hunting through tabs. Shared IDs matter.
- Collecting everything. Unfiltered telemetry gets expensive, and it adds noise.
- Too many dashboards. A few trusted views beat a hundred that nobody opens.
- Thinking it replaces testing. You still need tests before release. Canary releases pair well with these signals, though.
Final thoughts
Monitoring tells you that something has gone wrong, and observability gives you the means to find out why. The practical test is simple: when an unfamiliar problem appears, can you find the cause without shipping new code? Next time you are in an incident, write down every question you could not answer. That list is your roadmap.
Frequently asked questions
What is the difference between monitoring and observability?
Monitoring tracks predefined metrics and alerts on known problems. Observability is the ability to understand a system’s state from its outputs, including for unexpected problems.
What are the three pillars of observability?
They are logs, metrics and traces. Logs record events, metrics measure values over time, and traces follow a single request across services.
Do I need observability if I have monitoring?
For a small, simple system, good monitoring and logs may be enough. As systems become distributed and failures less predictable, observability becomes more valuable.
What is OpenTelemetry?
It is an open-source standard and set of tools for producing and exporting logs, metrics and traces, so you are not tied to a single vendor’s agent.
What are the four golden signals?
They are latency, traffic, errors and saturation. Google’s SRE guidance recommends these as a starting point for monitoring user-facing systems.
Keep learning
Need help with testing, WordPress or SEO?
We help teams ship better software and grow their sites. Tell us what you are working on and we will suggest a clear next step.