Introduction

What is Lookout and how does it work?

Lookout is a small, self-hosted monitoring agent for Linux servers. It runs as a systemd service on the machine you care about, watches the basics, and sends an alert when something crosses a threshold or stops reporting — no SaaS, no cloud dependency, no per-seat pricing.

One static binary, one YAML file, one systemd service. It's built for the kind of server where you want useful alerts without running a full Prometheus stack.

What it watches

Lookout collects metrics from the local machine and evaluates alerts in-process.

AreaWhat Lookout checks
MemoryUsed memory %, from /proc/meminfo and MemAvailable
SwapUsed swap %
DiskUsed % for each configured mount
Disk growthWhether a disk is on pace to fill within a window
Load1-minute load average ÷ CPU cores
CPUCPU usage %, from /proc/stat
systemdWhether named services are active
HTTPWhether configured URLs return the expected status code
TCPWhether configured TCP addresses accept a connection
ProcessesWhether named processes are running
DockerContainer exits, OOM kills, restart loops, failed healthchecks (optional)
HeartbeatAn outbound dead-man's-switch ping (optional)

Memory, disk, CPU, swap, and load run out of the box; the service, HTTP, TCP, and process checks start working once you list what to watch.

How it works

Collectors read from the kernel (/proc/meminfo, /proc/stat, /proc/loadavg, /proc/mounts), the Docker daemon, systemd, and the network, and normalise everything into typed metric samples.

The evaluator checks each sample against your configured thresholds. It is stateful: it waits for a value to stay over the line before alerting, won't re-notify until a quiet period passes, and sends a recovery message when the value drops back down.

Notifiers dispatch alerts to every channel you enable — Google Chat, Discord, Slack, Microsoft Teams, Telegram, PagerDuty, a generic webhook, or email. With nothing configured, alerts print to stdout and land in the systemd journal.

How Lookout works — Collectors feed samples to the Evaluator which sends alerts to the notifiers

Alert state is stored at /var/lib/lookout/state.json, so Lookout remembers what's firing across restarts and sends clean recoveries instead of starting from scratch every time.

If you already run Prometheus or Grafana, Lookout can optionally expose its readings at GET /metrics — see Prometheus metrics.

Beyond local metrics

If the whole machine goes offline, the agent can't alert you. Lookout's heartbeat sends a regular ping to a dead-man's switch — and Lookout's hosted heartbeat monitoring can be that switch, so you don't have to bring a third-party service.