feat(traefik): a 4xx share is worth a look only once it is a lot of 4xx (#6105)
Three 404s on a quiet router read 7.5% and were raised as an anomaly; most of the 4xx anomalies on review stood for 3 to 7 errors in 15 minutes. A new Settings → Thresholds minimum, traefik.threshold.min_4xx (default 20, more than one a minute held for the window), applies to both the router's grade on its page and to anomaly detection, as min_5xx does for 5xx. learn_normal takes `fewest`: for a share gated on a per-second rate, the fewest events (rate × window × share) it must stand for to be judged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -117,7 +117,8 @@ async def list_routers(state: str = "", limit: int = 100) -> dict:
|
||||
out = bounded(rows, clamp_limit(limit, 100, 500), key="routers",
|
||||
more="Pass a larger `limit`, or a `state`.")
|
||||
out["cutoffs"] = {"error_5xx_pct": error_5xx, "error_4xx_pct": error_4xx,
|
||||
"min_requests_15m": page.min_requests(thresholds)}
|
||||
"min_requests_15m": page.min_requests(thresholds),
|
||||
"min_5xx_15m": page.min_5xx(thresholds), "min_4xx_15m": page.min_4xx(thresholds)}
|
||||
out["gone"] = [{"router": r["name"], "last_scraped_at": iso(r["latest"].scraped_at)} for r in gone[:20]]
|
||||
return out
|
||||
|
||||
|
||||
Reference in New Issue
Block a user