The only agent that thinks for itself

Autonomous Monitoring with self-learning AI built-in, operating independently across your entire stack.

Unlimited Metrics & Logs
Machine learning & MCP
5% CPU, 150MB RAM
3GB disk, >1 year retention
800+ integrations, zero config
Dashboards, alerts out of the box
> Discover Netdata Agents

Centralized metrics streaming and storage

Aggregate metrics from multiple agents into centralized Parent nodes for unified monitoring across your infrastructure.

Stream from unlimited agents
Long-term data retention
High availability clustering
Data replication & backup
Scalable architecture
Enterprise-grade security
> Learn about Parents

Fully managed cloud platform

Access your monitoring data from anywhere with our SaaS platform. No infrastructure to manage, automatic updates, and global availability.

Zero infrastructure management
99.9% uptime SLA
Global data centers
Automatic updates & patches
Enterprise SSO & RBAC
SOC2 & ISO certified
> Explore Netdata Cloud

Deploy Netdata Cloud in your infrastructure

Run the full Netdata Cloud platform on-premises for complete data sovereignty and compliance with your security policies.

Complete data sovereignty
Air-gapped deployment
Custom compliance controls
Private network integration
Dedicated support team
Kubernetes & Docker support
> Learn about Cloud On-Premises

Powerful, intuitive monitoring interface

Modern, responsive UI built for real-time troubleshooting with customizable dashboards and advanced visualization capabilities.

Real-time chart updates
Customizable dashboards
Dark & light themes
Advanced filtering & search
Responsive on all devices
Collaboration features
> Explore Netdata UI

Monitor on the go

Native iOS and Android apps bring full monitoring capabilities to your mobile device with real-time alerts and notifications.

iOS & Android apps
Push notifications
Touch-optimized interface
Offline data access
Biometric authentication
Widget support
> Download apps

The future of infrastructure observability

See our strategic direction across AI-native observability, full-stack signals, operational intelligence, and enterprise platform maturity.

AI-native observability
Full-stack signal coverage
Operational intelligence
Enterprise platform maturity
Agent releases every 6 weeks
Cloud continuous delivery
> Explore Product Roadmap

Best energy efficiency

True real-time per-second

100% automated zero config

Centralized observability

Multi-year retention

High availability built-in

Zero maintenance

Always up-to-date

Enterprise security

Complete data control

Air-gap ready

Compliance certified

Millisecond responsiveness

Infinite zoom & pan

Works on any device

Native performance

Instant alerts

Monitor anywhere

AI-native observability

Continuous delivery

Open source foundation

80% Faster Incident Resolution

AI-powered troubleshooting from detection, to root cause and blast radius identification, to reporting.

True Real-Time and Simple, even at Scale

Linearly and infinitely scalable full-stack observability, that can be deployed even mid-crisis.

90% Cost Reduction, Full Fidelity

Instead of centralizing the data, Netdata distributes the code, eliminating pipelines and complexity.

See and Map Your Entire Network

Live topology, flow analytics, and SNMP device and trap monitoring — unified with your full-stack observability.

Control Without Surrender

SOC 2 Type 2 certified with every metric kept on your infrastructure.

Integrations

800+ collectors and notification channels, auto-discovered and ready out of the box.

800+ data collectors
Auto-discovery & zero config
Cloud, infra, app protocols
Notifications out of the box
> Explore integrations
Real Results
46% Cost Reduction

Reduced monitoring costs by 46% while cutting staff overhead by 67%.

— Leonardo Antunez, Codyas

Zero Pipeline

No data shipping. No central storage costs. Query at the edge.

From Our Users
"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

No Query Language

Point-and-click troubleshooting. No PromQL, no LogQL, no learning curve.

Enterprise Ready
67% Less Staff, 46% Cost Cut

Enterprise efficiency without enterprise complexity—real ROI from day one.

— Leonardo Antunez, Codyas

SOC 2 Type 2 Certified

Zero data egress. Only metadata reaches the cloud. Your metrics stay on your infrastructure.

Full Coverage
800+ Collectors

Auto-discovered and configured. No manual setup required.

Any Notification Channel

Slack, PagerDuty, Teams, email, webhooks—all built-in.

Built for the People Who Get Paged

Because 3am alerts deserve instant answers, not hour-long hunts.

Every Industry Has Rules. We Master Them.

See how healthcare, finance, and government teams cut monitoring costs 90% while staying audit-ready.

Monitor Any Technology. Configure Nothing.

Install the agent. It already knows your stack.
From Our Users
"A Rare Unicorn"

Netdata gives more than you invest in it. A rare unicorn that obeys the Pareto rule.

— Eduard Porquet Mateu, TMB Barcelona

99% Downtime Reduction

Reduced website downtime by 99% and cloud bill by 30% using Netdata alerts.

— Falkland Islands Government

Real Savings
30% Cloud Cost Reduction

Optimized resource allocation based on Netdata alerts cut cloud spending by 30%.

— Falkland Islands Government

46% Cost Cut

Reduced monitoring staff by 67% while cutting operational costs by 46%.

— Codyas

Real Coverage
"Plugin for Everything"

Netdata has agent capacity or a plugin for everything, including Windows and Kubernetes.

— Eduard Porquet Mateu, TMB Barcelona

"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

Real Speed
Troubleshooting in 30 Seconds

From 2-3 minutes to 30 seconds—instant visibility into any node issue.

— Matthew Artist, Nodecraft

20% Downtime Reduction

20% less downtime and 40% budget optimization from out-of-the-box monitoring.

— Simon Beginn, LANCOM Systems

Pay per Node. Unlimited Everything Else.

One price per node. Unlimited metrics, logs, users, and retention. No per-GB surprises.

Free tier—forever
No metric limits or caps
Retention you control
Cancel anytime
> See pricing plans

What's Your Monitoring Really Costing You?

Most teams overpay by 40-60%. Let's find out why.

Expose hidden metric charges
Calculate tool consolidation
Customers report 30-67% savings
Results in under 60 seconds
> See what you're really paying

Your Infrastructure Is Unique. Let's Talk.

Because monitoring 10 nodes is different from monitoring 10,000.

On-prem & air-gapped deployment
Volume pricing & agreements
Architecture review for your scale
Compliance & security support
> Start a conversation

Monitoring That Sells Itself

Deploy in minutes. Impress clients in hours. Earn recurring revenue for years.

30-second live demos close deals
Zero config = zero support burden
Competitive margins & deal protection
Response in 48 hours
> Apply to partner

Per-Second Metrics at Homelab Prices

Same engine, same dashboards, same ML. Just priced for tinkerers.

Community: Free forever · 5 nodes · non-commercial
Homelab: $90/yr · unlimited nodes · fair usage
> Get the Homelab Plan

$1,000 Per Referral. Unlimited Referrals.

Your colleagues get 10% off. You get 10% commission. Everyone wins.

10% of subscriptions, up to $1,000 each
Track earnings inside Netdata Cloud
PayPal/Venmo payouts in 3-4 weeks
No caps, no complexity
> Get your referral link
Cost Proof
40% Budget Optimization

"Netdata's significant positive impact" — LANCOM Systems

Calculate Your Savings

Compare vs Datadog, Grafana, Dynatrace

Savings Proof
46% Cost Reduction

"Cut costs by 46%, staff by 67%" — Codyas

30% Cloud Bill Savings

"Reduced cloud bill by 30%" — Falkland Islands Gov

Enterprise Proof
"Better Than Combined Alternatives"

"Better observability with Netdata than combining other tools." — TMB Barcelona

Real Engineers, <24h Response

DPA, SLAs, on-prem, volume pricing

Why Partners Win
Demo Live Infrastructure

One command, 30 seconds, real data—no sandbox needed

Zero Tickets, High Margins

Auto-config + per-node pricing = predictable profit

Homelab Ready
Free Video Course

8-episode Netdata tutorial by LearnLinux.tv

76k+ GitHub Stars

3rd most starred monitoring project

Worth Recommending
Product That Delivers

Customers report 40-67% cost cuts, 99% downtime reduction

Zero Risk to Your Rep

Free tier lets them try before they buy

AI Support Assistant, Available 24/7

Nedi has access to all official documentation, source code, and resources. Ask any question about Netdata—responds in your language.

Deployment & configuration
Troubleshooting & sizing
Alerts & notifications
Evidence-based answers
> Ask Nedi now

Never Fight Fires Alone

Docs, community, and expert help—pick your path to resolution.

Learn.netdata.cloud docs
Discord, Forums, GitHub
Premium support available
> Get answers now

60 Seconds to First Dashboard

One command to install. Zero config. 850+ integrations documented.

Linux, Windows, K8s, Docker
Auto-discovers your stack
> Read our documentation

76,000+ Engineers Strong

615+ contributors. 1.5M daily downloads. One mission: simplify observability.

Per-Second. 90% Cheaper. Data Stays Home.

Side-by-side comparisons: costs, real-time granularity, and data sovereignty for every major tool.

See why teams switch from Datadog, Prometheus, Grafana, and more.

> Browse all comparisons
Edge-Native Observability, Born Open Source
Per-second visibility, ML on every metric, and data that never leaves your infrastructure.
Founded in 2016
615+ contributors worldwide
Remote-first, engineering-driven
Open source first
> Read our story
Promises We Publish—and Prove
12 principles backed by open code, independent validation, and measurable outcomes.
Open source, peer-reviewed
Zero config, instant value
Data sovereignty by design
Aligned pricing, no surprises
> See all 12 principles
Edge-Native, AI-Ready, 100% Open
76k+ stars. Full ML, AI, and automation—GPLv3+, not premium add-ons.
76,000+ GitHub stars
GPLv3+ licensed forever
ML on every metric, included
Zero vendor lock-in
> Explore our open source
Build Real-Time Observability for the World
Remote-first team shipping per-second monitoring with ML on every metric.
Remote-first, fully distributed
Open source (76k+ stars)
Challenging technical problems
Your code on millions of systems
> See open roles
Meet the Team Behind Netdata
Conferences, meetups, and tradeshows where you can see Netdata in action and talk to the engineers who build it.
Live demos and deep dives
Book 1-on-1 meetings
Talks and panel sessions
Event recaps and photos
> See all events
Talk to a Netdata Human in <24 Hours
Sales, partnerships, press, or professional services—real engineers, fast answers.
Discuss your observability needs
Pricing and volume discounts
Partnership opportunities
Media and press inquiries
> Book a conversation
Your Data. Your Rules.
On-prem data, cloud control plane, transparent terms.
Trust & Scale
76,000+ GitHub Stars

One of the most popular open-source monitoring projects

SOC 2 Type 2 Certified

Enterprise-grade security and compliance

Data Sovereignty

Your metrics stay on your infrastructure

Validated
University of Amsterdam

"Most energy-efficient monitoring solution" — ICSOC 2023, peer-reviewed

ADASTEC (Autonomous Driving)

"Doesn't miss alerts—mission-critical trust for safety software"

Community Stats
615+ Contributors

Global community improving monitoring for everyone

1.5M+ Downloads/Day

Trusted by teams worldwide

GPLv3+ Licensed

Free forever, fully open source agent

Why Join?
Remote-First

Work from anywhere, async-friendly culture

Impact at Scale

Your work helps millions of systems

$ guides / apache-httpd / apache-httpd-slowloris-attack ▌

Operations Guides

Apache Slowloris: R-state workers, slow-read attacks, and mod_reqtimeout

Your Apache server stopped serving requests, but nothing looks broken. CPU is normal. Memory is normal. The backend is healthy when you test it directly. Request rate is flat or dropping. Yet clients time out, and the load balancer is pulling the node from rotation.

This is the Slowloris signature: a slow-read denial of service where an attacker opens many connections and drips request data byte by byte, holding each worker in the Reading (R) state indefinitely. With enough slow connections, the entire worker pool is consumed reading requests that never complete. The server is not overloaded. It is held hostage.

The attack is cheap to run, needs almost no bandwidth, and produces almost no error-log noise. The scoreboard is where you see it, and most teams never look at the scoreboard until their first incident. This guide covers detection, confirmation, immediate mitigation, and durable defense.

What this means

Apache workers are a finite pool, bounded by MaxRequestWorkers. A worker assigned to a connection stays assigned until the request completes or a timeout fires. In a normal workload, a worker spends a few percent of its life in the R state (reading the request line and headers). Slowloris inverts that ratio: attackers send headers one byte at a time, or send periodic junk headers to reset timers, so workers park in R for minutes.

Once all workers are stuck in R, new connections queue in the kernel listen backlog, then get refused. From the outside the site is down. From the inside, every infrastructure metric looks fine because nobody is doing any work.

flowchart TD
  A[Attacker opens many TCP connections] --> B[Sends request bytes slowly]
  B --> C[Workers park in R state]
  C --> D[BusyWorkers rises, IdleWorkers hits zero]
  D --> E[New connections queue in listen backlog]
  E --> F[Backlog fills, connections refused]
  F --> G[Legitimate users see timeouts]
  C -.-> H[CPU, memory, backend all normal]

Common causes

A high R-state count is not automatically an attack. Rule these out before you block IPs.

CauseWhat it looks likeFirst thing to check
Slowloris attackMany workers in R, many connections from few source IPs, low bytes per connection, 408s if mod_reqtimeout is activeSource-IP concentration via ss
Legitimate slow clientsR-state elevated but spread across many IPs, often mobile or satellite networks, correlates with upload-heavy endpointsPer-IP connection counts look flat and diverse
Slow upload endpointsR-state concentrated on specific upload URLs, requests eventually completeAccess log shows the slow requests finishing with large %I sizes
Load balancer misconfigurationIncomplete or stalled requests forwarded from LB IPs; all R-state connections share LB source addressesCompare connection pattern against LB health-check config

Quick checks

All read-only and safe to run during the incident.

# 1. Scoreboard state distribution: is R abnormally high?
curl -s http://localhost/server-status?auto | grep "Scoreboard:" | \
  awk '{print $2}' | fold -w1 | sort | uniq -c | sort -nr

Normal traffic rarely has more than a few percent of workers in R. Above 20% sustained is anomalous. If R dominates and _ (idle) slots are gone, you are in an active event.

# 2. Worker utilization: BusyWorkers climbing, IdleWorkers at zero?
curl -s http://localhost/server-status?auto | grep -E "BusyWorkers|IdleWorkers"

# 3. Source-IP concentration on the listening port
ss -tn sport = :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
# Repeat for :443 if you terminate TLS locally

The attack signature is a small number of IPs holding a large number of connections. A healthy traffic mix shows the reverse.

# 4. Human-readable scoreboard: look for long-stuck reading slots
curl -s http://localhost/server-status | less

In the per-worker table, the classic Slowloris row shows state R, an SS value (seconds since the request started) in the hundreds, client shown as ?, and request shown as ..reading... A worker that has been “reading” a request for 400 seconds is not reading a request.

# 5. Is mod_reqtimeout loaded and firing?
apachectl -M 2>/dev/null | grep reqtimeout
awk '$9 == 408' /var/log/apache2/access.log | wc -l   # adjust path for your distro

408 responses are mod_reqtimeout disconnecting slow clients. Some 408s are normal background noise. A flood of them during the incident confirms slow reads.

# 6. Rule out resource saturation (should all look boring)
ps -C httpd -o pid,%cpu --sort=-%cpu 2>/dev/null | head -5 || \
  ps -C apache2 -o pid,%cpu --sort=-%cpu | head -5
df -h /var/log/apache2/ 2>/dev/null || df -h /var/log/httpd/

Boring CPU, memory, and disk with a full scoreboard is exactly what distinguishes Slowloris from the slow backend cascade and worker saturation patterns.

How to diagnose it

  1. Confirm the R-state pattern. Scoreboard shows R well above 20% of slots, BusyWorkers near MaxRequestWorkers, IdleWorkers at zero. Request rate (Total accesses delta) is flat or falling because nothing completes.

  2. Confirm source concentration. The ss check shows few IPs holding many connections. If the distribution is broad, you are looking at slow legitimate clients or an upload problem, not an attack.

  3. Check the bytes-per-connection ratio. Attack connections transfer almost nothing over their lifetime. Legitimate slow clients still complete requests with real bodies. In the server-status table, long-SS R-state rows with ? clients and ..reading.. requests are definitive.

  4. Verify what Apache is logging. If mod_reqtimeout is active, access log 408s spike during the event. If nothing is logged at all, the connections are dying before a request line completes, or the timeout module is not configured.

  5. Check what you cannot see: the AcceptFilter blind spot. On Linux, AcceptFilter http data is the default: the kernel holds the socket until at least one byte arrives, and only then hands it to a worker. A variant that opens TCP connections and sends nothing never reaches a worker. BusyWorkers stays normal while the kernel connection table fills. If ss shows thousands of ESTABLISHED connections with zero bytes transferred but few R-state workers, this is your case. The handshake and header timeouts in mod_reqtimeout only start after the worker receives the socket, so mod_reqtimeout cannot catch this variant. Detection has to happen at the connection layer, not the scoreboard.

  6. Correlate with the error log. Look for the MPM worker-limit message — AH00484 (event), AH00286 (worker), or AH00161 (prefork) followed by “server reached MaxRequestWorkers setting” — as corroboration that the pool actually exhausted, and to timestamp when saturation began.

Metrics and signals to monitor

SignalWhy it mattersWarning sign
Scoreboard R-state ratioDirect view of workers held reading requestsR above 20% of slots sustained; normal is a few percent
BusyWorkers / IdleWorkersConfirms pool consumptionIdleWorkers at zero while request rate is flat
Request rate (Total accesses delta)Slow reads never complete, so completions stallFalling completions during a “traffic surge”
Connections per source IPSeparates attack from slow legitimate clientsFew IPs holding dozens to hundreds of connections
408 response countmod_reqtimeout firing on slow clientsSustained spike above baseline noise
Listen backlog Recv-QShows the queue forming behind the exhausted poolSustained non-zero Recv-Q on :80/:443
Worker-limit message (AH00484/AH00286/AH00161) in error logApache explicitly reporting MaxRequestWorkers reachedAny occurrence during the event
Established connections with no matching R statesCatches the AcceptFilter-masked connect-only variantThousands of ESTABLISHED sockets, quiet scoreboard

Fixes

Immediate: block at the firewall, not in Apache

Once workers are exhausted, Apache-level access rules do nothing useful. There are no free workers to evaluate them. Block the offending sources in the host firewall or, better, upstream at the edge or load balancer.

# Emergency: drop an offending source IP at the host firewall
# Disruptive to that source only; verify the IP list before applying
iptables -A INPUT -s 203.0.113.17 -j DROP

Prefer rate or connection limits over hard drops when the sources might be shared (NAT, corporate egress). If you are behind a load balancer, Apache sees the LB’s addresses unless mod_remoteip is configured, and blocking at the host firewall may be the wrong layer entirely. Block at the LB or edge instead.

Durable: mod_reqtimeout

mod_reqtimeout is loaded by default in Apache 2.4 and is the primary in-Apache defense. It enforces deadlines for receiving the request headers and body, with a minimum data rate:

# In server config or virtual host context
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

This reads as: headers must complete within 20 seconds, but each 500 bytes per second of progress extends the deadline up to a 40-second ceiling. The body must complete in 20 seconds at a minimum rate of 500 bytes per second. Slowloris connections cannot sustain 500 bytes per second, so they are disconnected with a 408 well inside the window. The defaults shipped since 2.4.39 also include handshake=0 (no limit) for the TLS handshake stage; the handshake= parameter only exists on 2.4.39 and later and causes a configuration error on older builds, so check your version before copying directives that include it.

Tradeoffs to understand:

  • It does not prevent exhaustion during the grace period. A 20-second header timeout means each attack connection still holds a worker for up to 20 seconds. An attacker opening connections faster than your pool turns over can still exhaust workers. mod_reqtimeout raises the attacker’s cost; it does not close the hole by itself.
  • Legitimate slow clients get cut. If you serve users on genuinely slow links, tighten MinRate carefully and watch the 408 rate after changes.
  • Timeouts are logged at info level. To see them explicitly, use LogLevel reqtimeout:info rather than raising global verbosity.
  • The AcceptFilter gap remains. Connect-and-send-nothing connections never reach a worker on Linux, so this module never sees them. That variant needs kernel or firewall-level controls.

Durable: per-IP connection limits

Because mod_reqtimeout alone leaves the grace-period gap, pair it with a per-IP connection limiter so no single source can hold more than a handful of slots:

  • Firewall-level limiting (connection tracking rules) rejects excess connections before Apache touches them. This is the layer that also catches the AcceptFilter-masked variant.
  • Third-party modules such as mod_antiloris hook the connection early enough to reject excess per-IP connections before they occupy a worker. Modules such as mod_evasive and mod_limitipconn act after headers are read, so they never see a Slowloris connection that never finishes sending headers. mod_antiloris availability varies by distribution: Debian and Ubuntu do not currently ship it in their package indexes, while some distributions package it; otherwise build it from its maintained upstream repository.
  • Edge limiting (CDN, cloud LB, or reverse proxy in front) is the strongest option because attack connections never reach your Apache hosts at all.

Patch HTTP/2 slow-request CVEs

If you serve HTTP/2, several fixed CVEs are Slowloris-class attacks over h2: CVE-2018-17189 (slow request bodies, fixed in 2.4.38), CVE-2019-9517 (flooding with requests while never reading responses, fixed in 2.4.41), and CVE-2023-43622 (streams blocked indefinitely via initial window size 0, fixed in 2.4.58). If your version predates these fixes, HTTP/2 gives an attacker a second slow-read surface that RequestReadTimeout tuning alone does not cover. Upgrade.

Prevention

  • Monitor the R-state ratio continuously. This is the signal most teams only discover during their first incident. Alert on R above 20% of slots sustained, correlated with per-IP connection concentration.
  • Load mod_reqtimeout with explicit, reviewed values. It is on by default in 2.4, but confirm apachectl -M shows it and that the timeouts match your client population.
  • Track 408s as their own signal. A rising 408 baseline is an early indicator of probing before a full attack.
  • Enforce per-IP connection limits at the firewall or edge. Assume mod_reqtimeout alone is not enough, because it is not.
  • Restrict server-status. Slowloris reconnaissance and the scoreboard itself both live there. Bind it to localhost or an IP allowlist.
  • Baseline connection counts per IP. Without a baseline you cannot tell a distributed slow-client event from a concentrated attack under pressure.
  • Keep Apache patched. The HTTP/2 slow-request CVEs above are all fixed versions behind current releases.

How Netdata helps

  • Scoreboard state tracking over time turns the R-state ratio from a point-in-time curl into a trend, so you see the slow build before IdleWorkers hits zero, not after.
  • Worker utilization and request rate on the same view makes the Slowloris signature obvious: BusyWorkers climbing while completed requests fall is not a traffic surge.
  • Connection and socket-level metrics alongside scoreboard data expose the AcceptFilter-masked variant, where connections pile up without workers moving.
  • Error and access log correlation puts 408 spikes and MPM worker-limit events on the same timeline as the worker saturation they corroborate.
  • ML anomaly detection on the R-state ratio catches low-and-slow attacks that stay under static thresholds but deviate from your baseline.

Netdata’s web server monitoring brings these signals together with per-second metrics and ML anomaly detection.

The Netdata solution

Apache HTTP Server monitoring with Netdata

Netdata monitors Apache HTTP Server with per-second metrics from mod_status, pre-built dashboards, and ML-powered anomaly detection. Watch busy versus idle workers and the scoreboard state mix, requests per second, bytes served per second, and request processing duration alongside the rest of your stack, so you catch the worker-exhaustion, slow-backend, and memory incidents in these runbooks before they page anyone.