Files
bvandeusenandClaude Opus 5.5 5569f9934e
CI / lint (push) Successful in 2s
CI / integration (push) Failing after 1m24s
CI / unit (push) Successful in 1m37s
CI / publish (push) Skipped
feat(anomalies): a metric out of its normal is an anomaly to review (#5740)
#5740 "A metric that departs from its normal is recorded as an anomaly to
review, and is findable after it ends", milestone 513.

- Every minute each learned key's last 15 minutes is judged against its
  hour's normal: above the usual hold x1.25 and by the metric's floor opens
  an occurrence, which ends when the level comes back.
- metric_anomalies holds one row per item to review; a repeat while it
  still waits joins it as an occurrence (metric_anomaly_spans).
- An ended row nobody reviews within anomalies.review_days (14, Settings ->
  Thresholds) lapses; an ongoing one never does.
- Learning skips every hour an occurrence covers unless its anomaly was
  marked normal: no normal is learned without review.
- Alerts -> Anomalies lists those to review first, then the reviewed and
  lapsed under day dividers; marking is operator/admin and audited.
- The Overview widget and get_overview warn of open ones and count those
  to review; the host page shows its own; the weekly report lists the
  week's and the lapsed; MCP list_anomalies and review_anomaly.
- Reviewed and lapsed rows are pruned at data.retention_days, and kept
  in backups like alert history.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:41:57 -04:00

50 lines
1.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{# The weekly report's plain-text part; the same facts as report.html. #}
Steward weekly report, {{ period }}
{% if d.hosts_down %}
{{ d.hosts_down|length }} {{ "monitor is" if d.hosts_down|length == 1 else "monitors are" }} down now: {{ d.hosts_down|join(", ") }}
{% endif %}
ACTIVE ALERTS{% if base %} ({{ base }}/alerts/){% endif %}
{% for a in alerts %}
- {{ a.state }}: {{ a.name }} — {{ a.resource }} ({{ a.condition }})
{% else %}
None. Nothing is firing.
{% endfor %}
This week {{ d.alert_events.fired }} {{ "alert" if d.alert_events.fired == 1 else "alerts" }} fired and {{ d.alert_events.resolved }} resolved.
UPTIME OVER 7 DAYS{% if base %} ({{ base }}/monitors/){% endif %}
{% for m in d.uptime_summary %}
- {{ m.name }}: {{ "—" if m.pct_7d is none else "%.2f%%"|format(m.pct_7d) }}
{% else %}
No monitors are enabled.
{% endfor %}
{% if anomalies.seen or anomalies.lapsed %}
METRIC ANOMALIES THIS WEEK{% if base %} ({{ base }}/alerts/anomalies){% endif %}
{% for a in anomalies.seen %}
- {{ a.review }}: {{ a.name }}, {{ a.when }} ({{ a.level }})
{% endfor %}
{% for a in anomalies.lapsed %}
- {{ a.review }}: {{ a.name }}, lapsed unreviewed; {{ a.when }} ({{ a.level }})
{% endfor %}
{% if anomalies.to_review %}
{{ anomalies.to_review }} {{ "anomaly waits" if anomalies.to_review == 1 else "anomalies wait" }} to be marked normal or real.
{% endif %}
{% endif %}
{% if d.top_routers %}
BUSIEST TRAEFIK ROUTERS, LAST 24 HOURS{% if base %} ({{ base }}/plugins/traefik/){% endif %}
{% for r in d.top_routers %}
- {{ r.name }}: {{ "%.2f req/s"|format(r.avg_rate) }}
{% endfor %}
{% endif %}
--
Sent {{ sent }}. The weekly report is turned on, and its day and hour set,
in Settings › Reports.