All posts
Monitoring3 min readWatchFor Team

Monitoring Serverless (Lambda and friends)

Serverless means no servers to watch — and a few new things that can go wrong. Here's what to monitor when your code runs as functions: cold starts, duration, errors and throttles.

Monitoring Serverless (Lambda and friends)

"Serverless" is a lovely promise: write a function, deploy it, and the platform runs and scales it for you — no servers to patch or watch. But "no servers to monitor" doesn't mean "nothing to monitor." It means the things to monitor change.

Functions have their own failure modes — cold starts, timeouts, throttling — and the usual server metrics (CPU, disk) don't apply. Here's what to watch instead.

What's different about serverless

Traditional serverServerless function
Long-running processSpun up per request, then gone
Watch CPU/memory/diskWatch duration, invocations, errors
You manage capacityThe platform scales it
Predictable warm stateCold starts when scaling up

Because functions are ephemeral, you can't "log into the box." You monitor the invocations and what the platform reports.

The signals to watch

Cold starts

When a function hasn't run recently (or is scaling up), the platform must initialise a fresh instance — a cold start — adding latency to that invocation. Too many cold starts mean a sluggish, inconsistent experience. Watch how often they happen and how much they add to latency.

Duration (and timeouts)

Functions have a maximum duration; exceed it and the invocation is killed. Watch execution time — especially the p95/p99 — and how close it runs to the timeout limit. A function creeping toward its limit is an outage waiting to happen.

Errors and throttles

SignalMeaning
Error rateFunctions failing (bugs, bad input, dependency failures)
ThrottlesThe platform rejecting invocations past a concurrency limit
Invocation countDemand — and a proxy for cost

Throttling is the sneaky one: hit your concurrency limit and the platform starts rejecting requests, even though nothing is "broken." Watch for it.

Cost

Serverless bills per invocation and duration, so a runaway loop or a traffic spike shows up directly on the bill. Monitoring invocation volume doubles as cost control.

The blind spots to cover

Serverless monitoring has two gaps worth closing:

  1. The platform's own metrics lag and aggregate. They're useful but not always real-time per request. Pair them with tracing for request-level insight.
  2. "Is the endpoint actually working for users?" Platform metrics can look fine while an API Gateway misconfig, a permissions error, or a cold-start storm degrades the real experience. So keep external uptime/API checks on your function-backed endpoints — synthetic checks from multiple locations are the ground truth.

The bottom line

WatchWhy
Cold startsLatency spikes when scaling up.
DurationApproaching the timeout = failures coming.
Errors & throttlesBugs, and rejected invocations at the concurrency limit.
Cost / invocationsRunaway usage shows up on the bill.
External checksConfirm the endpoint works for real users.

Serverless removes the servers, not the need to watch. Track cold starts, duration, errors and throttles from the platform — then anchor it all with external checks on the endpoints your users actually hit.

Related: API monitoring, latency percentiles, observability vs monitoring.

Share this article