Skip to content

fix(observability): ignore reboot OOM resets and 30s inventory blips - #399

Merged
rldyourmnd merged 2 commits into
mainfrom
fix/alert-reboot-and-gap-false-pages
Sep 4, 2026
Merged

fix(observability): ignore reboot OOM resets and 30s inventory blips#399
rldyourmnd merged 2 commits into
mainfrom
fix/alert-reboot-and-gap-false-pages

Conversation

@rldyourmnd

Copy link
Copy Markdown
Contributor

Why

Seven Telegram pages today. Two of them were false:

  • host_oom_detected on gha-runner-2 at 09:43Z said observed 3. The host had just rebooted 6.8.0-138 → 6.8.0-139. This boot has zero CONSTRAINT_NONE lines. The three kills were 2026-09-03 18:09–18:22Z on the previous boot. max_over_time - min_over_time of a boot-scoped counter treats N→0 the same as N new kills.
  • lifecycle_inventory_gap at 07:30:16Z and 14:41:31Z said observed 1. missing_instances was 1 for one 30-second sample. The rendered hold min_over_time((max(a)+max(b)+max(c))[2m:30s]) dropped the zero steps and returned 1.

Replayed against the live store before shipping: the current expressions fire at those timestamps; the replacements are 0.

The other Telegram messages were honest: queue_started_wait_slow_burn while runner-2 and services were rebooting, queue_wait_slow_burn with 12–20 queued jobs and a 16-minute oldest wait, and the two observer-missing pages while OpenObserve was ingesting after the services reboot.

Change

  • host_oom_detected: last_over_time - min_over_time (upward movement only).
  • lifecycle_inventory_gap: raw min_over_time(metric[2m]) per counter, hold_seconds == evaluation_seconds so the renderer does not wrap it in the aggregated subquery.

Verify

  • go test ./internal/observabilityrules/
  • PromQL replay at 07:30:16Z, 14:41:31Z, 09:43:02Z, 09:46:08Z

host_oom_detected used unsigned max-min span of a boot-scoped counter, so
gha-runner-2's 09:43Z kernel reboot replayed as observed 3 with zero
CONSTRAINT_NONE lines this boot. lifecycle_inventory_gap used an aggregated
subquery that dropped zero steps and paged two 30-second missing_instances=1
listing blips. Both replacements replay as 0 against the live store at those
timestamps.
…ax() holds

Instant count(up==1) paged compute_pressure_observer_missing and
host_compliance_observer_missing at 09:54–09:58Z while all members were up:
OpenObserve had not replayed every series after the services reboot.
count(last_over_time([10m])==1) was 4 and 5 at those timestamps.

github_correlation_persistent used the same scalar max(a)+max(b) subquery
that dropped zeros for lifecycle_inventory_gap. Bake min_over_time on the
raw series and keep hold equal to evaluation so the renderer does not wrap
it again.
@rldyourmnd
rldyourmnd merged commit b17a1ec into main Sep 4, 2026
10 checks passed
@rldyourmnd
rldyourmnd deleted the fix/alert-reboot-and-gap-false-pages branch September 4, 2026 18:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant