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 / coredns
COREDNS · OPERATIONS PLAYBOOK

CoreDNS: one plugin chain, a cache that hides upstream failure, and a kernel path that drops queries the process never sees

A DNS server built as an ordered chain of plugins running on the Go runtime. Every query is a goroutine, an in-memory cache and a forward connection pool sit on the hot path, and in Kubernetes the conntrack and UDP-buffer layer in front of it can silently drop queries while every CoreDNS metric stays green. We trace how that design behaves under load, where it turns a small fault into a cluster-wide outage, and what to do when it does.

"

CoreDNS is a few lines of Corefile and it just works — until a config change points it back at itself, an upstream goes dark, or the kernel starts dropping DNS packets the process never sees.

The defaults work. Until a Corefile forwards to the cluster DNS Service or a node's /etc/resolv.conf that routes back, the loop plugin logs Loop detected at startup and the pod drops into CrashLoopBackOff. Until every upstream goes unreachable and forwarded queries return SERVFAIL cluster-wide — fast, not slow, and briefly masked by a warm cache. Until the kubernetes plugin loses its API watch and quietly keeps serving stale records while new Services stay invisible. Until query volume fills the node's conntrack table and the kernel drops packets — nf_conntrack: table full — with every CoreDNS dashboard still green. Until glibc's simultaneous A and AAAA lookups hit a conntrack race and applications stall for exactly five seconds.

These guides are written for engineers who already run CoreDNS, not for people learning what a resolver is. The goal is the mental model of how the plugin chain and the Go runtime beneath it actually behave under load, the failure patterns that keep recurring, the monitoring story that catches them before they page anyone, and the runbooks you wish someone had handed you before your last incident.

How CoreDNS actually runs in production

CoreDNS is not just a DNS server. It is a Go process running an ordered chain of plugins, where every query is a goroutine, two caches and a forward connection pool sit on the hot path, and — in Kubernetes — the kernel network path in front of it can drop packets the process never counts. Most production failures live between these layers, not inside any one of them.

01
clients + resolv.conf
Pods and hosts resolve through <code>/etc/resolv.conf</code>. Kubernetes' default <code>ndots:5</code> expands short names across the search list, so one logical lookup becomes four to six real queries. Every query first crosses the kernel UDP and conntrack path — before CoreDNS ever sees it.
CLIENT
02
listeners (:53 UDP/TCP)
CoreDNS accepts queries on port 53 with a goroutine per request and no fixed thread pool. The kernel's UDP receive buffer sits in front of the listener; packets dropped there are never counted by any CoreDNS metric.
LISTEN
03
server blocks + plugin chain
The Corefile defines one plugin chain per server block. An incoming query matches the most specific zone, then runs the chain in order — the first plugin that answers stops it. Plugin order is behaviour, not decoration.
CHAIN
04
cache plugin
Separate positive, negative, and SERVFAIL LRU caches, each with its own TTL. A warm cache hides an upstream that has already died; SERVFAIL is cached for five seconds by default, so a one-second blip is served to everyone for five.
CACHE
05
kubernetes plugin
Watches Services and Endpoints through API informers and builds an in-memory record set. When the API watch disconnects, CoreDNS keeps serving the last known state with no error — existing names resolve, new ones do not.
K8S
06
forward plugin + upstreams
Maintains connection pools and health checks to upstream resolvers, with a <code>max_concurrent</code> cap on in-flight queries. One slow upstream drags every query routed to it; all upstreams down turns forwarding into an immediate SERVFAIL cascade.
FORWARD
07
Go runtime (goroutines, heap, GC)
A goroutine per in-flight query, a heap holding the caches and the Kubernetes watch state, and a garbage collector whose pauses land on the query P99. The container memory limit is a hard cliff — cross it and the pod is OOMKilled instantly.
RUNTIME
08
health / ready / metrics endpoints
<code>:8080/health</code> checks process liveness only, <code>:8181/ready</code> is plugin-aware and waits for the kubernetes sync, and <code>:9153/metrics</code> exposes Prometheus data. None of the three proves that DNS actually resolves.
STATE

Why this matters: 'DNS is broken' can be a forwarding loop crashing the pod, a cluster-wide SERVFAIL from dead upstreams, an OOM kill, conntrack drops the process never sees, a stale Kubernetes record set, a cold-cache thundering herd, or a five-second glibc timeout in the network path. The symptom rhymes but each layer has a different signal — and a different fix.

The failures you'll actually see

Most CoreDNS incidents fall into a small set of recurring patterns. Recognise the shape, and triage gets dramatically faster.

CRITICAL

The upstream black hole

Every configured upstream resolver goes unreachable — a firewall change, a routing failure, or the upstreams genuinely down. The forward plugin fails forwarded queries immediately with SERVFAIL, so latency stays LOW (fast failure, not timeout). A warm cache serves stale hits and masks it briefly; once TTLs expire, everything fails at once. coredns_forward_healthcheck_broken_total incrementing confirms all upstreams are marked unhealthy.

  • SERVFAIL climbing toward 100% of forwarded queries, latency LOW
  • coredns_forward_healthcheck_broken_total incrementing
  • Per-upstream health check failures for every upstream
  • Cache hit ratio briefly high, then a cliff as TTLs expire
Investigate
CRITICAL

CrashLoopBackOff from a forwarding loop

The Corefile forwards to an address that routes back to CoreDNS — 127.0.0.1:53, the cluster DNS Service ClusterIP, or a node /etc/resolv.conf that points at cluster DNS. The loop plugin sends a self-referencing probe at startup, detects the cycle, and exits the process. Kubernetes restarts the pod, it loops again, forever. No metrics are scraped because the process dies within seconds.

  • Pod in CrashLoopBackOff, restarting every few seconds
  • Loop detected in the CoreDNS logs (plugin/loop)
  • No Prometheus metrics — process exits before scrape
  • Started right after a Corefile / forward-target change
Investigate
CRITICAL

The memory cliff and OOM kill

Memory climbs — an oversized cache, a goroutine or connection leak, a large-cluster watch set, or the startup re-list peak — until RSS crosses the container limit and the runtime OOM-kills the pod instantly. There is no graceful degradation. When the limit is set only just above steady state, the kubernetes plugin's full re-list on restart blows it again, producing a crash loop.

  • Pod restarts with reason OOMKilled
  • process_resident_memory_bytes near the container limit
  • Post-GC heap minima trending up, GC pauses lengthening
  • Crash loop where each restart is OOM-killed during API re-list
Investigate
CRITICAL

Silent packet loss beneath the process

Every UDP DNS flow consumes a conntrack entry. Under high QPS the node's conntrack table fills and the kernel drops packets silently — no ICMP, no reset. CoreDNS metrics look perfect because the packets never reach the process; clients simply time out. Because conntrack is a shared node resource, exhaustion drops new TCP and UDP flows for every pod on the node, not just DNS.

  • nf_conntrack: table full, dropping packet in kernel logs
  • Client-side DNS timeouts while CoreDNS dashboards stay green
  • conntrack count near nf_conntrack_max on CoreDNS nodes
  • Unrelated apps on the same node failing connections too
Investigate
ACTIVE

The SERVFAIL cascade

Queries start failing with SERVFAIL — the resolver hit an internal error or could not reach what it needed. In Kubernetes the two big sources are dead upstreams (the forward plugin) and a lost API watch (the kubernetes plugin). A five-second SERVFAIL cache turns a brief upstream flap into a longer, wider outage. A pod passing its health probe can still SERVFAIL every single query.

  • coredns_dns_responses_total{rcode="SERVFAIL"} rising
  • plugin label pointing at forward vs kubernetes
  • zone label isolating cluster.local from forwarded zones
  • Health probe green while resolution is failing
Investigate
IMMINENT

Stale cluster DNS

The kubernetes plugin loses contact with the API server — overload, network trouble, or a 403 after an RBAC change. CoreDNS keeps serving records from its last known state, so existing Services resolve and every performance metric stays green, while newly created Services and endpoint changes are invisible and the data quietly drifts from reality. There is no binary 'watch broken' metric — you infer it from API error codes.

  • coredns_kubernetes_rest_client_requests_total showing 5xx / 403
  • New Services not resolvable while old ones are fine
  • cluster.local affected; forwarded zones unaffected
  • A synthetic freshness test failing while metrics look clean
Investigate
Choosing a tool

Best CoreDNS Monitoring Tools (2026)

A ranked review of the tools teams actually shortlist here, what each one is genuinely good at, and how the pricing behaves as you scale.

CoreDNS monitoring maturity levels

CoreDNS observability works in four practical levels. Each is a complete operation, not a stepping stone. Pick the level that matches how much your resolver matters. Most production clusters should land at the second level.

Level 1: Survival

Know that something is wrong

Survival monitoring is the floor. With these signals you can answer one question: is CoreDNS alive and is it returning answers rather than failures? You will not learn what broke, but you will learn that something broke. Survival is enough for dev resolvers and non-critical zones.

  • Process / pod running Is CoreDNS up and not in CrashLoopBackOff or OOM restart?
  • Port 53 listening (UDP and TCP) Is the resolver actually accepting queries?
  • Metrics endpoint on :9153 Is Prometheus data reachable at all?
  • Any SERVFAIL responses coredns_dns_responses_total{rcode="SERVFAIL"} — the real availability signal.
  • Restart count Restarts in the last hour point at loops, OOM, or config faults.

Level 2: Operational

Diagnose most incidents on your own

Operational monitoring is what most production clusters should target. Survival tells you something is wrong; operational tells you what. With this coverage your team can usually diagnose an incident on its own: failing upstreams, stalled Kubernetes sync, cache disruption, latency, capacity.

  • Query rate by zone coredns_dns_requests_total; a drop to zero can mean drops upstream of the process.
  • SERVFAIL rate and ratio Alert on the ratio against baseline, never on NXDOMAIN.
  • Request latency P99 by zone cluster.local latency points at the API; forwarded zones at upstreams.
  • All upstreams down counter coredns_forward_healthcheck_broken_total — complete forwarding loss.
  • Per-upstream health failures coredns_proxy_healthcheck_failures_total{to=...} isolates the bad upstream.
  • Cache hit ratio hits/requests; a drop drives latency and upstream load up together.
  • Node conntrack utilisation The single most common unmonitored cause of Kubernetes DNS outages.

Level 3: Mature

Catch problems before they become incidents

Mature monitoring catches problems before they wake anyone up. A cache slowly undersized for its working set, goroutines creeping upward, GC pauses lengthening, a config reload that silently failed, one replica quietly degraded. None of these page you on day one. They become incidents on day thirty.

  • Per-upstream latency coredns_proxy_request_duration_seconds{to=...} finds the slow upstream.
  • Heap trend and GC pause duration Post-GC minima rising is a leak heading for OOM.
  • Goroutine count trend A count that never returns to baseline is a leak.
  • Cache eviction rate Evictions at baseline traffic mean the cache is too small.
  • Reload failures coredns_reload_failed_total — the running config is not what you think.
  • Recovered panics coredns_panics_total — a CoreDNS or plugin bug.
  • Forward max_concurrent rejects Backpressure: the forward plugin is overwhelmed.
  • File descriptor ratio process_open_fds / process_max_fds; a cliff at the limit.

Level 4: Expert

Reactive instrumentation after real incidents

Expert signals enter your stack the day after a specific incident proved you needed them. Kubernetes API error breakdowns, DNS programming latency, connection-cache behaviour, per-plugin SERVFAIL, node UDP-buffer errors, response-size and query-type distributions for abuse. Most teams never need every signal here. Add the ones your incident history says you do.

  • Kubernetes API errors by code coredns_kubernetes_rest_client_requests_total; 403 is RBAC, 5xx is overload.
  • DNS programming duration How long a Service takes to become resolvable.
  • Connection cache hit/miss coredns_proxy_conn_cache_*; churn adds latency and FDs.
  • SERVFAIL by plugin The plugin label separates forward from kubernetes faults.
  • Node UDP buffer errors netstat -su RcvbufErrors — silent packet loss below the process.
  • Response size distribution Large-response shifts flag amplification or TCP fallback.
  • Query type distribution (ANY/AXFR) Amplification and zone-transfer reconnaissance.
  • Cache stale serves coredns_cache_served_stale_total masks upstream failure.

Operating mistakes worth avoiding

The traps CoreDNS teams keep falling into. Each has a clear, well-known fix. Most teams only learn it after an incident.

Trusting health probes instead of RCODE metrics

The <code>/health</code> endpoint checks process liveness only — a pod can return <code>200 OK</code> to every probe while returning <code>SERVFAIL</code> to every DNS query. Teams that alert only on pod health miss the single most important failure mode. Monitor <code>coredns_dns_responses_total{rcode="SERVFAIL"}</code> and, in Kubernetes, use <code>/ready</code> — not <code>/health</code> — for the readiness probe so pods don't take traffic before the kubernetes plugin has synced.

Not monitoring conntrack at all

The most common unmonitored root cause of Kubernetes DNS disasters. Teams instrument CoreDNS beautifully — QPS, latency, errors, memory — then get blindsided by node-wide packet drops because nobody watched <code>nf_conntrack_count</code>. Conntrack is shared node infrastructure, invisible to CoreDNS, and its exhaustion is catastrophic with zero warning. Every production cluster running CoreDNS must watch conntrack on its nodes.

Confusing NXDOMAIN with SERVFAIL

NXDOMAIN means the name does not exist — normal, expected, and constant in Kubernetes, where <code>ndots</code> search expansion generates intermediate NXDOMAINs by design. SERVFAIL and REFUSED are failures. Alerting on 'total errors' buries real SERVFAIL spikes in NXDOMAIN noise. Alert on the SERVFAIL/total ratio against a rolling baseline; never on absolute NXDOMAIN count.

Trusting CoreDNS latency for what applications feel

CoreDNS reports processing time. It does not include kernel buffer wait, CFS throttling, network transit, or conntrack drops. Application-observed DNS latency can be 10-100x the CoreDNS number during degradation. Teams that watch only CoreDNS-side latency get blindsided when apps report DNS timeouts while the CoreDNS dashboard is green.

No functional freshness test for Kubernetes DNS

If the kubernetes plugin's API watch disconnects silently, every performance metric stays green — the data is just wrong. Without a synthetic test that creates (or reads a known-recent) Service and confirms CoreDNS resolves it, there is no way to detect stale records. This is CoreDNS's most dangerous failure mode, and almost nobody tests for it.

Ignoring the ndots:5 amplification

Seeing 50,000 QPS at CoreDNS does not mean 50,000 logical lookups — with the default <code>ndots:5</code>, short names expand through the search list into four to six queries each, so it may be 8,000-12,000 real lookups amplified 4-6x. This wrecks capacity planning and hides the real fix: override <code>ndots</code> (or use fully-qualified names) for workloads that mostly resolve external names.

Rolling all CoreDNS pods at once

A rolling update with <code>maxUnavailable</code> too high clears every cache simultaneously. The resulting cold-cache thundering herd hammers upstreams, and if they buckle, the five-second SERVFAIL cache amplifies it. Teams treat the post-rollout latency spike as 'expected' instead of preventing it with <code>maxUnavailable=1</code>, PodDisruptionBudgets, and staggered rollouts.

Treating CoreDNS as a singleton

Two or more replicas sit behind a ClusterIP with kube-proxy balancing across them. If one replica is degraded and the others are healthy, averaged metrics look only 'slightly off' while a real fraction of queries fail or stall. Keep per-pod series and alert on divergence between replicas, not just the aggregate.

CoreDNS runbooks in this section

Each guide is a focused runbook for one symptom or topic. Pick one when you have an incident, or use the categories to learn the area.

DNS protocol: truncation, response size, and TCP fallback

WHERE TO GO NEXT

Setting up CoreDNS monitoring, or putting out a fire?

If you're starting from scratch, the monitoring checklist is the path of least regret. If you're mid-incident, jump straight to the symptom that matches what you're seeing.