From 8b6e4fffa8eed18fa78428dea9484f4117d96859 Mon Sep 17 00:00:00 2001 From: Viktor Voytovych Date: Thu, 12 Nov 2026 11:41:27 +0200 Subject: [PATCH] fix: give unowned policy alerts activity's owner A DLQ alert takes its service and team from the failing policy's owner. A policy that declares no owner fired with no service and team sre, which no route keys on, so the alert fell to the catch-all channel. It now falls back to activity's own owner, service control-plane and team platform, as the platform's catalog names the owner of activity-system. A policy that declares an owner keeps it. Key changes: - The five policy alerts fall back to service control-plane and team platform when the policy declares no owner - The processor alert for failed DLQ publishes names the same owner - The alert tests expect the fallback for policies without an owner --- .../observability/alerts/dlq-alerts.yaml | 28 +++++++++++++++---- test/observability/dlq-alerts.test.yaml | 24 ++++++++++------ 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/config/components/observability/alerts/dlq-alerts.yaml b/config/components/observability/alerts/dlq-alerts.yaml index 512d40cc..00936729 100644 --- a/config/components/observability/alerts/dlq-alerts.yaml +++ b/config/components/observability/alerts/dlq-alerts.yaml @@ -51,7 +51,10 @@ spec: labels: severity: warning component: activity-processor - team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}sre{{ end }}' + # A policy that declares no owner falls back to activity's own: the catalog's owner of + # activity-system, service control-plane, team platform. + service: '{{ if $labels.service }}{{ $labels.service }}{{ else }}control-plane{{ end }}' + team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}platform{{ end }}' annotations: summary: "Activity policy{{ if $labels.policy_name }} {{ $labels.policy_name }}{{ end }} is failing to generate activities" description: "Activity processing{{ if $labels.cluster }} on {{ $labels.cluster }}{{ end }} is sending {{ $value }} {{ $labels.event_type }} events/sec for {{ $labels.api_group }}/{{ $labels.kind }} to the dead-letter queue after {{ $labels.error_type }} failures. This rate has persisted for 15 minutes. Check the activity policy and processor logs for the failing rule and event payload." @@ -65,7 +68,8 @@ spec: labels: severity: warning component: activity-processor - team: sre + service: control-plane + team: platform annotations: summary: "Events that failed activity processing cannot be saved for retry" description: "The activity processor{{ if $labels.cluster }} on {{ $labels.cluster }}{{ end }} reports {{ $value }} errors/sec while saving failed {{ $labels.event_type }} events to the dead-letter queue (phase: {{ $labels.error_phase }}). Check processor logs and queue connectivity so events that failed activity policy processing can be retained for retry." @@ -92,7 +96,10 @@ spec: labels: severity: warning component: activity-processor - team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}sre{{ end }}' + # A policy that declares no owner falls back to activity's own: the catalog's owner of + # activity-system, service control-plane, team platform. + service: '{{ if $labels.service }}{{ $labels.service }}{{ else }}control-plane{{ end }}' + team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}platform{{ end }}' annotations: summary: "Activity policy{{ if $labels.policy_name }} {{ $labels.policy_name }}{{ end }} events keep failing retries" description: "Activity policy retries{{ if $labels.cluster }} on {{ $labels.cluster }}{{ end }} for {{ $labels.api_group }}/{{ $labels.kind }} recorded {{ $value }} failures at or above the high retry threshold in the last hour. The count can include repeated attempts for the same event. Check the policy and processor logs for persistent evaluation or delivery failures." @@ -119,7 +126,10 @@ spec: labels: severity: warning component: activity-processor - team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}sre{{ end }}' + # A policy that declares no owner falls back to activity's own: the catalog's owner of + # activity-system, service control-plane, team platform. + service: '{{ if $labels.service }}{{ $labels.service }}{{ else }}control-plane{{ end }}' + team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}platform{{ end }}' annotations: summary: "Activity policy{{ if $labels.policy_name }} {{ $labels.policy_name }}{{ end }} has recurring activity generation failures" description: "Activity processing{{ if $labels.cluster }} on {{ $labels.cluster }}{{ end }} sent {{ $value }} {{ $labels.event_type }} events for {{ $labels.api_group }}/{{ $labels.kind }} to the dead-letter queue in the last 6 hours with {{ $labels.error_type }} errors. Inspect the activity policy and failed payloads for event shapes its rules do not handle." @@ -157,7 +167,10 @@ spec: labels: severity: warning component: activity-processor - team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}sre{{ end }}' + # A policy that declares no owner falls back to activity's own: the catalog's owner of + # activity-system, service control-plane, team platform. + service: '{{ if $labels.service }}{{ $labels.service }}{{ else }}control-plane{{ end }}' + team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}platform{{ end }}' subject: "{{ $labels.policy_name }}" annotations: summary: "Activity policy {{ $labels.policy_name }} keeps failing during retries" @@ -195,7 +208,10 @@ spec: labels: severity: warning component: activity-processor - team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}sre{{ end }}' + # A policy that declares no owner falls back to activity's own: the catalog's owner of + # activity-system, service control-plane, team platform. + service: '{{ if $labels.service }}{{ $labels.service }}{{ else }}control-plane{{ end }}' + team: '{{ if $labels.policy_team }}{{ $labels.policy_team }}{{ else }}platform{{ end }}' annotations: summary: "Activity policy {{ $labels.policy_name }} is failing to generate activities" description: "Activity policy {{ $labels.policy_name }} for {{ $labels.api_group }}/{{ $labels.kind }} is sending {{ $value }} events/sec to the dead-letter queue with {{ $labels.error_type }} errors. Check the policy's rules against failed event payloads in the activity-processor logs." diff --git a/test/observability/dlq-alerts.test.yaml b/test/observability/dlq-alerts.test.yaml index 133f3089..cb29ef2f 100644 --- a/test/observability/dlq-alerts.test.yaml +++ b/test/observability/dlq-alerts.test.yaml @@ -33,7 +33,8 @@ tests: error_type: cel_summary severity: warning component: activity-processor - team: sre + team: platform + service: control-plane subject: networking.datumapis.com-httpproxy exp_annotations: summary: Activity policy networking.datumapis.com-httpproxy keeps failing during retries @@ -49,7 +50,8 @@ tests: error_type: cel_summary severity: warning component: activity-processor - team: sre + team: platform + service: control-plane subject: another-policy exp_annotations: summary: Activity policy another-policy keeps failing during retries @@ -65,7 +67,8 @@ tests: error_type: cel_summary severity: warning component: activity-processor - team: sre + team: platform + service: control-plane subject: networking.datumapis.com-httpproxy exp_annotations: summary: Activity policy networking.datumapis.com-httpproxy keeps failing during retries @@ -81,7 +84,8 @@ tests: error_type: cel_match severity: warning component: activity-processor - team: sre + team: platform + service: control-plane subject: networking.datumapis.com-httpproxy exp_annotations: summary: Activity policy networking.datumapis.com-httpproxy keeps failing during retries @@ -120,7 +124,8 @@ tests: error_type: cel_summary severity: warning component: activity-processor - team: sre + team: platform + service: control-plane subject: networking.datumapis.com-httpproxy exp_annotations: summary: Activity policy networking.datumapis.com-httpproxy keeps failing during retries @@ -169,7 +174,8 @@ tests: error_type: cel_summary severity: warning component: activity-processor - team: sre + team: platform + service: control-plane subject: networking.datumapis.com-httpproxy exp_annotations: summary: Activity policy networking.datumapis.com-httpproxy keeps failing during retries @@ -230,7 +236,8 @@ tests: error_type: cel_summary severity: warning component: activity-processor - team: sre + team: platform + service: control-plane subject: another-policy exp_annotations: summary: Activity policy another-policy keeps failing during retries @@ -246,7 +253,8 @@ tests: error_type: cel_summary severity: warning component: activity-processor - team: sre + team: platform + service: control-plane subject: networking.datumapis.com-httpproxy exp_annotations: summary: Activity policy networking.datumapis.com-httpproxy keeps failing during retries