<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Traefik Operations Guides on Netdata</title><link>https://www.netdata.cloud/guides/traefik/</link><description>Recent content in Traefik Operations Guides on Netdata</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://www.netdata.cloud/guides/traefik/index.xml" rel="self" type="application/rss+xml"/><item><title>How Traefik actually works in production: a mental model for operators</title><link>https://www.netdata.cloud/guides/traefik/traefik-how-it-works-in-production/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-how-it-works-in-production/</guid><description>&lt;p>Most Traefik incidents are confusing because operators reason about it like nginx: a static proxy with a config file that gets reloaded on change. Traefik is not that. It is two systems sharing one process: a data-plane reverse proxy that terminates and forwards connections, and a control-plane reconciler that continuously watches configuration providers and rebuilds the routing table without a restart.&lt;/p>
&lt;p>Almost every characteristic Traefik failure, from silent config drift to retry amplification to the FD cliff, follows from that dual nature. If you hold the right mental model, the runbooks make sense. If you hold the wrong one, you will keep being surprised by a proxy that reports healthy while routing to dead backends with stale routes and expiring certificates.&lt;/p></description></item><item><title>Traefik /ping returns 200 while everything is broken: the health-check trap</title><link>https://www.netdata.cloud/guides/traefik/traefik-ping-health-check-trap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-ping-health-check-trap/</guid><description>&lt;p>Traefik&amp;rsquo;s &lt;code>/ping&lt;/code> endpoint answers one narrow question: &amp;ldquo;Is the Traefik process alive enough to answer this request?&amp;rdquo; It does not answer &amp;ldquo;Can Traefik correctly route production traffic?&amp;rdquo;&lt;/p>
&lt;p>That distinction matters because Traefik is both a data-plane proxy and a control-plane configuration reconciler. The process can stay alive while its Docker socket or Kubernetes API watch has failed, its routing table is stale, every backend is failing health checks, or a certificate is approaching expiry. In all of those states, &lt;code>/ping&lt;/code> can still return &lt;code>200 OK&lt;/code>.&lt;/p></description></item><item><title>Traefik 401/403 spike: auth failures, ForwardAuth outages, and brute force</title><link>https://www.netdata.cloud/guides/traefik/traefik-401-403-spike/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-401-403-spike/</guid><description>&lt;p>Your dashboard shows &lt;code>traefik_service_requests_total{code=&amp;quot;401&amp;quot;}&lt;/code> climbing steeply, or the entrypoint-level 4xx panel has turned red. A 401/403 surge is one of the most ambiguous signals a reverse proxy produces, because the same symptom maps to three different situations: your auth layer correctly rejecting bad credentials, your auth layer incorrectly rejecting everyone, or an attacker hammering a login endpoint.&lt;/p>
&lt;p>The trap: a ForwardAuth service that is up but degraded (session store exhausted, internal rate limit hit, broken ACL rule) rejects all requests with 401/403. To Traefik this looks like &amp;ldquo;auth working as designed.&amp;rdquo; To your users it is a full outage. Conversely, a credential-stuffing run produces the same metric shape but demands the opposite response: block, don&amp;rsquo;t fix.&lt;/p></description></item><item><title>Traefik 404 not found: requests arriving with no matching router</title><link>https://www.netdata.cloud/guides/traefik/traefik-404-not-found/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-404-not-found/</guid><description>&lt;p>A client reports that your service returns &amp;ldquo;404 page not found&amp;rdquo;. The backend is healthy, its logs show zero traffic, and the 404 body is a bare 19-byte plain-text response, not your application&amp;rsquo;s error page. That 404 did not come from your backend. It came from Traefik itself.&lt;/p>
&lt;p>When a request arrives at a Traefik entrypoint and matches no router, Traefik answers it directly with a 404. The request never touches a service, never runs through a middleware chain, and never reaches an upstream. This is a routing-layer problem with a completely different investigation path from a backend-originated 404, and mixing them up is one of the most common time-wasters in Traefik operations.&lt;/p></description></item><item><title>Traefik 502 Bad Gateway: when the backend is unreachable or returns garbage</title><link>https://www.netdata.cloud/guides/traefik/traefik-502-bad-gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-502-bad-gateway/</guid><description>&lt;p>A 502 from Traefik means the request got past routing and middleware, Traefik selected a service and tried to talk to a backend, and the backend hop failed. Traefik connected (or tried to connect) and got an invalid response, a reset connection, or nothing usable back. The usual mechanics: the backend crashed mid-response, sent something that is not valid HTTP for the negotiated protocol, or closed a connection Traefik wanted to reuse.&lt;/p></description></item><item><title>Traefik 503 Service Unavailable: no healthy backends left in the pool</title><link>https://www.netdata.cloud/guides/traefik/traefik-503-service-unavailable/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-503-service-unavailable/</guid><description>&lt;p>Traefik is returning &lt;code>503 Service Unavailable&lt;/code> for every request to a service. Clients are down. Traefik itself looks fine: the process is up, &lt;code>/ping&lt;/code> returns 200, other services route normally. This is the backend pool collapse failure mode: Traefik matched a router to a service, but every backend in that service&amp;rsquo;s load balancer pool has been marked down by health checks, so Traefik has nowhere to send the request.&lt;/p>
&lt;p>A Traefik 503 is not a Traefik failure. It is Traefik correctly reporting that its upstream pool is empty. The investigation belongs one hop upstream, at the backends or at the health check configuration itself.&lt;/p></description></item><item><title>Traefik 504 Gateway Timeout: the backend is alive but too slow</title><link>https://www.netdata.cloud/guides/traefik/traefik-504-gateway-timeout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-504-gateway-timeout/</guid><description>&lt;p>Your Traefik instance is up. &lt;code>/ping&lt;/code> returns 200. The backend service is running, its health checks pass, and clients are getting &lt;code>504 Gateway Timeout&lt;/code>. The connection to the backend was established, but the response never arrived within the configured timeout.&lt;/p>
&lt;p>A 504 in Traefik means: the backend exists, Traefik reached it, the TCP connection (and usually the request) succeeded, but the response took too long. That makes a 504 fundamentally different from a 502 (invalid response or connection error from the backend) or a 503 (no healthy backends at all). Lumping all 5xx together leads directly to investigating the wrong layer.&lt;/p></description></item><item><title>Traefik 5xx error rate: telling Traefik-generated errors from backend errors</title><link>https://www.netdata.cloud/guides/traefik/traefik-5xx-error-rate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-5xx-error-rate/</guid><description>&lt;p>Your edge dashboard shows a 5xx spike on Traefik. Someone pages the backend team. The backend team finds nothing wrong in their application logs. An hour later it turns out Traefik had no healthy backends for one service, or a route disappeared after a config change, and the application was never in the request path at all.&lt;/p>
&lt;p>Treating all 5xx responses as backend failures is one of the most common time-wasters in Traefik operations. A 502 generated by Traefik because it could not reach an upstream is a different incident from a 502 the backend produced itself. A 503 because every backend failed health checks is a different incident from a 503 your application returns under load. The root causes, the owners, and the fixes are all different.&lt;/p></description></item><item><title>Traefik access log blocking: when logging stalls request handling</title><link>https://www.netdata.cloud/guides/traefik/traefik-access-log-blocking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-access-log-blocking/</guid><description>&lt;p>Latency spikes across every route on a Traefik instance. Backends report nothing wrong. Service-level latency looks normal, but entrypoint latency is elevated. Health checks pass. If you see this combination and access logging is enabled at high verbosity or high request rate, the log writer is a prime suspect.&lt;/p>
&lt;p>Traefik&amp;rsquo;s access log sits in the request path. With the default configuration (&lt;code>bufferingSize: 0&lt;/code>), the access log line for a request is written synchronously from the request-handling goroutine before the request fully completes. When log volume is extreme (thousands of requests per second with verbose field selection), or when the write destination stops draining (full filesystem, blocked pipe), the log write stalls and the goroutine handling that request stalls with it. Requests do not fail; they get slow. That distinction is what makes this failure mode easy to miss.&lt;/p></description></item><item><title>Traefik ACME challenge failed: HTTP-01, DNS-01, and TLS-ALPN-01 renewal errors</title><link>https://www.netdata.cloud/guides/traefik/traefik-acme-challenge-failure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-acme-challenge-failure/</guid><description>&lt;p>Your certificates are approaching expiry and Traefik&amp;rsquo;s logs contain lines like &amp;ldquo;unable to obtain ACME certificate&amp;rdquo; or &amp;ldquo;Error renewing certificate&amp;rdquo;. HTTPS still works for now because Traefik keeps serving the old certificate, but the clock is running: Let&amp;rsquo;s Encrypt certificates live 90 days, Traefik attempts renewal 30 days before expiry, and if you are seeing renewal errors today, they have likely been failing silently for weeks.&lt;/p>
&lt;p>The uncomfortable part: Traefik exposes no Prometheus metric for ACME renewal failures. The only metric-adjacent signal is &lt;code>traefik_tls_certs_not_after&lt;/code> counting down toward expiry. The actual failure details exist only in the logs. That means this failure mode is invisible until someone either reads the logs, alerts on certificate expiry, or gets a browser warning.&lt;/p></description></item><item><title>Traefik ACME lock contention: stuck distributed locks blocking renewal</title><link>https://www.netdata.cloud/guides/traefik/traefik-acme-lock-contention/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-acme-lock-contention/</guid><description>&lt;p>Every Traefik instance in your HA deployment is healthy. &lt;code>/ping&lt;/code> returns 200, traffic flows, backends are up. Yet &lt;code>traefik_tls_certs_not_after&lt;/code> keeps creeping toward the current time, and the logs on each instance repeat some variant of &amp;ldquo;unable to acquire lock&amp;rdquo;. Certificates are drifting toward expiry and nobody is renewing them.&lt;/p>
&lt;p>This is the multi-instance ACME failure mode: Traefik uses a distributed lock in a KV store (Consul or etcd) so that exactly one instance performs ACME issuance and renewal at a time. When the lock holder crashes mid-renewal, is force-killed, or loses its session to a network partition, the lock can be left behind. Every remaining instance refuses to renew because the lock appears held, and the cluster slides toward certificate expiry while looking healthy on every conventional health signal.&lt;/p></description></item><item><title>Traefik ACME rate limit: too many certificates already issued for this domain</title><link>https://www.netdata.cloud/guides/traefik/traefik-acme-rate-limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-acme-rate-limit/</guid><description>&lt;p>You find it in the Traefik log, usually right after a deploy, a restart storm, or a cluster rebuild: an ACME order rejected with an HTTP 429 and the message &amp;ldquo;too many certificates already issued&amp;rdquo; for your domain. Traefik cannot get a new certificate, and it will keep retrying and keep getting rejected.&lt;/p>
&lt;p>Two very different situations sit behind this error. If your existing certificates are still valid and stored in &lt;code>acme.json&lt;/code>, traffic keeps flowing and you have days or weeks to fix the renewal path before expiry. If &lt;code>acme.json&lt;/code> was lost along with the certificates, you are rate limited and serving nothing valid on HTTPS, which is an outage on a timer.&lt;/p></description></item><item><title>Traefik acme.json permissions and corruption: renewal silently blocked</title><link>https://www.netdata.cloud/guides/traefik/traefik-acme-json-corruption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-acme-json-corruption/</guid><description>&lt;p>Your certificates are approaching expiry and Traefik has not renewed them. There is no alert, no error metric, and depending on how the failure happened, possibly nothing useful in the logs either. The root cause in a large share of these incidents is the ACME storage file itself: &lt;code>acme.json&lt;/code> has the wrong permissions, or it has been corrupted by a partial write, a restore, or an out-of-memory event during a write.&lt;/p></description></item><item><title>Traefik backend connection pool: keep-alive, MaxIdleConnsPerHost, and reuse</title><link>https://www.netdata.cloud/guides/traefik/traefik-backend-connection-pool/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-backend-connection-pool/</guid><description>&lt;p>Every request Traefik proxies needs a TCP connection to a backend. Whether that connection is freshly dialed or reused from a pool determines how much per-request overhead you pay, and it is one of the least monitored parts of the proxy. A misconfigured pool shows up as elevated latency on every request (TCP and possibly TLS handshake costs per request), as growing TIME_WAIT socket counts marching toward ephemeral port exhaustion, or as sporadic 502s with no backend outage to explain them.&lt;/p></description></item><item><title>Traefik cannot assign requested address: ephemeral port exhaustion</title><link>https://www.netdata.cloud/guides/traefik/traefik-cannot-assign-requested-address/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-cannot-assign-requested-address/</guid><description>&lt;p>Traefik starts returning 502 Bad Gateway for some or all proxied requests. Backend health checks are green. Backends respond fine when you hit them directly. The Traefik logs show the real error: &lt;code>dial tcp &amp;lt;backend-ip&amp;gt;:&amp;lt;port&amp;gt;: connect: cannot assign requested address&lt;/code>.&lt;/p>
&lt;p>This is ephemeral port exhaustion: the kernel has no free local ports left for Traefik to open a new outbound TCP connection to a backend. Almost every port in the ephemeral range is pinned by a socket in TIME_WAIT, left behind by a connection that closed up to a minute ago.&lt;/p></description></item><item><title>Traefik cascading backend failure: how a partial outage becomes a total one</title><link>https://www.netdata.cloud/guides/traefik/traefik-cascading-backend-failure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-cascading-backend-failure/</guid><description>&lt;p>A backend pool behind Traefik rarely fails all at once. It fails one server at a time, and each failure makes the next one more likely. Two of your eight backends go down, the remaining six absorb the redistributed traffic plus the retry traffic Traefik generates, one of the six starts timing out under the extra load, and now five are carrying the full weight. Within minutes the pool is empty and Traefik returns 503 to every client, even though Traefik itself is perfectly healthy.&lt;/p></description></item><item><title>Traefik certificate expired: when ACME renewal has been failing silently</title><link>https://www.netdata.cloud/guides/traefik/traefik-certificate-expired/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-certificate-expired/</guid><description>&lt;p>Browsers are rejecting your site with a certificate error, and Traefik is the TLS terminator. The process is up, &lt;code>/ping&lt;/code> returns 200, traffic flows on port 80, and every HTTPS client reports an expired or expiring certificate. This is the signature of silent ACME renewal failure.&lt;/p>
&lt;p>The nasty part is the timeline. Traefik attempts renewal 30 days before expiry. For a 90-day Let&amp;rsquo;s Encrypt certificate, that means renewal has been attempted since day 60. If a certificate is 7 days from expiry, renewal has already been failing for roughly 53 days. There is no Prometheus metric for ACME failure. The only metric you get is the consequence: &lt;code>traefik_tls_certs_not_after&lt;/code> sliding toward the current time while nothing alerts.&lt;/p></description></item><item><title>Traefik circuit breaker: shedding load from a failing backend</title><link>https://www.netdata.cloud/guides/traefik/traefik-circuit-breaker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-circuit-breaker/</guid><description>&lt;p>A backend is degrading. It is not fully down, so health checks still pass or flap, and Traefik keeps sending it full traffic. If you also have the retry middleware attached, every failed request comes back two or three more times, and the retry amplification loop finishes what the original failure started. The circuit breaker middleware exists for exactly this situation: it watches error and latency ratios on a router, and when they cross a threshold you define, it stops forwarding requests and answers with a fast 503 until the backend recovers.&lt;/p></description></item><item><title>Traefik CLOSE_WAIT pile-up: backend connections that never close</title><link>https://www.netdata.cloud/guides/traefik/traefik-close-wait-connection-leak/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-close-wait-connection-leak/</guid><description>&lt;p>You run &lt;code>ss -s&lt;/code> or glance at &lt;code>process_open_fds&lt;/code> and notice the Traefik process is holding thousands of sockets in CLOSE_WAIT. Traffic is still flowing, health checks pass, and &lt;code>/ping&lt;/code> returns 200, but the count grows every hour. Left alone, the leak consumes file descriptors until the process hits its limit, at which point every new connection fails and clients start seeing 502s.&lt;/p>
&lt;p>CLOSE_WAIT means the remote side sent a FIN and the kernel acknowledged it, but the local application never called &lt;code>close()&lt;/code> on the socket. In Traefik&amp;rsquo;s case, the backend (or an intermediary) closed its end of a backend connection, and Traefik&amp;rsquo;s side is still open, holding a file descriptor. There is no kernel timer that reaps CLOSE_WAIT. These sockets persist until the process closes them or dies.&lt;/p></description></item><item><title>Traefik config last reload success: monitoring configuration freshness</title><link>https://www.netdata.cloud/guides/traefik/traefik-config-last-reload-success/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-config-last-reload-success/</guid><description>&lt;p>Traefik&amp;rsquo;s most dangerous failure mode is the one that looks like nothing. The process is up, &lt;code>/ping&lt;/code> returns 200, existing routes keep serving traffic, and every dashboard is green. Meanwhile the configuration provider disconnected two hours ago, the three services you deployed since then are invisible, and the service you scaled down is still getting traffic at dead addresses. This is provider desync, and the only Traefik-native signal that exposes it is configuration freshness.&lt;/p></description></item><item><title>Traefik configuration reload storm: provider churn eating CPU</title><link>https://www.netdata.cloud/guides/traefik/traefik-config-reload-storm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-config-reload-storm/</guid><description>&lt;p>Traefik&amp;rsquo;s CPU is pinned, request latency is jittery, GC pauses are climbing, and traffic volume looks completely normal. The culprit is not the traffic. It is the control plane: &lt;code>rate(traefik_config_reloads_total[5m])&lt;/code> is sitting above 1 reload per second, and every reload rebuilds the entire routing table.&lt;/p>
&lt;p>In busy Kubernetes and Docker environments, every pod event (creation, deletion, readiness change) can trigger a configuration rebuild. At high churn rates Traefik spends more CPU rebuilding the routing table than it spends routing requests. This is most visible during cluster-wide rollouts and autoscaler events, but it also appears when health checks flap and pods re-register in a loop.&lt;/p></description></item><item><title>Traefik context canceled during reload: intermittent errors on config change</title><link>https://www.netdata.cloud/guides/traefik/traefik-context-canceled-reload/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-context-canceled-reload/</guid><description>&lt;p>You are seeing small bursts of failed requests: a handful of 499s or 502s, lasting a second or two, then nothing. The backends are healthy, health checks pass, latency is normal, and the errors do not repeat on any schedule. When you overlay the error timestamps on Traefik&amp;rsquo;s metrics, each burst lines up exactly with an increment of &lt;code>traefik_config_reloads_total&lt;/code>.&lt;/p>
&lt;p>During a dynamic configuration rebuild, Traefik&amp;rsquo;s &lt;code>cancelPrevState()&lt;/code> cancels the context attached to the previous router configuration. In-flight requests, middleware chains, or backend connections that still hold a reference to that context receive a context-canceled error mid-request and fail. It is rare, intermittent, and almost impossible to reproduce on demand, which is why it gets misdiagnosed as flaky backends or network blips.&lt;/p></description></item><item><title>Traefik dashboard and API exposed: your routing table on the public internet</title><link>https://www.netdata.cloud/guides/traefik/traefik-dashboard-api-exposed/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-dashboard-api-exposed/</guid><description>&lt;p>If Traefik&amp;rsquo;s dashboard, API endpoints (&lt;code>/api/rawdata&lt;/code>, &lt;code>/api/http/services&lt;/code>, &lt;code>/api/http/routers&lt;/code>), or &lt;code>/debug/pprof&lt;/code> answer requests from the public internet, you are publishing a map of your infrastructure. The API returns every router rule, backend server URL, middleware configuration, and upstream health status. &lt;code>/debug/pprof&lt;/code> adds Go runtime profiling data. Automated scanners fingerprint Traefik continuously, and the dashboard API has a history of information-disclosure issues. The fix is usually a ten-minute configuration change, but only if you know the exposure exists. Many teams never test from outside their own network.&lt;/p></description></item><item><title>Traefik dashboard returns 404: reaching the API and dashboard correctly</title><link>https://www.netdata.cloud/guides/traefik/traefik-dashboard-404/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-dashboard-404/</guid><description>&lt;p>You opened a browser to what you think is the dashboard address and got a bare &amp;ldquo;404 page not found&amp;rdquo;. Or the dashboard HTML loads but every panel is empty because the underlying &lt;code>/api&lt;/code> calls all return 404. This almost always comes down to one of three things: the API is not enabled, you are hitting the wrong port or path, or secure mode is on but no router was ever defined for the internal API service.&lt;/p></description></item><item><title>Traefik entrypoint vs service latency: measuring middleware overhead</title><link>https://www.netdata.cloud/guides/traefik/traefik-entrypoint-vs-service-latency/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-entrypoint-vs-service-latency/</guid><description>&lt;p>A client reports that requests through Traefik are slow. You check &lt;code>traefik_service_request_duration_seconds&lt;/code> and the backends look fine: p95 is 80ms, well inside the SLO. Yet clients measure 400ms end to end. The missing time is being spent inside Traefik itself, and the service-level metric cannot see it.&lt;/p>
&lt;p>Traefik exposes request duration at two points in its pipeline: at the entrypoint, where the request arrives from the client, and at the service, where the request is handed to a backend. The difference between the two is Traefik&amp;rsquo;s own overhead: TLS termination, router matching, the middleware chain, compression, and request/response buffering. Because Traefik ships no per-middleware Prometheus metrics, this subtraction is the only metrics-based way to localise middleware cost without capturing Go profiles or traces.&lt;/p></description></item><item><title>Traefik file descriptor monitoring: process_open_fds, limits, and headroom</title><link>https://www.netdata.cloud/guides/traefik/traefik-file-descriptor-monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-file-descriptor-monitoring/</guid><description>&lt;p>Traefik file descriptor exhaustion is a cliff-edge failure. The proxy works until it hits its OS limit on open files, then 100% of new connections fail instantly with &amp;ldquo;too many open files&amp;rdquo; errors. Existing connections keep working, so dashboards can look calm while every new client is dropped. There is no graceful degradation.&lt;/p>
&lt;p>The most obvious Traefik connection metric, &lt;code>traefik_open_connections&lt;/code>, does not measure the thing that kills you. It tracks only entrypoint connections, a subset of total FD usage. The comprehensive signal is the ratio &lt;code>process_open_fds / process_max_fds&lt;/code> from the Go process collector, which counts everything the process holds open: client sockets, backend sockets, provider connections, log files, ACME storage, and pipes.&lt;/p></description></item><item><title>Traefik GC pauses: when Go garbage collection shows up in request latency</title><link>https://www.netdata.cloud/guides/traefik/traefik-gc-pause-latency/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-gc-pause-latency/</guid><description>&lt;p>Your p99 latency graph has periodic spikes that do not line up with traffic, deployments, or backend slowness. The spikes hit every service at once, last tens to hundreds of milliseconds, and then everything goes back to normal. When a latency event affects all concurrent requests simultaneously and leaves backends untouched, the suspect list gets short, and Go garbage collection is near the top of it.&lt;/p>
&lt;p>Traefik is a Go process. Every request it proxies runs on goroutines inside one shared heap, and when the runtime stops the world to collect garbage, every in-flight request waits. Most of the time these pauses are sub-millisecond and invisible. Under high heap size or a high allocation rate, they become long enough to show up in your request duration histograms.&lt;/p></description></item><item><title>Traefik goroutine leak: go_goroutines climbing toward OOM</title><link>https://www.netdata.cloud/guides/traefik/traefik-goroutine-leak/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-goroutine-leak/</guid><description>&lt;p>Your Traefik dashboard shows &lt;code>go_goroutines&lt;/code> climbing steadily over hours or days. Traffic is flat. Latency and error rates look normal. Yet the goroutine count keeps rising, RSS grows in lockstep, and you can extrapolate a straight line from today&amp;rsquo;s memory usage to the container limit and read off the day Traefik gets OOM-killed, dropping every in-flight connection with it.&lt;/p>
&lt;p>In Traefik this almost always has the same shape: a backend accepts the TCP connection but never sends response headers, and the forwarding transport has no timeout (or a very long one) on that wait. Each stuck request leaves a goroutine blocked indefinitely. The goroutine count is the earliest visible signal, long before users feel anything.&lt;/p></description></item><item><title>Traefik HA config drift: replicas serving different routing tables</title><link>https://www.netdata.cloud/guides/traefik/traefik-ha-config-drift/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-ha-config-drift/</guid><description>&lt;p>The symptom: a route works, then it doesn&amp;rsquo;t, then it does. Refreshing the page flips between a working service and a 404 or 502. Testing from one network works; from another it fails. Behind this randomness is a simple mechanism: you run multiple Traefik replicas for availability, one has gone stale, and the load balancer in front of them sends your requests to whichever replica it picks.&lt;/p>
&lt;p>Each Traefik replica watches its configuration provider (Kubernetes API, Docker socket, Consul, file) independently. There is no shared state between replicas. If one replica loses provider connectivity, through an RBAC change, a network partition, or a dead Docker socket, it keeps serving its last-known routing table. It does not flush routes, it does not crash, and &lt;code>/ping&lt;/code> still returns 200. The other replicas update normally. Your fleet is now serving two different views of the world, and the failure only appears when the load balancer picks the stale instance.&lt;/p></description></item><item><title>Traefik health checks pass but requests fail: when the probe lies</title><link>https://www.netdata.cloud/guides/traefik/traefik-health-check-false-positive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-health-check-false-positive/</guid><description>&lt;p>Every backend for the service shows &lt;code>traefik_service_server_up = 1&lt;/code>. The dashboard is green. And clients are getting 502s and 504s on real requests. Traefik is not malfunctioning: it is faithfully reporting the results of the probe you configured. The problem is that the probe and the production traffic path are testing different things.&lt;/p>
&lt;p>This failure mode inverts your usual triage instinct. Normally &lt;code>server_up = 1&lt;/code> means &amp;ldquo;rule out the backend.&amp;rdquo; Here it means nothing of the sort: the health check answered a question, just not the one your users are asking. Three distinct mechanisms produce this state, and they have different fixes.&lt;/p></description></item><item><title>Traefik high CPU usage: TLS handshakes, regex rules, and config rebuilds</title><link>https://www.netdata.cloud/guides/traefik/traefik-high-cpu-usage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-high-cpu-usage/</guid><description>&lt;p>Traefik is pegging cores and request latency is climbing. The process is alive, &lt;code>/ping&lt;/code> returns 200, and traffic is still flowing, but p99 latency is creeping up and TLS connections are slower to establish. You need to know which of the three usual suspects is burning the CPU: cryptographic work, middleware processing, or configuration rebuilds.&lt;/p>
&lt;p>Traefik CPU is dominated by TLS handshake computation (especially with RSA certificates), then middleware chain processing (gzip compression, JWT validation, regex-based routing rules), then configuration rebuilds whose cost scales with routers times middlewares times services. The diagnosis is almost entirely correlation: match the CPU curve against the TLS handshake rate, the config reload rate, and the request rate, and the cause usually names itself.&lt;/p></description></item><item><title>Traefik high request latency: isolating Traefik overhead from backend slowness</title><link>https://www.netdata.cloud/guides/traefik/traefik-high-latency/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-high-latency/</guid><description>&lt;p>Latency dashboards are red, p95 is climbing, and the first question from the incident channel is &amp;ldquo;is it the proxy or the app?&amp;rdquo; With Traefik in the path, that question has a precise answer if you compare the right two metrics and read the JSON access-log fields most operators skip.&lt;/p>
&lt;p>Traefik measures request duration at two points in its pipeline. &lt;code>traefik_entrypoint_request_duration_seconds&lt;/code> measures the request at the edge, including TLS, middleware processing, and backend time. &lt;code>traefik_service_request_duration_seconds&lt;/code> measures only the leg from Traefik to the backend and back. The difference between the two is Traefik&amp;rsquo;s own overhead. If entrypoint latency is high but service latency is normal, the time is being burned inside Traefik itself: TLS handshakes, middleware chain processing, gzip compression, response buffering, or an access-log write that is blocking request goroutines. If both are high, the backend is slow and Traefik is just the messenger.&lt;/p></description></item><item><title>Traefik intermittent 502 behind a load balancer: the timeout chain mismatch</title><link>https://www.netdata.cloud/guides/traefik/traefik-timeout-chain-502/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-timeout-chain-502/</guid><description>&lt;p>Some percentage of requests behind your cloud load balancer return 502. Not all of them, just a low-grade drip: one in a few hundred, sometimes one in a few thousand. Backend logs show nothing. Traefik logs show a burst of 502s with no corresponding backend error. Load balancer health checks are green. Everything looks healthy, and users keep hitting errors.&lt;/p>
&lt;p>This is the classic signature of a keep-alive idle timeout mismatch in the chain client -&amp;gt; load balancer -&amp;gt; Traefik -&amp;gt; backend. Somewhere in that chain, a component is reusing a connection that the next hop has already closed. The request is written into a half-dead socket, the other side answers with a TCP reset, and the proxy reports 502 Bad Gateway. Because it only happens when a request lands on an idle connection at the wrong moment, it is intermittent, load-dependent, and hard to reproduce.&lt;/p></description></item><item><title>Traefik memory usage growing: routing table size and heap trends</title><link>https://www.netdata.cloud/guides/traefik/traefik-memory-usage-growing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-memory-usage-growing/</guid><description>&lt;p>&lt;code>process_resident_memory_bytes&lt;/code> on your Traefik instance has been climbing for days. Request rates look normal, error rates are flat, and &lt;code>/ping&lt;/code> returns 200. The question is whether the proxy legitimately needs more memory because its routing table grew, or whether it is leaking and will get OOM-killed at 3 a.m. with zero warning.&lt;/p>
&lt;p>The failure mode is asymmetric. Go&amp;rsquo;s garbage collector absorbs growing allocation pressure gracefully, running more often and burning more CPU, until it cannot. Then the kernel OOM killer terminates the process instantly, dropping every connection in flight. There is no graceful degradation phase.&lt;/p></description></item><item><title>Traefik monitoring checklist: the signals every production edge router needs</title><link>https://www.netdata.cloud/guides/traefik/traefik-monitoring-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-monitoring-checklist/</guid><description>&lt;p>Traefik fails in ways that static proxies do not. It is both a data-plane proxy and a control-plane configuration reconciler, and its worst failure modes are silent: a dead provider connection, a stalled ACME renewal, a file descriptor limit creeping toward exhaustion. The process stays up, &lt;code>/ping&lt;/code> returns 200, and traffic keeps flowing on stale configuration while new deployments get 404s.&lt;/p>
&lt;p>This checklist organizes the signals that matter into four maturity levels: survival, operational, mature, and expert. Each level builds on the previous one. Every item names the exact metric, why it matters, and the severity it deserves. Use it to audit an existing monitoring setup or to build one from scratch.&lt;/p></description></item><item><title>Traefik monitoring maturity model: from survival to expert</title><link>https://www.netdata.cloud/guides/traefik/traefik-monitoring-maturity-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-monitoring-maturity-model/</guid><description>&lt;p>Most Traefik outages are not exotic monitoring gaps. They are the same six failures repeating across teams: the process died, the FD limit was 1024, the cert expired, the provider went silent, the backend pool collapsed, or retries amplified a partial failure into a total one. A maturity model helps because it sequences coverage against the failures you are actually going to have, in the order you are going to have them.&lt;/p></description></item><item><title>Traefik open connections growing: spotting a connection leak</title><link>https://www.netdata.cloud/guides/traefik/traefik-open-connections-growing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-open-connections-growing/</guid><description>&lt;p>The &lt;code>traefik_open_connections&lt;/code> gauge is climbing. Request rate is flat. Every hour the number is higher than the last, and it never comes back down, even after the traffic peak passes. That divergence is the signature of a connection leak: connections are opened and never closed, and each one holds a file descriptor, a goroutine, and some memory.&lt;/p>
&lt;p>Left alone, this ends one way. Traefik hits its file descriptor limit and stops accepting new connections instantly. Existing connections keep working, so some health checks still pass, but every new client is refused. It is a cliff-edge failure with no graceful degradation, and the climb gives you hours or days of warning if you are watching the right signal.&lt;/p></description></item><item><title>Traefik out of memory: OOM kills and the crash loop that follows</title><link>https://www.netdata.cloud/guides/traefik/traefik-out-of-memory-oom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-out-of-memory-oom/</guid><description>&lt;p>Traefik was proxying traffic normally. Then the process vanished. In Kubernetes you see &lt;code>OOMKilled&lt;/code> in the pod&amp;rsquo;s last terminated state and a restart count that keeps climbing. On bare metal or Docker you see exit code 137 and a container that came back up, ran for a while, and died again.&lt;/p>
&lt;p>An OOM kill has no graceful degradation phase. Go&amp;rsquo;s garbage collector absorbs growing memory pressure by running more often, right up until the moment it cannot. Then the kernel OOM killer terminates the process instantly. Every in-flight connection drops at once: client connections, backend connections, WebSockets, gRPC streams. From the outside it looks like a total, simultaneous outage of everything behind the proxy.&lt;/p></description></item><item><title>Traefik request rate monitoring: entrypoint and service throughput baselines</title><link>https://www.netdata.cloud/guides/traefik/traefik-request-rate-monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-request-rate-monitoring/</guid><description>&lt;p>Traefik exposes two request counters that look similar but measure different things. &lt;code>traefik_entrypoint_requests_total&lt;/code> counts every request that arrives at a listener, whether or not Traefik finds a route for it. &lt;code>traefik_service_requests_total&lt;/code> counts only requests that matched a router, survived the middleware chain, and were proxied to a backend. The difference between the two is where most routing and middleware problems show up first.&lt;/p>
&lt;p>Static thresholds (&amp;ldquo;page if requests/sec drops below 50&amp;rdquo;) fail on a reverse proxy fronting heterogeneous workloads. A static asset service and a compute-heavy API differ by orders of magnitude, and the same entrypoint differs by time of day. This article covers what each counter counts, how to read the gap between them, and how to build per-entrypoint, per-service, per-time-of-day baselines that catch real faults without paging on legitimate traffic dips.&lt;/p></description></item><item><title>Traefik retry amplification: how retries turn a slow backend into an outage</title><link>https://www.netdata.cloud/guides/traefik/traefik-retry-amplification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-retry-amplification/</guid><description>&lt;p>A backend service starts degrading. Responses get slow, some connections fail. Traefik&amp;rsquo;s retry middleware re-sends the failed requests, usually to other backends in the pool. Backend load doubles or triples. The struggling service falls further behind, which produces more failures, which produces more retries. Within minutes, a partial degradation becomes a complete outage, and Traefik is doing a significant share of the damage while trying to help.&lt;/p>
&lt;p>The worst part: this loop can be invisible on the dashboards your team actually watches. If a request fails twice but succeeds on the third attempt, the client got a 200. Your success-rate graphs look fine while the backend absorbs 3x the real client traffic and slides toward collapse.&lt;/p></description></item><item><title>Traefik route not loading: silently ignored annotations and labels</title><link>https://www.netdata.cloud/guides/traefik/traefik-route-not-loading/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-route-not-loading/</guid><description>&lt;p>You deployed a service, added the Traefik annotations or labels, and the route does not work. Requests to the hostname return 404. Traefik is up, other routes work, the provider is connected, and there is no error anywhere in the logs. The service simply does not exist as far as Traefik is concerned.&lt;/p>
&lt;p>This is silent rejection: Traefik ignores any annotation or label key it does not recognize. A wrong prefix, a misspelled key, a label at the wrong YAML level, or a value mangled by YAML parsing all produce the same outcome: the route is never created, no error metric is emitted, and nothing is logged at the default log level. The configuration you wrote and the configuration Traefik loaded diverge without either side complaining.&lt;/p></description></item><item><title>Traefik router priority conflicts: when overlapping rules match the wrong service</title><link>https://www.netdata.cloud/guides/traefik/traefik-router-priority-conflict/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-router-priority-conflict/</guid><description>&lt;p>Traffic for &lt;code>api.example.com&lt;/code> is landing on your generic dashboard service instead of the API backend. Or you deployed a new router with what looks like a correct rule, and it never matches a single request. Traefik is up, &lt;code>/ping&lt;/code> returns 200, there are no errors in the logs, and the config reload metric keeps advancing. Everything looks healthy except the routing decision itself.&lt;/p>
&lt;p>This is almost always a router priority conflict. When two routers have overlapping rules, Traefik does not pick the most specific match by semantics. It sorts routers by a numeric priority, and the first one whose rule matches wins. The default priority is the length of the rule string, not the specificity of the rule. A longer but broader rule will shadow a shorter, more specific one.&lt;/p></description></item><item><title>Traefik routing table explosion: thousands of routes and slow rebuilds</title><link>https://www.netdata.cloud/guides/traefik/traefik-routing-table-explosion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-routing-table-explosion/</guid><description>&lt;p>Your Traefik instance is still passing traffic, but something is off. Memory climbs week over week. Every Ingress change causes a CPU blip and a small latency spike. Restart counts are creeping up, and the last restart was an OOM kill. When you look at the provider, you find thousands of Ingress or IngressRoute objects that nobody ever pruned.&lt;/p>
&lt;p>This is the routing table explosion failure mode. Traefik rebuilds its entire routing table on every configuration change, holds the whole thing in memory, and pays a per-request matching cost for every router it knows about. The failure is slow and linear right up until the OOM killer makes it instant.&lt;/p></description></item><item><title>Traefik service retries climbing: reading the retry signal before it cascades</title><link>https://www.netdata.cloud/guides/traefik/traefik-service-retries-total/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-service-retries-total/</guid><description>&lt;p>&lt;code>traefik_service_retries_total&lt;/code> is climbing for one of your services. Your dashboards show green: clients are getting 200s, the error rate looks flat, and &lt;code>/ping&lt;/code> is happy. That is exactly what makes this signal dangerous. Retries mask backend instability from clients while multiplying the load Traefik sends to the backends. By the time client-facing errors appear, the amplification loop may already be running.&lt;/p>
&lt;p>This guide covers how to read the retry signal, how to tell a harmless burst (rolling update, instance flapping) from the early stage of a cascade, and what to do before the loop feeds itself.&lt;/p></description></item><item><title>Traefik service server up at zero: backend health checks are failing</title><link>https://www.netdata.cloud/guides/traefik/traefik-service-server-up-zero/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-service-server-up-zero/</guid><description>&lt;p>&lt;code>traefik_service_server_up&lt;/code> is 0 for one or more URLs in a service. Traefik&amp;rsquo;s health checker has pulled those backends out of the load balancer rotation. If every URL in the service is at 0, Traefik has nowhere to send requests and is returning 503 to clients right now.&lt;/p>
&lt;p>This is a backend-side symptom, not a Traefik-side one. Traefik is doing what you configured it to do: stop sending traffic to servers that fail its checks. The useful question is whether the checks are telling the truth about the backends, and if so, why the backends are failing.&lt;/p></description></item><item><title>Traefik serving stale configuration: the silent provider desync</title><link>https://www.netdata.cloud/guides/traefik/traefik-provider-desync-stale-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-provider-desync-stale-config/</guid><description>&lt;p>A developer deploys a new service. The pods are running, the Ingress or IngressRoute exists, everything looks right in Kubernetes. But the service returns 404 from the edge. Meanwhile, a service deleted an hour ago is still receiving traffic and failing. You check Traefik: process is up, &lt;code>/ping&lt;/code> returns 200, existing routes work. Nothing is alerting.&lt;/p>
&lt;p>This is the silent provider desync, and it is the most commonly missed Traefik failure mode. The provider watch (Kubernetes API, Docker socket, Consul, file) has died or fallen behind. Traefik does not flush its routes when this happens. It keeps the last-known-good configuration and retries the provider connection in the background, with no loud failure signal. The routing table freezes at the moment of disconnection.&lt;/p></description></item><item><title>Traefik serving the default certificate: SNI and certificate selection</title><link>https://www.netdata.cloud/guides/traefik/traefik-default-certificate-served/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-default-certificate-served/</guid><description>&lt;p>A client hits your site and gets a certificate warning. The certificate presented is a self-signed cert with CN &amp;ldquo;TRAEFIK DEFAULT CERT&amp;rdquo; instead of the certificate you configured. Everything else looks fine: Traefik is up, &lt;code>/ping&lt;/code> returns 200, backends are healthy, routes work. The proxy is completely healthy and the only broken thing is which certificate it picked during the TLS handshake.&lt;/p>
&lt;p>This failure is invisible to most Traefik monitoring. There is no error counter, no 5xx, no failed health check. The TLS handshake succeeds; it just succeeds with the wrong certificate. Unless you probe TLS externally, you find out from a user&amp;rsquo;s screenshot.&lt;/p></description></item><item><title>Traefik TLS certificate expiry monitoring: reading traefik_tls_certs_not_after</title><link>https://www.netdata.cloud/guides/traefik/traefik-tls-certs-not-after/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-tls-certs-not-after/</guid><description>&lt;p>&lt;code>traefik_tls_certs_not_after&lt;/code> is the only signal Traefik gives you about certificate expiry. There is no metric for ACME renewal failures, no counter for rate limit rejections, no gauge for &amp;ldquo;the challenge did not complete.&amp;rdquo; You get a Unix timestamp per certificate, and everything else has to be inferred from it or pulled from logs.&lt;/p>
&lt;p>Most teams wire it to a pager with a threshold like &amp;ldquo;alert at 7 days.&amp;rdquo; Then the first ACME renewal happens, the old certificate series stays in the output, and the pager fires for a certificate that is no longer serving anything. Or the alert fires for a staging certificate, or for a dormant cert left in the store from a decommissioned hostname, and the on-call learns to ignore it. This guide covers reading the metric correctly and building an alert chain that only wakes someone up when a certificate that is actually serving production traffic is about to expire.&lt;/p></description></item><item><title>Traefik TLS handshake latency: RSA cost, session resumption, and CPU</title><link>https://www.netdata.cloud/guides/traefik/traefik-tls-handshake-latency/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-tls-handshake-latency/</guid><description>&lt;p>Clients report slow first page loads or high connect times, but backend latency looks fine and error rates are flat. When the delay shows up before the first byte of the request is processed, the TLS handshake at the Traefik entrypoint is the prime suspect.&lt;/p>
&lt;p>Handshakes are the largest per-connection CPU cost for a terminating proxy, and they add latency to every new connection before any routing, middleware, or backend work happens. Traefik exposes no dedicated handshake-latency metric, so you have to infer it from latency decomposition and process CPU.&lt;/p></description></item><item><title>Traefik TLS version monitoring: catching TLS 1.0/1.1 legacy traffic</title><link>https://www.netdata.cloud/guides/traefik/traefik-tls-version-compliance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-tls-version-compliance/</guid><description>&lt;p>TLS 1.0 and 1.1 have been deprecated for years, and compliance regimes like PCI DSS require TLS 1.2 as a minimum. The risky part of setting a minimum TLS version is not the config change. It is finding out, before you enforce the floor, which clients still negotiate old protocol versions. Flip &lt;code>minVersion&lt;/code> blind and you will discover the legacy client population from user complaints.&lt;/p>
&lt;p>Traefik already counts every request by negotiated TLS version and cipher suite. That counter is the inventory tool you need: watch it, identify the holdouts, remediate or accept them, then enforce the floor with confidence.&lt;/p></description></item><item><title>Traefik too many open files: file descriptor exhaustion at the edge</title><link>https://www.netdata.cloud/guides/traefik/traefik-too-many-open-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-too-many-open-files/</guid><description>&lt;p>Your Traefik logs are filling with &lt;code>accept4: too many open files&lt;/code> errors. New clients cannot connect. Requests that do get through may return 502 or 503. Meanwhile, some clients insist everything works fine, because their existing connections are still alive.&lt;/p>
&lt;p>This is file descriptor (FD) exhaustion. Traefik sits at the edge and holds at least two FDs per proxied connection: one for the client side, one for the backend side. Add provider connections (Docker socket, Kubernetes API watches), log files, and ACME storage handles, and the count climbs fast. When it hits the OS limit, every new &lt;code>accept4()&lt;/code> call fails instantly.&lt;/p></description></item><item><title>Traefik traffic dropped to zero: entrypoint request rate flatlined</title><link>https://www.netdata.cloud/guides/traefik/traefik-traffic-drop-to-zero/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-traffic-drop-to-zero/</guid><description>&lt;p>The request rate on an entrypoint that normally serves traffic has fallen to zero, or close enough. Clients are timing out or getting connection errors. Sometimes Traefik&amp;rsquo;s process is still running and &lt;code>/ping&lt;/code> still returns 200, which makes this worse: your health checks are green while no traffic is flowing.&lt;/p>
&lt;p>There are two fundamentally different families of root cause, and telling them apart early is the whole game. Either traffic is not reaching Traefik at all (DNS, cloud load balancer, firewall, network partition upstream of the proxy), or traffic is arriving at the host but Traefik cannot accept it (a dead listener, file descriptor exhaustion, a port-bind failure after restart). The checks below are ordered to split those two families within the first few minutes.&lt;/p></description></item><item><title>Traefik traffic volume: request and response bytes for capacity planning</title><link>https://www.netdata.cloud/guides/traefik/traefik-traffic-volume-bytes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-traffic-volume-bytes/</guid><description>&lt;p>Request rate and error rate tell you how much traffic Traefik is handling and whether it is succeeding. They do not tell you how much data is moving. A proxy serving ten thousand small API calls per second and a proxy serving ten thousand large file downloads per second look identical on a requests-per-second dashboard, but they have completely different bandwidth, memory, and buffering profiles.&lt;/p>
&lt;p>Traefik&amp;rsquo;s bytes counters close that gap. &lt;code>traefik_service_requests_bytes_total&lt;/code> and &lt;code>traefik_service_responses_bytes_total&lt;/code> measure the volume of data flowing in each direction per service, with entrypoint-level and router-level equivalents for different aggregation needs. This article covers what these counters measure, how to turn them into capacity-planning inputs, which deviations are worth alerting on, and the instrumentation gaps that can mislead you.&lt;/p></description></item><item><title>Traefik under scanning: exploit-path probing and request smuggling signals</title><link>https://www.netdata.cloud/guides/traefik/traefik-scanning-probing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/traefik/traefik-scanning-probing/</guid><description>&lt;p>Any Traefik instance with a public entrypoint is being scanned right now. Requests for &lt;code>/.env&lt;/code>, &lt;code>/.git/config&lt;/code>, &lt;code>/wp-admin&lt;/code>, &lt;code>/phpMyAdmin&lt;/code>, and &lt;code>/actuator&lt;/code> arrive continuously from botnets and research scanners, and on a correctly configured instance they all get the same answer: a 404 generated by Traefik itself, because no router matches. That is normal background radiation, and paging on it will burn out your on-call in a week.&lt;/p>
&lt;p>The operator problem is not &amp;ldquo;are we being scanned&amp;rdquo; but &amp;ldquo;did anything change that makes this scan dangerous.&amp;rdquo; The three states that matter are: a probe for a sensitive path returns 200 with content, scanning volume or targeting shifts from generic to focused, or request patterns show smuggling or SSRF indicators that Go&amp;rsquo;s strict parser does not fully neutralize because of what sits behind Traefik. This guide covers how to separate those states from noise, what to check first, and which signals are worth alerting on.&lt;/p></description></item></channel></rss>