Kokil Thapa - Professional Web Developer in Nepal
Freelancer Web Developer in Nepal with 15+ Years of Experience

Kokil Thapa is an experienced full-stack web developer focused on building fast, secure, and scalable web applications. He helps businesses and individuals create SEO-friendly, user-focused digital platforms designed for long-term growth.

Linux Server Monitoring with Netdata and Alerts

By Kokil Thapa | Last reviewed: September 2026

Linux server monitoring with Netdata and alerts closes the gap between “the site feels slow” and knowing exactly which resource failed. You get per-second CPU, memory, disk, network, and application metrics without standing up Prometheus, Grafana, and half a dozen exporters first. On production Laravel and WordPress hosts I maintain, Netdata has caught runaway PHP-FPM workers, full disks, and MySQL connection spikes before clients noticed. This guide walks through install, hardening, alert tuning, and notification routing on a real Ubuntu web server.

For a lighter zero-config overview, see our companion piece on Netdata zero-config server monitoring. If you prefer a full metrics stack instead, read the Prometheus and Grafana monitoring stack guide.

What is Netdata and why use it for Linux server monitoring?

Netdata is an open-source monitoring agent that collects thousands of metrics every second. It ships with pre-built charts for CPU, RAM, swap, disks, network interfaces, systemd services, and common apps like MySQL, Redis, and Nginx.

Unlike a polling dashboard you check manually, Netdata evaluates health rules continuously. When disk usage crosses a threshold or load average spikes, it fires an alert. You configure where those alerts go.

On small teams—common on Nepal client projects—a single agent plus sensible notifications beats a complex observability stack you never finish configuring. I run Netdata alongside application health checks and nightly backups on shared EC2 hosts that serve multiple legal-tech portals.

Netdata Monitoring ArchitectureLinux HostUbuntu 22/24Netdata AgentPort 19999Health Enginehealth.d rulesAlertsSlack, emailPHP-FPMWorkers, queueMySQLQueries, connNginx/ApacheRequests, SSLRedisMemory, keysNetdata Cloud (optional central dashboard)Multi-node view, alert history, team access
Linux server monitoring with Netdata: agent collects host and app metrics, health engine evaluates rules, alerts reach your team.

Netdata fits servers running PHP 8.3 or 8.5, MySQL 9.7 or 8.4 LTS, Redis 8.10, and Laravel 12 or 13 applications—the stack I deploy most often. It does not replace log analysis or synthetic uptime checks. Pair it with Laravel health checks and uptime monitoring for end-to-end coverage.

How do you install Netdata on a Linux server?

The official kickstart script is the fastest path on Ubuntu 22.04 or 24.04. Run it as root on a freshly hardened host—follow our initial Ubuntu server setup guide first if the box is new.

Step 1: Run the kickstart installer

curl -fsSL https://get.netdata.cloud/kickstart.sh | sudo bash

The script detects your distro, installs dependencies, enables the systemd unit, and opens the local dashboard on port 19999. Verify the service:

sudo systemctl status netdata
curl -s http://127.0.0.1:19999/api/v1/info | head

Official install steps are documented at Netdata agent installation.

During install, the script may prompt you to claim the node. Claiming connects the agent to Netdata Cloud for a central dashboard, alert history, and easier notification setup. You can also claim later:

sudo netdata-claim.sh -token=YOUR_CLAIM_TOKEN -rooms=ROOM_ID -url=https://app.netdata.cloud

Cloud is optional. Local-only monitoring works fine if you restrict dashboard access and route alerts yourself.

Step 3: Enable application collectors

Netdata auto-detects many services. For MySQL, create a read-only monitoring user:

CREATE USER 'netdata'@'localhost' IDENTIFIED BY 'strong_password';
GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'netdata'@'localhost';
GRANT SELECT ON performance_schema.* TO 'netdata'@'localhost';
FLUSH PRIVILEGES;

Point Netdata at the credentials in /etc/netdata/go.d/mysql.conf. PHP-FPM and Nginx collectors activate when those services run on standard paths.

Netdata Install Workflow1. Kickstartcurl pipe bash2. Verifysystemctl status3. Claim NodeNetdata Cloud4. CollectorsMySQL, PHP-FPMPost-Install ChecklistRestrict port 19999 via UFW or reverse proxySet memory mode = dbengine in netdata.confConfigure notification channels before tuning alertsTest with stress-ng or fill a temp file
Four-step Netdata installation: kickstart, verify the agent, claim to Cloud, then enable MySQL and PHP-FPM collectors.
  1. Install Netdata with the kickstart script on Ubuntu.
  2. Confirm the systemd unit is active and the API responds locally.
  3. Claim the node to Netdata Cloud or plan a local-only setup.
  4. Enable MySQL, PHP-FPM, Nginx, and Redis collectors for your stack.
  5. Lock down port 19999 before exposing the server to the internet.

How do you configure Netdata for production web servers?

Default settings work for a lab box. Production Laravel hosts need tighter retention, secured access, and tuned thresholds. I apply these changes on every server I hand over to a client through our Linux system administration service.

Harden dashboard access

Never leave port 19999 open to the world. Bind locally and tunnel via SSH, or put Nginx in front with basic auth and TLS:

# /etc/netdata/netdata.conf
[web]
    bind to = 127.0.0.1

Allow your IP only if you must expose the port. Match your UFW firewall rules for web servers so monitoring does not become an attack surface.

Tune memory and retention

Netdata stores recent history on disk with the dbengine backend. On a 2 GB VPS, cap retention to avoid disk pressure:

# /etc/netdata/netdata.conf
[db]
    mode = dbengine
    retention = 2d
    dbengine disk space MB = 256

Restart after changes: sudo systemctl restart netdata.

Monitor what actually breaks PHP apps

Watch these charts first on a typical stack:

  • system.cpu and system.load — saturation under traffic spikes.
  • disk.space — full partitions kill MySQL and logs silently.
  • mem.available — OOM kills take down PHP-FPM without a clean error page.
  • phpfpm.active_processes — pool exhaustion looks like a timeout to users.
  • mysql.queries and mysql.connections — slow queries show up here first.
  • web_log.requests — 5xx spikes often precede a support ticket.

On sister sites sharing a Deployer 7 pipeline—such as those behind Notary Kathmandu—identical Netdata configs make comparing nodes across releases straightforward.

For broader host metrics context, cross-read the Ubuntu server monitoring guide and our Ubuntu server setup guide.

How do you set up Netdata alerts that actually wake you up?

Collecting metrics is step one. Alerts are why you installed Netdata. The health engine reads rule files in /etc/netdata/health.d/ and fires notifications through channels you define.

Understand alert severity levels

Netdata uses WARNING and CRITICAL tiers. WARNING means investigate soon. CRITICAL means act now—disk full, service down, sustained load. Tune defaults so WARNING does not page you at 2 a.m. for a one-minute blip.

Create a custom disk alert

Default disk alerts exist, but explicit rules help on multi-partition servers:

# /etc/netdata/health.d/disks.conf
alarm: disk_space_usage
   on: disk.space
class: Utilization
 type: System
component: Disk
   os: linux
hosts: *
 calc: $used * 100 / ($avail + $used)
units: %
 every: 1m
 warn: $this > 80
 crit: $this > 92
 info: Disk space usage on $family

Reload health config without a full restart:

sudo netdatacli reload-health

Alert syntax reference lives in the official Netdata alerts and notifications documentation.

Route notifications to Slack or email

In Netdata Cloud, open Space settings → Notifications → Add notification. Connect Slack, email, PagerDuty, or Discord. For self-hosted email, edit /etc/netdata/health_alarm_notify.conf:

SEND_EMAIL="YES"
DEFAULT_RECIPIENT_EMAIL="ops@example.com"

# Slack example (webhook URL from your workspace)
SEND_SLACK="YES"
DEFAULT_RECIPIENT_SLACK="#server-alerts"

Test delivery:

sudo /usr/libexec/netdata/plugins.d/alarm-notify.sh test

Paste JSON alert payloads into our JSON formatter tool when debugging webhook integrations from Netdata Cloud.

Netdata Alert PipelineMetric Breachdisk > 92%Health Rulehealth.d/*.confAlarm StateCRITICALNotifyEmailSMTP or CloudSlackWebhook channelPagerDutyOn-call rotationAlert fatigue fix: delay WARNING 3m, CRITICAL 1mUse hysteresis so flapping metrics do not spam Slack
Netdata alert flow: a metric crosses a health.d threshold, state becomes CRITICAL, and notification channels deliver the alert.

Alerts worth enabling on day one

Start with these before writing custom rules:

  • Disk space above 80% WARNING, 92% CRITICAL.
  • Load average above CPU count for 5+ minutes.
  • MySQL or PHP-FPM service not running.
  • RAM available below 10% for 2+ minutes.
  • Certificate expiry within 14 days if you monitor web_log SSL charts.

Pair alerts with automated server backup setup so a disk alert triggers both cleanup and restore planning—not panic.

How does Netdata compare to Prometheus and Grafana for server monitoring?

Both stacks solve observability. They target different team sizes and maturity levels. Netdata prioritises speed and defaults. Prometheus plus Grafana prioritises flexibility and long-term storage.

CriteriaNetdataPrometheus + Grafana
Setup timeMinutes with kickstart scriptHours to days (exporters, scrape config, dashboards)
Metric granularityPer-second, built-inScrape interval dependent (often 15–60s)
Built-in alertsYes, health.d rules includedAlertmanager required, separate config
Long-term retentionDays on agent; Cloud for historyMonths with TSDB tuning and storage planning
Resource overheadLow on small VPS (256 MB dbengine cap)Higher; Prometheus memory scales with series count
Best fit1–20 servers, small teams, fast visibility20+ nodes, SRE teams, custom SLI/SLO dashboards

For a single Laravel app on a Rs 1,500/month VPS (~USD 11), Netdata is the practical default. When a client outgrows one box, migrate metrics to Prometheus—our complete Prometheus and Grafana setup guide covers that path.

On Adventure Third Pole Trek, a Laravel + Livewire booking app, Netdata caught a queue worker memory leak during a seasonal traffic spike. Prometheus would have worked too, but the client needed alerts that week—not a quarter-long observability project.

Netdata vs Prometheus DecisionHow many servers?1–20 nodesUse Netdata20+ nodesPrometheus stackNetdata wins when:Need alerts this weekSmall ops team, budget VPSPrometheus wins when:Custom SLO dashboardsMulti-year metric retention
Choose Netdata for fast Linux server monitoring with alerts on small fleets; choose Prometheus when scale and custom SLOs demand it.

What are common Netdata monitoring mistakes on production Linux servers?

Installing Netdata takes ten minutes. Running it well takes discipline. These mistakes show up repeatedly on client servers I audit.

Exposing the dashboard without authentication

Port 19999 reveals process lists, connection counts, and internal paths. Bind to localhost or restrict by IP. Treat it like database access—not a public status page.

Alert fatigue from default thresholds

Out-of-the-box rules assume generic hardware. A 1 GB RAM VPS will WARN on memory constantly. Adjust health.d/ram.conf or silence noisy alarms until thresholds match your workload.

Monitoring without a response plan

An alert nobody acts on is noise. Document runbooks: disk full → rotate logs, expand volume, verify backups. Link monitoring to support and maintenance workflows so alerts create tickets, not Slack scrollback.

Ignoring correlated signals

High load plus flat CPU often means disk I/O wait—not a CPU problem. Check disk.io and system.io charts together. On Laravel apps, correlate PHP-FPM queue depth with MySQL slow queries.

Skipping security hardening on the host itself

Monitoring does not replace patching, fail2ban, or CIS-aligned baselines. Apply Ubuntu server hardening and review CIS benchmarks for server hardening before you declare the server production-ready.

Hosting choice matters too. Under-provisioned shared hosting hides metrics you need. Our domain registration and hosting guidance covers when a VPS with Netdata beats cheap shared plans for business-critical apps.

For security posture beyond metrics, read Ubuntu server security best practices and how to secure your website and server in Nepal.

Key Takeaways

  • Install Netdata with the official kickstart script, then claim the node to Netdata Cloud for central alerts and history.
  • Bind port 19999 to localhost or protect it with UFW and a reverse proxy—never expose the raw dashboard.
  • Enable MySQL, PHP-FPM, Nginx, and Redis collectors so application metrics appear alongside host charts.
  • Tune /etc/netdata/health.d/ rules and test Slack or email notifications before you need them at 3 a.m.
  • Use Netdata for small fleets needing fast Linux server monitoring with Netdata and alerts; graduate to Prometheus when scale demands custom SLOs.
  • Pair metrics with backups, health checks, and hardened baselines so alerts lead to action—not anxiety.

People Also Ask

Does Netdata work on Ubuntu 22.04 and 24.04?

Yes. The kickstart script supports both LTS releases and installs a systemd service that starts on boot. It also runs on Debian, CentOS Stream, and other major distros. Check the official installation docs for your exact OS version before deploying.

How much RAM does Netdata use on a small VPS?

With dbengine mode and a 256 MB disk cap, expect roughly 100–200 MB RAM on a typical web server. Lower retention further on 1 GB instances. The agent is lighter than running a full Prometheus stack on the same box.

Can Netdata send alerts to Telegram or Discord?

Yes. Netdata Cloud supports Discord, Telegram, Slack, email, PagerDuty, and webhooks. Self-hosted setups configure channels in health_alarm_notify.conf and reload the health engine after changes.

Is Netdata enough monitoring for a Laravel production app?

Netdata covers infrastructure and service-level metrics well. Add application health endpoints, queue monitoring, and synthetic uptime checks for full coverage. Netdata tells you the server is struggling; Laravel health routes tell you which feature broke.

Ship monitoring before the next outage

Linux server monitoring with Netdata and alerts takes an afternoon to install, harden, and tune—not a sprint to build observability from scratch. Start with disk, memory, load, and PHP-FPM pool alerts. Route them to a channel your team actually reads. Expand collectors and custom rules as traffic grows.

If you want Netdata deployed on production Laravel, WordPress, or legal-tech hosts with alerts, backups, and hardening handled together, contact us or review how we deliver ongoing ops through Linux system administration. You can also browse about my production DevOps work across Nepal and international client servers.

Frequently Asked Questions

Netdata is an open-source agent that collects thousands of per-second metrics and evaluates health rules continuously. It fits small teams that need CPU, RAM, disk, network, and app charts without standing up Prometheus, Grafana, and multiple exporters first.

On Ubuntu 22.04 or 24.04, run the official kickstart script as root: curl -fsSL https://get.netdata.cloud/kickstart.sh | sudo bash. It installs dependencies, enables the systemd unit, and opens the local dashboard on port 19999. Verify with sudo systemctl status netdata and curl -s http://127.0.0.1:19999/api/v1/info | head. Claim the node to Netdata Cloud during or after install with sudo netdata-claim.sh, then enable MySQL, PHP-FPM, Nginx, and Redis collectors for your stack.

With dbengine mode and a 256 MB disk cap, expect roughly 100–200 MB RAM on a typical web server. Lower retention further on 1 GB instances.

Never leave port 19999 open to the world—it exposes process lists, connection counts, and internal paths. Bind locally in /etc/netdata/netdata.conf with bind to = 127.0.0.1 and tunnel via SSH, or put Nginx in front with basic auth and TLS. Restrict by IP only if you must expose the port, and align UFW firewall rules so monitoring does not become an attack surface. Treat dashboard access like database access, not a public status page.

The health engine reads rule files in /etc/netdata/health.d/ and fires notifications through channels you define. Netdata uses WARNING and CRITICAL tiers—tune defaults so WARNING does not page you for one-minute blips. Start with disk space above 80% WARNING and 92% CRITICAL, load average above CPU count for five minutes, MySQL or PHP-FPM not running, and RAM available below 10% for two minutes. Route alerts through Netdata Cloud to Slack, email, or PagerDuty, or edit /etc/netdata/health_alarm_notify.conf for self-hosted delivery. Test with sudo /usr/libexec/netdata/plugins.d/alarm-notify.sh test before you need alerts at 3 a.m.

Health rules live in /etc/netdata/health.d/ as .conf files—for example, a custom disk_space_usage alarm in disks.conf with warn above 80% and crit above 92%. Notification routing sits in /etc/netdata/health_alarm_notify.conf for email, Slack, and other channels. After editing rules, reload without a full restart: sudo netdatacli reload-health. Default rules in health.d/ assume generic hardware, so adjust ram.conf and other files on small VPS instances to avoid alert fatigue from thresholds that do not match your workload.

Yes. Netdata Cloud supports Slack, email, PagerDuty, Discord, Telegram, and webhooks via Space settings → Notifications. Self-hosted setups set SEND_EMAIL, SEND_SLACK, and recipient values in /etc/netdata/health_alarm_notify.conf, then reload the health engine.

Netdata prioritises speed and defaults; Prometheus plus Grafana prioritises flexibility and long-term storage. Netdata installs in minutes via kickstart, collects per-second built-in metrics, and includes health.d alerts. Prometheus needs exporters, scrape config, dashboards, and Alertmanager—often hours to days. Netdata retains days on the agent with optional Cloud history; Prometheus scales to months with TSDB tuning but uses more memory. For a single Laravel app on a Rs 1,500/month VPS (~USD 11), Netdata is the practical default. Graduate to Prometheus when you outgrow one box and need custom SLI/SLO dashboards across twenty or more nodes.

Watch system.cpu and system.load for saturation under traffic spikes, disk.space because full partitions kill MySQL and logs silently, and mem.available since OOM kills take down PHP-FPM without a clean error page. Application charts that matter include phpfpm.active_processes for pool exhaustion, mysql.queries and mysql.connections for slow-query pressure, and web_log.requests for 5xx spikes that precede support tickets. On stacks running PHP 8.3 or 8.5 with MySQL 9.7 or 8.4 LTS and Laravel 12 or 13, correlate high load with disk.io when CPU looks flat—I/O wait often masquerades as a CPU problem.

Netdata auto-detects many services, but MySQL needs a read-only monitoring user: CREATE USER 'netdata'@'localhost' with a strong password, then GRANT REPLICATION CLIENT and PROCESS on all databases, plus SELECT on performance_schema. Point credentials in /etc/netdata/go.d/mysql.conf. PHP-FPM and Nginx collectors activate when those services run on standard paths. Enable Redis collectors too if your Laravel stack uses Redis 8.10 for caching or queues, so application metrics appear alongside host charts rather than leaving database blind spots.

Netdata Cloud is optional but recommended. Claiming connects your agent to a central dashboard, alert history, and easier notification setup using sudo netdata-claim.sh with your claim token and room ID. Local-only monitoring works if you restrict dashboard access and route alerts yourself through health_alarm_notify.conf. On small Nepal client projects where one person handles ops, Cloud reduces friction for notification setup compared to wiring every channel on the server directly. Sister sites on a shared Deployer 7 pipeline benefit from identical configs compared across nodes in one Cloud space.

Exposing port 19999 without authentication is the worst—bind to localhost or protect with a reverse proxy. Default health thresholds cause alert fatigue on 1 GB RAM VPS instances; tune health.d/ram.conf to match your workload. Alerts without a runbook become noise—document actions like disk full means rotate logs, expand volume, and verify backups. Ignoring correlated signals misleads troubleshooting: high load plus flat CPU often means disk I/O wait, not CPU saturation. Skipping host hardening—patching, fail2ban, CIS-aligned baselines—leaves you monitoring a server that is still an easy target. Under-provisioned shared hosting hides the metrics you actually need.

Netdata covers infrastructure and service-level metrics well—it catches runaway PHP-FPM workers, full disks, and MySQL connection spikes before clients notice. It does not replace log analysis or synthetic uptime checks. Add Laravel health endpoints, queue worker monitoring, and external uptime probes for end-to-end coverage. Netdata tells you the server is struggling; application health routes tell you which feature broke. On a production Laravel host I maintain, Netdata caught a queue worker memory leak during a seasonal traffic spike. Pair metrics with nightly backups and automated health checks so alerts lead to action, not anxiety.

Default settings suit a lab box; production needs tighter caps. In /etc/netdata/netdata.conf, set db mode to dbengine, retention to 2d, and dbengine disk space MB to 256 on a 2 GB VPS to avoid disk pressure from metric history. Restart after changes: sudo systemctl restart netdata. With that 256 MB disk cap, expect roughly 100–200 MB RAM usage. On 1 GB instances, lower retention further. The agent stays lighter than running a full Prometheus stack on the same box, which matters when your hosting budget is around Rs 1,500/month (~USD 11) and every megabyte counts.

Choose Netdata for one to twenty servers, small teams, and fast visibility with built-in per-second alerts—install and tune in an afternoon, not a quarter-long observability project. Choose Prometheus and Grafana when you have twenty or more nodes, an SRE team, and custom SLI/SLO dashboards with months of TSDB retention. Netdata fits the Rs 1,500/month VPS (~USD 11) hosting tier common on client projects. When scale and custom SLOs demand it, migrate metrics to Prometheus. Until then, start with disk, memory, load, and PHP-FPM pool alerts routed to a channel your team actually reads.

Share this article

0 Comments

Leave a comment

Your email is not published. Comments appear once they have been read. Sign in to have your details filled in.

Quick Contact Options
Choose how you want to connect me: