
A VPS without monitoring is like driving a car with no dashboard — you have no idea when the fuel is running low, the engine is overheating, or a tire is about to blow. VPS monitoring lets you catch problems before they escalate into full downtime or data loss. This guide walks you through building a comprehensive monitoring stack using free, easy-to-install tools.
Why You Need to Monitor Your VPS
Most server failures don't happen out of nowhere. There are almost always warning signs in advance: CPU gradually climbing due to a runaway process, RAM being exhausted and the system falling back to Swap, a disk filling up until it can no longer write logs or accept uploads, or abnormal network traffic signaling an attack.
A good monitoring system will:
- Alert you before the server crashes, not after it already has
- Help you identify the root cause of problems quickly
- Collect historical data so you can spot usage trends over time
- Minimize downtime and its impact on your website visitors
What to Monitor on Your VPS
Before installing any tools, understand which metrics matter most:
- CPU Usage: Normal usage should stay below 70–80% sustained. If CPU hits 100% for several minutes, something is wrong.
- RAM Usage: When RAM fills up and Swap kicks in heavily, the system will noticeably slow down.
- Disk I/O: Unusually high read/write activity can point to a struggling database or log files growing out of control.
- Disk Space: A 100% full disk will immediately halt your website and database writes.
- Network Traffic: A spike in bandwidth usage could indicate a DDoS attack or a misconfigured application.
- Uptime / Response Time: Verify that your website is reachable and responsive from outside your server.
The two-layer monitoring rule: Always combine External Monitoring (from outside, e.g. UptimeRobot) with Internal Monitoring (from within, e.g. Netdata). Each detects different classes of problems and they complement each other perfectly.
Metrics to Watch: Healthy vs Danger Zones
Effective VPS monitoring starts with knowing what "normal" looks like for each metric and when you should start to worry. The table below summarizes practical thresholds for a typical VPS, so you can set alerts that fire at the right moment — not so early that you start ignoring them, and not so late that the damage is already done.
| Metric | Healthy Range | Watch / Danger Zone | Quick Check Command |
|---|---|---|---|
| CPU | < 70% | > 90% for over 5 minutes | top / htop |
| RAM | < 80% | Swap being used heavily | free -h |
| Disk Space | < 75% | > 85% (act before it fills) | df -h |
| Load Average | < number of cores | > cores × 1.5 | uptime |
| Network | Steady with traffic | Abnormal spikes (possible attack) | vnstat / iftop |
| Uptime | Continuously reachable | Response time > 2 seconds | UptimeRobot |
A simple rule of thumb: a value entering the "watch zone" does not mean the system is crashing — it means you should look at what is happening. Disk space deserves special attention: always act well before it hits 100%, because once the disk is truly full, your database and website stop writing data immediately, which is far harder to recover from than to prevent.
Popular Monitoring Tools: Which One Should You Pick?
Monitoring tools range from one-minute installs to fully customizable enterprise stacks. Your choice depends on whether you simply need to know "is the site down yet?" or want professional dashboards with long-term historical graphs. The table below compares the four most popular options.
| Tool | Type | Best For | Setup Difficulty |
|---|---|---|---|
| Netdata | Internal (on VPS) | Detailed real-time dashboard, one-command install | Very easy |
| UptimeRobot | External (cloud) | Checks uptime from outside, alerts when site is down | Easy (nothing to install on VPS) |
| Uptime Kuma | Self-hosted external | Open-source UptimeRobot alternative, unlimited monitors | Moderate (uses Docker) |
| Grafana + Prometheus | Internal (stack) | Long-term historical graphs, fully customizable, multi-server | Hard (multi-layer setup) |
For beginners running a single website, Netdata + UptimeRobot is enough and completely free. If you manage several VPS instances or need months of historical data for capacity planning, step up to Grafana + Prometheus. Uptime Kuma suits anyone who wants self-hosted external monitoring for privacy and to avoid free-plan limits.
UptimeRobot — Free External Monitoring
UptimeRobot is the most popular external monitoring service available. It checks whether your website is reachable from the internet every 5 minutes. The free plan supports up to 50 monitors with email alerts and Webhook integrations (which can push notifications to LINE, Slack, and more).
Setting Up UptimeRobot Step by Step
- Go to uptimerobot.com and create a free account with your email address.
- Click Add New Monitor from your Dashboard.
- Select Monitor Type: HTTP(s) for a website URL, or Ping to monitor your VPS IP address directly.
- Enter a Friendly Name (e.g. "My VPS Website") and your website URL.
- Set the Monitoring Interval to 5 minutes (the maximum on the free plan).
- Under Alert Contacts, add your email address or configure a Webhook URL for LINE Notify or Slack.
- Click Create Monitor.
Connecting UptimeRobot Alerts to LINE Notify
UptimeRobot supports Webhooks, which you can connect to LINE Notify via an integration service like Make.com (formerly Integromat). Once set up, you will receive an instant LINE message whenever your website goes down or comes back online — even when you are away from your computer.
Key advantage of external monitoring: UptimeRobot monitors from multiple server locations worldwide. If your VPS goes completely offline or has a network issue, it will still alert you — because the monitoring system itself does not run on your VPS.
Netdata — Real-time Dashboard on Your VPS
Netdata is an open-source monitoring tool that installs directly on your VPS and provides a beautiful, highly detailed real-time dashboard. It covers CPU, RAM, Disk I/O, Network, running processes, Docker containers, and much more — all with zero configuration required after installation.
Install Netdata with a Single Command
Netdata provides an automatic installation script compatible with Ubuntu, Debian, CentOS, and many other distributions. Just run these two commands:
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh bash /tmp/netdata-kickstart.sh --nightly-channel --dont-start-it
After installation completes, start the service and verify it is running:
systemctl start netdata systemctl enable netdata systemctl status netdata
Netdata runs on port 19999. Open your browser and navigate to http://YOUR_VPS_IP:19999 to see the live dashboard immediately.
Security Considerations for Netdata
By default, Netdata listens on port 19999 for all IP addresses. This is a security risk because the dashboard exposes detailed system information that should not be visible to the public internet. Secure it using one of these approaches:
Option 1: Restrict Access by IP using UFW
# Allow only your specific IP address ufw allow from YOUR_HOME_IP to any port 19999 # Block everyone else ufw deny 19999
Option 2: Bind Netdata to Localhost Only
# Edit /etc/netdata/netdata.conf
[web]
bind to = 127.0.0.1Then use an SSH tunnel to access the dashboard securely from your local machine:
# Run this on your local machine, NOT on the VPS ssh -L 19999:localhost:19999 user@YOUR_VPS_IP # Then open http://localhost:19999 in your browser
Glances — Quick Checks from the Command Line
Sometimes you just need a quick overview of your VPS through an SSH session, without opening a browser. Glances is the perfect tool for this. It displays CPU, Memory, Load, Network, Disk, and running processes all on a single screen, updating every second in real time.
Installing Glances
# Install via pip (recommended — gets the latest version) pip3 install glances # Or install via apt apt install glances -y
Using Glances
# Run the interactive terminal UI glances # Run in web server mode (access via browser on port 61208) glances -w # Compact mode (less data, ideal for narrow screens) glances --byte
Glances also supports exporting data to InfluxDB, Elasticsearch, or CSV files, making it easy to store and analyze usage metrics over time.
Email Alert When Disk Usage Exceeds 80%
For automated disk space alerts, you can write a simple shell script and schedule it with a Cron Job to run every hour. No third-party software required.
Create the Disk Alert Script
nano /usr/local/bin/disk-alert.sh
Paste the following content into the file:
#!/bin/bash THRESHOLD=80 EMAIL="[email protected]" HOSTNAME=$(hostname) df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output; do USAGE=$(echo $output | awk '{ print $1}' | cut -d'%' -f1) PARTITION=$(echo $output | awk '{ print $2 }') if [ $USAGE -ge $THRESHOLD ]; then echo "WARNING: ${HOSTNAME} Disk ${PARTITION} is ${USAGE}% full" | \ mail -s "Disk Alert: ${HOSTNAME} ${PARTITION} ${USAGE}% Used" "$EMAIL" fi done
Make it executable and test it:
chmod +x /usr/local/bin/disk-alert.sh bash /usr/local/bin/disk-alert.sh
Schedule the Script with Cron
crontab -e # Add this line to run every hour 0 * * * * /usr/local/bin/disk-alert.sh
Note: This script requires mailutils to be installed on your VPS. Install it with apt install mailutils -y. You will also need a working SMTP or Sendmail configuration to send outbound email.
Checklist: What to Do When CPU Spikes
When you receive a high CPU alert, follow these steps systematically to diagnose and resolve the issue:
- Identify the top CPU consumer: Run
toporhtopand press P to sort by CPU usage. Note which process is at the top. - Check that process's logs: For example, if it is Apache, check
/var/log/apache2/error.log; if MySQL, check/var/log/mysql/error.log. - Restart the offending service: If you confirm the process is misbehaving, restart it with
systemctl restart servicename. - Check Memory and Swap: Run
free -hto see how much Swap is being used. If Swap is completely full, a full system reboot may be necessary. - Check network connections: Run
netstat -an | grep ESTABLISHED | wc -lto count active connections. An unusually high number may indicate a DDoS attack. - Consider scaling up: If CPU spikes happen regularly and are caused by normal traffic growth, it is time to upgrade your VPS plan to get more CPU cores or RAM.
Recommendation: Use UptimeRobot + Netdata Together
The most effective VPS monitoring strategy combines both tools because they cover different angles of the same problem:
- UptimeRobot (External): Tells you whether your website is reachable from the internet and immediately alerts you when downtime occurs — even if the VPS is completely powered off.
- Netdata (Internal): Gives you granular insight into resource usage inside the VPS, helping you diagnose the root cause and prevent problems before they cause downtime.
A typical workflow: UptimeRobot alerts that your site is down → you open Netdata and see CPU is at 100% or disk is full → you fix the root cause within minutes, instead of blindly guessing what went wrong.
Full monitoring stack, zero cost: UptimeRobot (external, free) + Netdata (internal dashboard, free, open source) + Shell Script + Cron for disk alerts = a complete monitoring setup that costs nothing to run.
Setting Alerts When Thresholds Are Exceeded
A beautiful dashboard is useless if you are not staring at it 24/7. The heart of good monitoring is the alert that reaches out to you the moment a value crosses your configured threshold, so you can fix the issue before it escalates. Effective alerting follows a few key principles:
- Set thresholds sensibly: Too low (e.g. CPU 50%) and you will get alerted so often that you start ignoring them; too high (e.g. disk 99%) and it is already too late. Use the values from the Metrics table above as your starting point.
- Add a duration condition: Alert only when a value stays over the threshold continuously — for example, CPU > 90% for more than 5 minutes — to filter out brief spikes that are not real problems.
- Choose a channel you actually see: Email can get buried in your inbox. Routing alerts to LINE Notify or Slack, which you check throughout the day, gets you reacting faster.
Netdata ships with a built-in Health Alarm system: edit files under /etc/netdata/health.d/ to define your own conditions and notification channels. UptimeRobot lets you configure alerts directly from its dashboard, and for disk space specifically you can use the Shell Script + Cron approach from the earlier section. Here is a simple example that alerts when free RAM runs low:
#!/bin/bash
# Alert when free RAM drops below 10%
FREE=$(free | awk '/Mem/{printf("%.0f", $7/$2*100)}')
if [ "$FREE" -lt 10 ]; then
echo "WARNING: RAM available only ${FREE}% on $(hostname)" | \
mail -s "RAM Alert: $(hostname)" [email protected]
fiSchedule it to run every 10 minutes with */10 * * * * /usr/local/bin/ram-alert.sh, and you have a lightweight RAM alerting system with no extra software required.
Log Monitoring Basics
Beyond resource numbers, your system and application logs are the key source of truth about what is actually happening. Reading logs is a fundamental skill that helps you diagnose problems much faster. Here are the log files every Linux VPS owner should know:
/var/log/syslogor/var/log/messages— general system logs (kernel, services)/var/log/auth.log— logins and SSH (watch for brute-force attempts here)/var/log/nginx/error.logor/var/log/apache2/error.log— web server errors/var/log/mysql/error.log— database issues such as connection limits or crashes
The most-used commands are tail -f, which streams a log in real time as events happen, and grep for searching specific terms. For example:
# Stream a log in real time while debugging tail -f /var/log/nginx/error.log # Count failed login attempts grep "Failed password" /var/log/auth.log | wc -l # Show the last 50 lines of the system journal journalctl -n 50 --no-pager
If you want logs that are easier to search over the long term, you can graduate to journalctl (bundled with systemd) or deploy a stack like Loki + Grafana to centralize logs from many servers in one place. For a single VPS, however, tail and grep are plenty for everyday work.
Frequently Asked Questions About VPS Monitoring
How often should I monitor my VPS?
Internal monitoring like Netdata already collects data in real time every second, while external monitoring like UptimeRobot checks every 5 minutes on the free plan — which is plenty for a typical website. For services that demand very high reliability, you can drop to 1-minute checks on a paid plan. More important than frequency is configuring alerts that notify you the instant something goes wrong.
Does monitoring consume a lot of VPS resources?
Tools like Netdata and Glances are designed to be extremely lightweight, using only a small amount of CPU and RAM without meaningfully affecting website performance. If you are concerned about RAM on a small VPS, you can configure Netdata to retain less historical data in its config file.
What uptime does AsiaGB VPS offer, and can I install monitoring tools?
AsiaGB VPS offers 99% uptime and comes with full root access, so you are free to install Netdata, Glances, Uptime Kuma, or a stack like Grafana + Prometheus. VPS Linux plans start from 500 THB/month, with data centers in Thailand and Singapore.
What is the difference between external and internal monitoring — do I need both?
External monitoring (e.g. UptimeRobot) checks from outside whether your site is reachable and works even if the VPS is completely down. Internal monitoring (e.g. Netdata) reports detailed resource usage inside the machine. Using both together is recommended, because external tells you "there is a problem" and internal tells you "what the problem is."
AsiaGB VPS — Ready to Monitor Right Away
Full Root Access lets you install Netdata, Glances, and any monitoring tool you need. VPS Linux plans start from 500 THB/month. Data centers in Thailand and Singapore.
View VPS Plans