Reference & checklist
How to monitor a Linux web server
Build a practical monitoring baseline for availability, capacity, services, certificates, logs, backups, and user-facing transactions.
- Format
- Configure · Intermediate
- Published
- Published
- Updated
- Updated
- Reading time
- 3 min read
Key takeaways
- Monitor outcomes and saturation, not only whether the machine answers ping.
- Every alert needs an owner, threshold, runbook, and escalation path.
Before you begin
- Administrative access to the server
Monitoring only needs to answer two questions: “Can users complete the important task?” and “Is the system approaching a limit or failure?” Everything else is decoration. A wall of unread dashboards doesn’t make a server reliable — it just makes the outage better documented.
Start with user-visible checks
Check the public HTTPS endpoint from outside the server. Validate status, response time, certificate expiry, and a known piece of content. For critical systems, perform a synthetic transaction such as login, search, or checkout using a safe test account.
Monitor DNS resolution separately so a DNS failure is not misclassified as an application failure.
Track capacity and saturation
Establish baselines for:
- CPU utilization, load, and throttling,
- available memory and swap activity,
- disk space, inode use, and I/O latency,
- network errors, connections, and bandwidth,
- database connections, query latency, and storage,
- worker queues and background-job delay.
Useful local commands include:
uptime
free -h
df -h
df -i
ss -s
systemctl --failed
journalctl -p warning --since today
These are diagnostic tools, not a monitoring system. Export metrics and logs to a location that remains accessible if the server fails.
Monitor services and dependencies
Check the web server, application process, database, queue, and scheduled jobs. A running process is not proof that it serves correct responses. Include external dependencies such as payment, email, storage, and DNS when they affect the user journey.
Track scheduled-job completion and last-success timestamps. Silent failures often appear first as stale data or delayed email.
Watch certificates and updates
Alert well before TLS certificate expiry and verify automated renewal by observing the installed certificate, not only a scheduler exit code. Monitor security-update status, reboot requirements, and unsupported operating-system or runtime versions.
Verify backups as an outcome
Alert on missed backups, unusual size changes, retention gaps, and failed integrity checks. A successful backup job is insufficient: schedule restore exercises and record the actual recovery time.
Design actionable alerts
Each alert should include severity, affected service, current evidence, likely first checks, owner, and escalation path. Prefer trends over static thresholds: disk usage sitting calmly at 80% is a Tuesday, while disk usage racing from 40% to 80% in an hour is an incident in progress.
Route urgent alerts through a channel that is not dependent on the failed system. Review recurring alerts and either fix the cause or improve the rule.
Build a small runbook
For every critical alert, document how to confirm impact, check recent changes, inspect logs, reduce harm, roll back, and communicate status. Practice the runbook before an outage and keep provider-console and recovery credentials available to authorized responders.
Related guides
Getting started with a Linux VPS
Harden a new Ubuntu VPS with updates, a non-root administrator, SSH keys, a firewall, automatic security updates, monitoring, and backups.
Secure SSH and firewall access on an Ubuntu VPS
Use key-based SSH, configuration validation, least privilege, and UFW rules without locking yourself out of a remote Ubuntu server.
Shared hosting vs VPS: choose the right model
Compare shared hosting and a self-managed VPS by control, operational responsibility, performance isolation, cost, and workload fit.