Skip to content

[observability] Stop Grafana series rejection and Alloy OOM telemetry loss #6126

Description

@viktor-shcherb

Audit finding

Both production telemetry delivery paths are losing data during the current incidents.

Host Alloy remote write

On 2026-08-01 the host collector repeatedly received HTTP 429 with err-mimir-max-active-series: the Grafana tenant exceeded its 15,000 active-series limit. Remote-write batches were rejected/stalled.

Crawler compose Alloy

The compose collector is constrained to 256 MiB and was repeatedly OOM-killed approximately every two hours on August 2-3. Audit-time restart count: 21.

Impact

Metrics and logs are incomplete exactly when PostgreSQL, Typesense, backup, reconciliation, and crawler services are failing. Process-up checks and dashboards cannot be trusted to demonstrate coverage/freshness while ingestion is rejecting series or the collector is restarting.

Scope

  • Inventory active series by job/label and identify the cardinality growth source.
  • Establish an explicit series budget per surface and remove unbounded/high-cardinality labels.
  • Restore successful host remote write with headroom below the tenant limit.
  • Profile compose Alloy memory, queue/backpressure, discovery, and log-volume behavior; fix the cause and right-size the limit.
  • Add collector self-monitoring for 429s, queue age, dropped samples/logs, memory pressure, restart count, and last successful remote write.
  • Verify alert routing independently from the same impaired telemetry path.
  • Add deploy/capacity checks that fail before cardinality or memory limits become hard outages.

Acceptance criteria

  • No err-mimir-max-active-series responses under representative load.
  • Active-series count stays within a documented budget with alerting headroom.
  • Compose Alloy runs for at least seven days without OOM/restart.
  • Host and compose metrics/logs have bounded freshness visible from the destination.
  • A forced ingestion failure reaches an independent operator channel.
  • Dashboards identify coverage gaps instead of silently displaying stale/partial data.
  • Cardinality and memory regression tests/checks are part of deployment.

Related

Found during the 2026-08-03 full repository/service audit. Murmur, Stripe, and Resend are outside scope.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:crawlerCrawler ingestion, normalization, and job-data qualitybugSomething isn't workingdaily-error-reviewReview of crawler errors over the last dayerror-review:criticalDaily error review — critical: active incident or data loss riskpriorityseverity:highHigh user impact or a core workflow is blockedtype:infraDeploy / CI / ops

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions